Home liberachat/#haskell: Logs Calendar

Logs on 2021-12-27 (liberachat/#haskell)

00:02:49 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
00:03:25 <EvanR> is there any state of the art on implicit configurations I'm not aware of... is reflection still the latest for that
00:07:03 × max22- quits (~maxime@2a01cb088335980093d703d768803864.ipv6.abo.wanadoo.fr) (Remote host closed the connection)
00:07:29 <iphy> EvanR: https://github.com/iphydf/hs-cimple/commit/19e45c13acbaea04182674ec6be1db9f23369975
00:08:46 <iphy> EvanR: so now I have Fix around everything, how can I put attributes on it?
00:09:22 <iphy> I removed the Attr node
00:09:26 × kjak quits (~kjak@pool-108-45-56-21.washdc.fios.verizon.net) (Ping timeout: 252 seconds)
00:10:06 <iphy> I guess I'll need something like Fix but with another property on it
00:10:32 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
00:10:34 <iphy> can TraverseAst be made to work on any arbitrary Fix-like type?
00:10:58 <iphy> maybe the Fix-like object needs a class that unwraps it
00:11:17 <iphy> this will be a puzzle for another day :)
00:13:16 dcoutts_ joins (~duncan@71.78.6.51.dyn.plus.net)
00:18:49 × albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
00:19:37 × dcoutts_ quits (~duncan@71.78.6.51.dyn.plus.net) (Ping timeout: 240 seconds)
00:23:12 × Everything quits (~Everythin@37.115.210.35) (Quit: leaving)
00:23:56 dcoutts_ joins (~duncan@71.78.6.51.dyn.plus.net)
00:24:52 <iphy> EvanR: I'm not sure what this refactoring bought me, what did I get for free?
00:24:56 albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8)
00:25:43 <iphy> can TraverseAst be automatic now?
00:26:41 × burakcank quits (~burakcank@has.arrived.and.is.ready-to.party) (Quit: fBNC - https://bnc4free.com)
00:27:09 burnsidesLlama joins (~burnsides@dhcp168-010.wadham.ox.ac.uk)
00:29:14 × vysn quits (~vysn@user/vysn) (Ping timeout: 252 seconds)
00:31:49 × burnsidesLlama quits (~burnsides@dhcp168-010.wadham.ox.ac.uk) (Ping timeout: 268 seconds)
00:37:56 × DNH quits (~DNH@2a02:8108:1100:16d8:6043:aa58:f99b:e1b) (Quit: My MacBook has gone to sleep. ZZZzzz…)
00:40:07 kjak joins (~kjak@pool-108-45-56-21.washdc.fios.verizon.net)
00:43:05 seiryn joins (~seiryn@2a01cb040147e000e4dbf764ff30bd96.ipv6.abo.wanadoo.fr)
00:44:46 × acidjnk quits (~acidjnk@p200300d0c7271e72b97741cdfe77e27f.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
00:48:34 <iphy> EvanR: what would a function look like that adds attributes to an existing AST wrapped in Fix?
00:52:52 kupi joins (uid212005@id-212005.hampstead.irccloud.com)
01:02:33 mvk joins (~mvk@2607:fea8:5cdd:f000::917a)
01:02:49 × Nolrai2 quits (~Nolrai2@73.240.1.39) (Quit: Client closed)
01:09:57 × waleee quits (~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4) (Ping timeout: 240 seconds)
01:10:43 × aallen quits (~aallen@072-182-074-253.res.spectrum.com) (Ping timeout: 256 seconds)
01:11:49 × albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
01:17:56 albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8)
01:27:40 × Alleria quits (~textual@user/alleria) (Quit: Textual IRC Client: www.textualapp.com)
01:29:55 falafel_ joins (~falafel@2603-8000-d800-688c-502d-7280-71cc-20e7.res6.spectrum.com)
01:30:24 × machinedgod quits (~machinedg@24.105.81.50) (Ping timeout: 268 seconds)
01:30:32 falafel__ joins (~falafel@2603-8000-d800-688c-9993-a5d6-8c3d-400e.res6.spectrum.com)
01:31:35 burakcank joins (~burakcank@has.arrived.and.is.ready-to.party)
01:33:22 <energizer> "broadcast vs map" https://julialang.org/blog/2017/01/moredots/#broadcast_vs_map is there a function like broadcast in haskell?
01:34:17 × falafel_ quits (~falafel@2603-8000-d800-688c-502d-7280-71cc-20e7.res6.spectrum.com) (Ping timeout: 240 seconds)
01:34:17 × dcoutts_ quits (~duncan@71.78.6.51.dyn.plus.net) (Ping timeout: 240 seconds)
01:36:24 <dsal> energizer: I don't know Julia. Can you describe what you're trying to do?
01:36:39 kaph joins (~kaph@net-2-38-107-19.cust.vodafonedsl.it)
01:36:40 <energizer> dsal: this is just idle curiosity
01:37:21 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
01:37:41 <dsal> Well, sure, but I don't understand what broadcast is meant to do and don't have enough background in julia to figure out what it's trying to do.
01:39:07 burnsidesLlama joins (~burnsides@dhcp168-010.wadham.ox.ac.uk)
01:39:24 geekosaur joins (~geekosaur@xmonad/geekosaur)
01:43:17 × burnsidesLlama quits (~burnsides@dhcp168-010.wadham.ox.ac.uk) (Ping timeout: 240 seconds)
01:47:37 × falafel__ quits (~falafel@2603-8000-d800-688c-9993-a5d6-8c3d-400e.res6.spectrum.com) (Ping timeout: 240 seconds)
01:50:47 × arahael quits (~arahael@203.158.51.1) (Quit: WeeChat 3.1)
01:56:59 Lycurgus joins (~juan@98.4.112.204)
01:57:59 <Lycurgus> int-e, how did you get 208.94.116.26 for lyah dot com?
02:00:23 <Lycurgus> in any case, it having been gone for sure for several days and with that (nearlyfreespeech) as the last hosting
02:01:26 <Lycurgus> accepting author has moved on, doesn't care with > 80% confidence
02:02:40 <Lycurgus> with the complementary (< 20%) likelihood the author will bring back at his expense
02:07:20 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
02:09:10 × Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
02:09:22 Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
02:17:34 machinedgod joins (~machinedg@24.105.81.50)
02:17:44 drewr joins (~drew@user/drewr)
02:17:52 AlexNoo_ joins (~AlexNoo@178.34.163.120)
02:17:56 qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection)
02:17:57 qrpnxz joins (abc4f95c31@user/qrpnxz)
02:18:41 <EvanR> iphy, maybe Fix (AttrF `Compose` ExprF)
02:18:48 × AlexNoo quits (~AlexNoo@178.34.163.120) (Read error: Connection reset by peer)
02:24:57 × drewr quits (~drew@user/drewr) (Ping timeout: 240 seconds)
02:31:55 jackson99 joins (~bc8147f2@cerf.good1.com)
02:34:23 <otherwise> foldl starts at the left side of a list, and moves to the right through the list?
02:35:01 × Midjak quits (~Midjak@may53-1-78-226-116-92.fbx.proxad.net) (Quit: This computer has gone to sleep)
02:35:49 <geekosaur> both foldl and foldr do. (you can't start at the "right end" of a list, and the notion is incompatible with foldr being able to handle infinite lists)
02:36:03 <geekosaur> foldl left-associates; foldr right-associates
02:36:12 <geekosaur> > foldr f z [a,b,c]
02:36:13 <lambdabot> f a (f b (f c z))
02:36:18 <geekosaur> > foldl f z [a,b,c]
02:36:19 <lambdabot> f (f (f z a) b) c
02:37:29 <geekosaur> if anything, left associativity means it's foldl that "starts at the right", as shown there
02:39:18 <dsal> otherwise: foldr works with infinite lists. It’s a good default when you don’t care
02:40:45 <dsal> > foldr (\x o -> 3) 5 [11..]
02:40:47 <lambdabot> 3
02:41:29 × neurocyte0132889 quits (~neurocyte@user/neurocyte) (Ping timeout: 250 seconds)
02:42:06 <geekosaur> foldr works more naturally with lists because they're right-associative to begin with
02:42:11 <geekosaur> % :info (:)
02:42:11 <yahb> geekosaur: type [] :: * -> *; data [] a = ... | a : [a]; -- Defined in `GHC.Types'; infixr 5 :
02:43:38 BrokenClutch parts (~pioneer@2804:d41:c2a7:d800:e627:b00b:2c62:134) ()
02:44:13 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
02:49:20 × xff0x quits (~xff0x@2001:1a81:538d:1a00:d6e3:ac9b:2d1c:a9e) (Ping timeout: 268 seconds)
02:50:59 xff0x joins (~xff0x@2001:1a81:53c9:5600:a4b4:57a2:f2c0:c793)
02:51:31 × seiryn quits (~seiryn@2a01cb040147e000e4dbf764ff30bd96.ipv6.abo.wanadoo.fr) (Quit: WeeChat 3.3)
02:51:33 <otherwise> implementing map with foldr:
02:51:42 <otherwise> > let mapFoldr f xs = foldr (\x acc -> f x : acc) [] xs in mapFoldr (+1) [1..5]
02:51:44 <lambdabot> [2,3,4,5,6]
02:52:01 <EvanR> with eager evaluation, foldr would cause f c z to "happen first", in foldl f z a "happens first", as shown with those expansions from lambdabot
02:52:23 <otherwise> then with foldr:
02:52:25 <otherwise> > let mapFoldl f xs = foldl (\acc x -> f x : acc) [] xs in mapFoldl (+1) [1..5]
02:52:26 <lambdabot> [6,5,4,3,2]
02:52:34 <otherwise> it is reversed
02:52:36 <EvanR> with lazy evaluation it's neither of those
02:53:42 <otherwise> hmm okay, i'll mull it over
02:54:22 <EvanR> in particular the expansions don't properly explain the operational aspect of foldl
02:54:29 <EvanR> (lazy version)
02:55:06 fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
02:56:06 × Pickchea quits (~private@user/pickchea) (Ping timeout: 268 seconds)
02:58:48 × pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.4)
02:59:17 × fizbin quits (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Ping timeout: 240 seconds)
03:00:55 × Lycurgus quits (~juan@98.4.112.204) (Quit: Exeunt)
03:04:42 × lemonsnicks quits (~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net) (Quit: ZNC 1.8.2 - https://znc.in)
03:06:06 <iphy> EvanR: hm interesting
03:09:46 <otherwise> how do I make ghci do:
03:09:48 <otherwise> > foldl f z [a,b,c]
03:09:49 <lambdabot> f (f (f z a) b) c
03:10:19 <xsperry> :t foldl f z [a,b,c]
03:10:20 <lambdabot> Expr
03:10:24 <xsperry> @hoogle Expr
03:10:25 <lambdabot> Test.Tasty.Patterns.Types data Expr
03:10:25 <lambdabot> module Text.Parsec.Expr
03:10:25 <lambdabot> module Text.ParserCombinators.Parsec.Expr
03:10:26 <otherwise> import Data.lambdabot or something?
03:14:50 <xsperry> it is a separate library, but I can't recall its name.
03:16:19 <otherwise> after doing "import Text.ParserCombinators.Parsec.Expr" now my prelude is "Prelude Text.ParserCombinators.Parsec.Expr> "
03:16:45 <otherwise> and :browse gives something new
03:17:00 <xsperry> no that isn't it, Parsec is a parsing package
03:17:43 lemonsnicks joins (~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net)
03:18:13 lavaman joins (~lavaman@98.38.249.169)
03:21:36 <dsal> > f [Expr]
03:21:36 <otherwise> dsal foldl does not work on infinite lists because there is not an element to start moving left from (last item in the list)? I hope thats the case cause it makes sense to me.
03:21:38 <lambdabot> error:
03:21:38 <lambdabot> • Data constructor not in scope: Expr
03:21:38 <lambdabot> • Perhaps you meant variable ‘expr’ (imported from Debug.SimpleReflect)
03:21:49 <dsal> Simple reflect
03:22:18 <dsal> otherwise: yeah, you can see it in the expansion above
03:22:36 × kupi quits (uid212005@id-212005.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
03:23:14 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 268 seconds)
03:23:17 Rum joins (~bourbon@user/rum)
03:34:00 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
03:34:00 finn_elija joins (~finn_elij@user/finn-elija/x-0085643)
03:34:00 finn_elija is now known as FinnElija
03:34:06 <iphy> EvanR: "well at least you get map and fold for free" <- where is map?
03:36:15 <jackson99> otherwise, did you figure out list of functions issue you had earlier today?
03:40:27 × neceve quits (~quassel@2.26.93.228) (Ping timeout: 256 seconds)
03:40:56 <int-e> lyxia: I googled for a cached DNS query (since there are websites that do DNS queries)
03:41:23 <int-e> oh no
03:41:37 <int-e> that was for Lycurgus who left
03:41:59 <otherwise> jackson99 no
03:42:33 <jackson99> :t map (*) [1,2,3,4]
03:42:33 <lambdabot> Num a => [a -> a]
03:42:35 <otherwise> I still don't know how to use take on (map (*) [0..5])
03:42:37 <otherwise> or any list
03:42:52 <jackson99> > map ($10) (map (*) [1,2,3,4])
03:42:53 <lambdabot> [10,20,30,40]
03:42:54 <otherwise> I can get it to evaluate the head of a list
03:43:13 <otherwise> hmm
03:43:15 <jackson99> or with lambda
03:43:23 <jackson99> > map (\f -> f 10) (map (*) [1,2,3,4])
03:43:25 <lambdabot> [10,20,30,40]
03:43:35 <jackson99> or you can just do:
03:43:58 <jackson99> > map (*10) [1,2,3,4]
03:44:00 <lambdabot> [10,20,30,40]
03:44:11 <jackson99> unless the goal was specifically to build a list of functions for some reason
03:46:59 <otherwise> okay, i'll see if I can not make take work on (map (*) [0..])
03:48:18 aallen joins (~aallen@072-182-074-253.res.spectrum.com)
03:48:45 <otherwise> > let funList = map (*) [0..] in take 3 (map ($10) funList)
03:48:46 <lambdabot> [0,10,20]
03:48:58 <otherwise> dear god. that took hours to make work
03:49:06 <otherwise> 100's of failed attempts
03:49:21 <otherwise> thank you dearly
03:50:12 × aallen quits (~aallen@072-182-074-253.res.spectrum.com) (Client Quit)
03:52:07 burnsidesLlama joins (~burnsides@dhcp168-010.wadham.ox.ac.uk)
03:52:54 <otherwise> > let funList n m = take n (map ($m) (map (*) [0..])) in funList 10 3
03:52:55 <lambdabot> [0,3,6,9,12,15,18,21,24,27]
03:53:13 <otherwise> awwww, how refreshing
03:53:54 <jackson99> do you know what $ is?
03:54:36 <otherwise> precedence demoter
03:54:45 <jackson99> > let funList n m = take n (map (*m) [0..])) in funList 10 3
03:54:46 <otherwise> or something like that
03:54:47 <lambdabot> <hint>:1:42: error: parse error on input ‘)’
03:54:51 <jackson99> > let funList n m = take n (map (*m) [0..]) in funList 10 3
03:54:53 <lambdabot> [0,3,6,9,12,15,18,21,24,27]
03:54:57 <jackson99> no need for double map
03:56:17 × burnsidesLlama quits (~burnsides@dhcp168-010.wadham.ox.ac.uk) (Ping timeout: 240 seconds)
03:56:46 <otherwise> right, but that is skipping the whole notion of "I have a list of partial application functions, how do I enter it and evaluate the function"
03:57:16 <otherwise> I agree, for that line of code, skipping the map (*) is the logical thing to do
03:57:35 <iphy> EvanR: https://github.com/TokTok/hs-cimple/blob/master/src/Language/Cimple/Pretty.hs#L389-L397 how would something like this work with foldFix?
03:57:45 <jackson99> use a lambda then, easier to understand than $, since you don't seem to know what $ is
03:58:07 <otherwise> But I was approaching as if I had a preexisting [(0*), (1*), ..] and then using take on it
03:58:16 <otherwise> haha
03:58:16 <iphy> https://github.com/iphydf/hs-cimple/blob/fix/src/Language/Cimple/Pretty.hs#L387-L395 <- here is the Fix version
03:58:54 × td_ quits (~td@94.134.91.110) (Ping timeout: 260 seconds)
03:58:59 nattiestnate joins (~nate@2001:448a:20a0:4134:25e:715f:d637:5263)
04:00:00 <jackson99> that's not a knock on you, $ is confusing at first
04:00:13 <dsal> :src ($)
04:00:18 <dsal> @src ($)
04:00:18 <lambdabot> f $ x = f x
04:00:24 td_ joins (~td@muedsl-82-207-238-094.citykom.de)
04:00:35 yauhsien joins (~yauhsien@61-231-42-148.dynamic-ip.hinet.net)
04:00:49 mbuf joins (~Shakthi@122.178.203.86)
04:02:58 qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection)
04:02:59 qrpnxz joins (abc4f95c31@user/qrpnxz)
04:03:28 qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: closed)
04:03:38 qrpnxz joins (abc4f95c31@user/qrpnxz)
04:04:57 × yauhsien quits (~yauhsien@61-231-42-148.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
04:07:11 <otherwise> When I try to read :doc in ghci, all the @ symbols throw me off, what do they mean, or better yet, how to I translate it into an english sentence? the same way I'd translate 3+2 into Three plus two, for ex...
04:07:47 <dsal> I've never used that feature. I should try it.
04:08:14 <dsal> Oh, it's just haddock stuff.
04:08:52 <otherwise> > :doc $
04:08:53 <lambdabot> <hint>:1:1: error: parse error on input ‘:’
04:08:56 <c_wraith> Yeah, that's a major issue with :doc right now
04:09:09 <dsal> % :doc ($)
04:09:09 <yahb> dsal: Application operator. This operator is redundant, since ordinary; application @(f x)@ means the same as @(f '$' x)@. However, '$' has; low, right-associative binding precedence, so it sometimes allows; parentheses to be omitted; for example:; > f $ g $ h x = f (g (h x)); It is also useful in higher-order situations, such as @'map' ('$' 0) xs@,; or @'Data.List.zipWith' ('$') fs xs@.; Note th
04:09:18 <c_wraith> there needs to be some effort made in rendering haddock to plain text
04:09:25 <otherwise> its probably better that way, it would just blow up the chat with lots of lines
04:09:41 <otherwise> oh, there it is
04:10:03 <otherwise> yea, all those @ symbols!
04:10:07 <c_wraith> otherwise: haddock uses @ to start and end inline code formatting
04:10:13 <c_wraith> they don't mean anything
04:11:22 <c_wraith> or rather, they don't mean anything as code, because they're markup. Not code. They're rendering instructions that :doc ignores and decides to print instead
04:12:37 × notzmv quits (~zmv@user/notzmv) (Ping timeout: 240 seconds)
04:12:48 <c_wraith> Same as the ' around identifiers - haddock for "generate a link to this symbol"
04:13:12 <otherwise> got it
04:13:50 yauhsien joins (~yauhsien@61-231-42-148.dynamic-ip.hinet.net)
04:20:51 × nattiestnate quits (~nate@2001:448a:20a0:4134:25e:715f:d637:5263) (Quit: WeeChat 3.4)
04:21:04 nattiestnate joins (~nate@2001:448a:20a0:4134:25e:715f:d637:5263)
04:21:58 justsomeguy joins (~justsomeg@user/justsomeguy)
04:22:45 <otherwise> jackson99 and c_wraith thank you :)
04:25:58 × otherwise quits (~otherwise@c-73-221-44-172.hsd1.wa.comcast.net) ()
04:26:55 × machinedgod quits (~machinedg@24.105.81.50) (Ping timeout: 256 seconds)
04:30:03 Feuermagier joins (~Feuermagi@user/feuermagier)
04:30:27 deadmarshal joins (~deadmarsh@95.38.116.71)
04:38:30 zebrag joins (~chris@user/zebrag)
04:40:07 × Rum quits (~bourbon@user/rum) (Quit: WeeChat 3.4)
04:40:59 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
04:49:09 × Morrow quits (~quassel@bzq-110-168-31-106.red.bezeqint.net) (Remote host closed the connection)
04:49:12 × yauhsien quits (~yauhsien@61-231-42-148.dynamic-ip.hinet.net) (Remote host closed the connection)
04:49:39 yauhsien joins (~yauhsien@61-231-42-148.dynamic-ip.hinet.net)
04:50:14 Morrow joins (~quassel@bzq-110-168-31-106.red.bezeqint.net)
04:52:53 × nattiestnate quits (~nate@2001:448a:20a0:4134:25e:715f:d637:5263) (Quit: WeeChat 3.4)
04:54:02 × yauhsien quits (~yauhsien@61-231-42-148.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
04:55:09 nattiestnate joins (~nate@2001:448a:20a0:4134:25e:715f:d637:5263)
04:59:04 × nattiestnate quits (~nate@2001:448a:20a0:4134:25e:715f:d637:5263) (Client Quit)
05:00:17 Erutuon joins (~Erutuon@user/erutuon)
05:00:19 × joo-_ quits (~joo-_@fsf/member/joo--) (Quit: leaving)
05:00:34 joo-_ joins (~joo-_@87-49-147-205-mobile.dk.customer.tdc.net)
05:00:34 × joo-_ quits (~joo-_@87-49-147-205-mobile.dk.customer.tdc.net) (Changing host)
05:00:34 joo-_ joins (~joo-_@fsf/member/joo--)
05:04:05 takuan joins (~takuan@178-116-218-225.access.telenet.be)
05:04:27 × Morrow quits (~quassel@bzq-110-168-31-106.red.bezeqint.net) (Remote host closed the connection)
05:05:17 × jinsun quits (~quassel@user/jinsun) (Ping timeout: 240 seconds)
05:06:06 jinsun joins (~quassel@user/jinsun)
05:07:36 cherryblossom[m] joins (~cherryblo@2001:470:69fc:105::b789)
05:10:12 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
05:14:57 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
05:20:50 <EvanR> iphy, map is Functor
05:23:18 × joo-_ quits (~joo-_@fsf/member/joo--) (Quit: Lost terminal)
05:24:02 joo-_ joins (~joo-_@87-49-147-205-mobile.dk.customer.tdc.net)
05:24:02 × joo-_ quits (~joo-_@87-49-147-205-mobile.dk.customer.tdc.net) (Changing host)
05:24:02 joo-_ joins (~joo-_@fsf/member/joo--)
05:26:02 <[itchyjunk]> :i
05:26:04 <[itchyjunk]> :o
05:26:41 × justsomeguy quits (~justsomeg@user/justsomeguy) (Quit: WeeChat 3.3)
05:29:50 <jackson99> % :i Functor
05:29:50 <yahb> jackson99: type Functor :: (* -> *) -> Constraint; class Functor f where; fmap :: (a -> b) -> f a -> f b; (<$) :: a -> f b -> f a; {-# MINIMAL fmap #-}; -- Defined in `GHC.Base'; instance [safe] Functor m => Functor (WriterT w m) -- Defined in `Control.Monad.Trans.Writer.Lazy'; instance [safe] Functor m => Functor (StateT s m) -- Defined in `Control.Monad.Trans.State.Lazy'; instance [safe] Functor m => Func
05:31:04 DNH joins (~DNH@2a02:8108:1100:16d8:6043:aa58:f99b:e1b)
05:31:30 × zebrag quits (~chris@user/zebrag) (Quit: Konversation terminated!)
05:33:40 alfonsox joins (~quassel@103.92.42.104)
05:34:45 × TonyStone quits (~TonyStone@cpe-74-76-51-197.nycap.res.rr.com) (Remote host closed the connection)
05:35:30 × DNH quits (~DNH@2a02:8108:1100:16d8:6043:aa58:f99b:e1b) (Ping timeout: 260 seconds)
05:36:06 <alfonsox> is learnyouhaskell.com down ?
05:36:45 otherwise joins (~otherwise@2601:602:880:90f0:7490:2afa:37a4:523b)
05:36:59 <dsal> I've heard resolution complaints today.
05:37:36 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
05:38:00 <jackson99> it is down
05:38:08 <jackson99> but you can read it in here. https://web.archive.org/web/20211204094509/http://learnyouahaskell.com/
05:39:44 <alfonsox> learnyouahaskell.com’s server IP address could not be found. This is what I am getting in chrome.
05:40:14 <alfonsox> Thank you @jackson99. I'll use web.archive for now.
05:42:27 <alfonsox> Anyone have authors email ? bonus at learnyouahaskell dot com ( mentioned at site), but not sure if email will reach to him due to name resolution error.
05:49:17 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 240 seconds)
05:49:26 <EvanR> maybe it's time for the next learn you a haskell xD
05:51:03 yauhsien joins (~yauhsien@61-231-42-148.dynamic-ip.hinet.net)
05:56:30 × yauhsien quits (~yauhsien@61-231-42-148.dynamic-ip.hinet.net) (Ping timeout: 260 seconds)
06:05:26 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
06:05:26 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
06:05:26 wroathe joins (~wroathe@user/wroathe)
06:07:49 × rekahsoft quits (~rekahsoft@cpe0008a20f982f-cm64777d666260.cpe.net.cable.rogers.com) (Ping timeout: 240 seconds)
06:07:49 nattiestnate joins (~nate@182.3.37.200)
06:08:46 <otherwise> Are you writing EvanR ?
06:09:13 <otherwise> big public irc book reveal?
06:09:48 <EvanR> I can't justify that, I don't know enough haskell
06:10:26 <EvanR> Besides, I think learning haskell would be better as an old school text adventure (with graphics)
06:11:31 <otherwise> Yes, I agree about that format, that should be the next standard. I think haskell.org homepage tutorial is a very rudimentary version of that. It is good and could be expanded creatively
06:12:04 <EvanR> as always the key is collecting the proper exercises
06:13:50 <otherwise> well the storyline would somewhat dictate that. As long as you keep to the story line, the exercises would just fall in place. (easier said than realized...)
06:15:09 <EvanR> one of the two is much harder to come up with
06:16:17 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds)
06:19:24 <otherwise> hmm, I just realized all the haskell I've done is dealing with lists. Is there a way to write a nXm matrix?
06:19:35 <EvanR> reflection has a weird side effect... if you have a top level thing that is like foo :: Given MyConfig => Other -> Stuff, then :t foo won't work in ghci. Though foo will still work "if used" correctly
06:19:59 <EvanR> no instance for Given MyConfig
06:20:13 Morrow joins (~quassel@bzq-110-168-31-106.red.bezeqint.net)
06:20:20 <dsal> You could do something along the lines of AoC, but suggest particular things for the solution.
06:20:41 <EvanR> otherwise, I've done a few of those. Also available in libraries
06:20:58 <dsal> otherwise: There are arrays with arbitrary indexes and Data.Vector. And probably countless actual matrix libraries.
06:22:51 <dsal> I end up using Maps a lot.
06:23:57 <EvanR> specifically "n x m" matrix is kind of calling for the n and m to be in the type, which you can do
06:24:28 <EvanR> and would be great
06:25:03 <EvanR> the blog "graphical linear algebra" makes you really want those in the type
06:26:12 <EvanR> if you're doing graphics maybe you can get away assuming everything is 4x4
06:26:32 notzmv joins (~zmv@user/notzmv)
06:28:41 farzad joins (~farzad@5.121.10.41)
06:30:36 <otherwise> let split (x:xs) = if length xs < 7 then [] else (take 7 (x:xs)): split (tail xs) in split [1..21]
06:30:41 <otherwise> > let split (x:xs) = if length xs < 7 then [] else (take 7 (x:xs)): split (tail xs) in split [1..21]
06:30:43 <lambdabot> [[1,2,3,4,5,6,7],[3,4,5,6,7,8,9],[5,6,7,8,9,10,11],[7,8,9,10,11,12,13],[9,10...
06:31:01 <otherwise> oh its too big..
06:31:27 <otherwise> > let split (x:xs) = if length xs < 3 then [] else (take 3 (x:xs)): split (tail xs) in split [1..15]
06:31:29 <lambdabot> [[1,2,3],[3,4,5],[5,6,7],[7,8,9],[9,10,11],[11,12,13]]
06:31:45 <EvanR> chunksOf 3
06:32:00 <xerox> > takeWhile (not . null) . unfoldr (Just . splitAt 4) $ [1..10]
06:32:02 <lambdabot> [[1,2,3,4],[5,6,7,8],[9,10]]
06:32:27 <EvanR> > chunksOf 3 [1..15]
06:32:28 <lambdabot> [[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15]]
06:33:18 <otherwise> chunksOf is not in my ghci
06:33:34 <EvanR> I think it's from a package... called split
06:33:49 <EvanR> that is apparently loaded
06:38:38 <dsal> @hoogle chunksOf
06:38:39 <lambdabot> Data.Sequence chunksOf :: Int -> Seq a -> Seq (Seq a)
06:38:39 <lambdabot> Data.Sequence.Internal chunksOf :: Int -> Seq a -> Seq (Seq a)
06:38:39 <lambdabot> Data.Text chunksOf :: Int -> Text -> [Text]
06:41:14 <EvanR> Data.List.Split
06:46:44 × shapr quits (~user@pool-100-36-247-68.washdc.fios.verizon.net) (Ping timeout: 268 seconds)
06:47:45 <otherwise> > let mapIn = map (1 -) (head (split[1..15]))
06:47:47 <lambdabot> <no location info>: error:
06:47:47 <lambdabot> not an expression: ‘let mapIn = map (1 -) (head (split[1..15]))’
06:48:06 <EvanR> in what
06:48:54 <otherwise> I dont think it would work anyway cause I forgot lambdabot doesnt know what I defined as split
06:49:09 <EvanR> yeah
06:52:17 × slowButPresent quits (~slowButPr@user/slowbutpresent) (Quit: leaving)
06:53:07 fef joins (~thedawn@user/thedawn)
06:56:47 fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
06:58:13 <otherwise> is it offensive that Haskell is not on codeacademy?
07:00:10 falafel joins (~falafel@2603-8000-d800-688c-9993-a5d6-8c3d-400e.res6.spectrum.com)
07:01:02 × fizbin quits (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Ping timeout: 240 seconds)
07:02:16 <EvanR> They have two columns of 7 languages. Making 3 columns of 5 languages may be too much to ask for their web design
07:02:28 <dsal> That looks like a vocational thing.
07:02:37 <dsal> Not learning to be better, but learning to make money.
07:02:54 <EvanR> code academy is who's making the money here
07:03:43 <otherwise> is haskell for poor people?
07:04:08 <EvanR> it's for anyone who is interested
07:06:15 <dsal> Haskell is for making blockchains and NFTs.
07:06:37 <dsal> It's just generally a great language that makes programming fun and easy.
07:07:01 <dsal> It's used in a few different industries, but it's best when it's not industry specific.
07:07:04 <EvanR> I just appointed dsal VP of sales and marketing for haskell
07:07:16 <dsal> haha
07:07:52 <EvanR> You just have a really good attitude and strong reality distortion field
07:08:03 <dsal> Sounds right.
07:08:09 <otherwise> Cardano is using haskell, apparently for blockchain tech
07:08:16 <dsal> I've had a lot of large codebases, though.
07:08:23 <otherwise> alluded by VP of sales
07:08:49 <dsal> otherwise: Yeah. A friend of mine into that stuff tried to pull me in a while back for smart contracts and stuff. It was horrifying. I told him they needed people with Haskell experience. Now it's a brain drain as they suck in all the people with haskell experience.
07:09:07 <dsal> Getting a job doing Haskell that's *not* blockchain related is a bit harder now.
07:10:36 <dsal> Of course, that's assuming you *want* that kind of job. Knowing Haskell makes you a better programmer in general. I did a lot of non-Haskell professional programming while doing all my personal projects in Haskell.
07:11:42 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
07:12:01 enikar joins (~enikar@user/enikar)
07:12:48 <otherwise> interesting
07:13:19 <EvanR> knowing C is also good. Also not on code academy
07:13:31 <EvanR> also hard to get a job in
07:13:55 <dibblego> it's way easier
07:14:25 <dibblego> There were about 5 jobs using Haskell in the world. It was easy to make 10 more. Today, don't even have to make them.
07:16:10 Jing joins (~hedgehog@2604:a840:3::1067)
07:19:11 × nattiestnate quits (~nate@182.3.37.200) (Ping timeout: 256 seconds)
07:19:36 lavaman joins (~lavaman@98.38.249.169)
07:21:44 nattiestnate joins (~nate@182.3.37.200)
07:21:48 yauhsien joins (~yauhsien@61-231-42-148.dynamic-ip.hinet.net)
07:24:21 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 268 seconds)
07:24:59 vglfr joins (~vglfr@88.155.28.231)
07:26:33 × yauhsien quits (~yauhsien@61-231-42-148.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
07:37:12 <otherwise> trying to implement last, using foldl1, with an edge condition that returns [] if an infinite list is input.... https://paste.tomsmeding.com/xmlgcXmF
07:37:45 <dibblego> you won't
07:38:05 <otherwise> not possible?
07:38:14 <dibblego> you going to count to infinity to check?
07:38:23 <otherwise> if i have to
07:38:29 <dibblego> ok, I'll wait
07:38:33 <otherwise> done
07:39:09 <dibblego> I've gone to a party while I wait, but if I were a type-checker instead...
07:39:35 × vglfr quits (~vglfr@88.155.28.231) (Quit: Quit)
07:39:47 vglfr joins (~vglfr@88.155.28.231)
07:41:07 × jackson99 quits (~bc8147f2@cerf.good1.com) (Quit: CGI:IRC (Ping timeout))
07:42:13 × jinsun quits (~quassel@user/jinsun) (Ping timeout: 240 seconds)
07:43:21 jinsun joins (~quassel@user/jinsun)
07:45:53 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 250 seconds)
07:47:47 × nattiestnate quits (~nate@182.3.37.200) (Ping timeout: 268 seconds)
07:50:06 nicbk joins (~nicbk@user/nicbk)
07:50:09 <nicbk> #openbsd
07:51:02 coolnickname joins (uid531864@user/coolnickname)
07:57:14 qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection)
07:57:14 qrpnxz joins (abc4f95c31@user/qrpnxz)
08:00:00 qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection)
08:00:00 qrpnxz joins (abc4f95c31@user/qrpnxz)
08:00:31 qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: closed)
08:00:54 qrpnxz joins (abc4f95c31@user/qrpnxz)
08:01:32 vysn joins (~vysn@user/vysn)
08:02:36 burnsidesLlama joins (~burnsides@dhcp168-010.wadham.ox.ac.uk)
08:03:05 × phma quits (phma@2001:5b0:211c:1148:9e4d:7400:733a:b6f1) (Read error: Connection reset by peer)
08:03:17 × falafel quits (~falafel@2603-8000-d800-688c-9993-a5d6-8c3d-400e.res6.spectrum.com) (Ping timeout: 240 seconds)
08:03:32 phma joins (phma@2001:5b0:211c:1148:bf01:ab8f:863f:c9a8)
08:06:05 falafel joins (~falafel@2603-8000-d800-688c-9993-a5d6-8c3d-400e.res6.spectrum.com)
08:11:38 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
08:13:17 talismanick joins (~talismani@2601:644:8500:8350::94b)
08:13:51 <talismanick> Is there a resource for "minimal Nix" (just enough needed to manage Haskell packages), or do I need to learn it in full?
08:17:53 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
08:24:44 nattiestnate joins (~nate@182.3.37.200)
08:24:57 × n3rdy1 quits (~n3rdy1@2601:281:c780:a510:84eb:b2e:7b61:4002) (Ping timeout: 240 seconds)
08:27:22 _ht joins (~quassel@82-169-194-8.biz.kpn.net)
08:31:50 × farzad quits (~farzad@5.121.10.41) (Remote host closed the connection)
08:32:01 Nate[m]12 joins (~m52957mat@2001:470:69fc:105::1:591a)
08:33:22 × snake quits (~snake@user/snake) (Quit: Quitting)
08:34:17 farzad joins (~farzad@5.121.10.41)
08:36:31 synthmeat joins (~synthmeat@user/synthmeat)
08:38:57 × zmt00 quits (~zmt00@user/zmt00) (Ping timeout: 240 seconds)
08:41:53 jespada joins (~jespada@87.74.33.157)
08:42:01 max22- joins (~maxime@2a01cb0883359800761b1c69d9198b7f.ipv6.abo.wanadoo.fr)
08:42:55 snake joins (~snake@user/snake)
08:43:21 gehmehgeh joins (~user@user/gehmehgeh)
08:48:16 altern joins (~Sergii@altern.corbina.com.ua)
08:50:06 <altern> Hi! How to properly convert the list of files into a recursive record in Haskell? https://stackoverflow.com/questions/70490845/how-to-properly-convert-the-list-of-files-into-a-recursive-record-in-haskell
08:50:15 × econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity)
08:57:18 acidjnk joins (~acidjnk@p200300d0c7271e72b97741cdfe77e27f.dip0.t-ipconnect.de)
08:57:51 × tzh quits (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz)
09:00:20 <int-e> https://nitter.fdn.fr/gone_things/status/1475245068994838528#m
09:00:21 × burnsidesLlama quits (~burnsides@dhcp168-010.wadham.ox.ac.uk) (Remote host closed the connection)
09:08:32 dcoutts_ joins (~duncan@71.78.6.51.dyn.plus.net)
09:17:42 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b)))
09:17:42 allbery_b joins (~geekosaur@xmonad/geekosaur)
09:17:45 allbery_b is now known as geekosaur
09:22:18 × nattiestnate quits (~nate@182.3.37.200) (Read error: Connection reset by peer)
09:23:00 nattiestnate joins (~nate@182.2.164.13)
09:27:17 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
09:27:22 KvL joins (~KvL@user/KvL)
09:32:15 × snake quits (~snake@user/snake) (Quit: Leaving)
09:35:11 × stiell quits (~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection)
09:35:35 stiell joins (~stiell@gateway/tor-sasl/stiell)
09:36:51 Gurkenglas joins (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de)
09:39:57 × falafel quits (~falafel@2603-8000-d800-688c-9993-a5d6-8c3d-400e.res6.spectrum.com) (Ping timeout: 240 seconds)
09:42:06 burnsidesLlama joins (~burnsides@dhcp168-010.wadham.ox.ac.uk)
09:42:12 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
09:45:13 <otherwise> I'm trying Day 1 at adventofCode, and the provided input is a large list of numbers, stacked in a vertical collumn, but haskell cannot read it as a list. I managed to add a comma at the end of each number in vim, but I can't get vim to delete the line break in front of every number at one, to make all numbers be on the same line. Any tips?
09:46:18 <Rembane> :i lines
09:46:22 <Rembane> Meh
09:46:23 <Rembane> :t lines
09:46:24 <lambdabot> String -> [String]
09:46:32 × burnsidesLlama quits (~burnsides@dhcp168-010.wadham.ox.ac.uk) (Ping timeout: 240 seconds)
09:46:36 <Rembane> > lines "1\n2\n3\n4"
09:46:37 <lambdabot> ["1","2","3","4"]
09:46:54 × nicbk quits (~nicbk@user/nicbk) (Ping timeout: 276 seconds)
09:57:17 × Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 256 seconds)
09:58:59 × nattiestnate quits (~nate@182.2.164.13) (Ping timeout: 256 seconds)
10:02:33 coot joins (~coot@89-64-85-93.dynamic.chello.pl)
10:16:02 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
10:19:46 jinsun__ joins (~quassel@user/jinsun)
10:20:30 burnsidesLlama joins (~burnsides@dhcp168-010.wadham.ox.ac.uk)
10:21:37 × jinsun quits (~quassel@user/jinsun) (Ping timeout: 240 seconds)
10:23:46 Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915)
10:25:02 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 268 seconds)
10:25:04 Lord_of_Life_ is now known as Lord_of_Life
10:26:14 × burnsidesLlama quits (~burnsides@dhcp168-010.wadham.ox.ac.uk) (Ping timeout: 260 seconds)
10:26:41 Rum joins (~bourbon@user/rum)
10:27:39 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:b417:46a:3118:ab81)
10:31:57 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:b417:46a:3118:ab81) (Ping timeout: 240 seconds)
10:32:57 × mvk quits (~mvk@2607:fea8:5cdd:f000::917a) (Ping timeout: 240 seconds)
10:40:27 rito_ joins (~rito_gh@45.112.243.219)
10:42:37 × Akiva quits (~Akiva@user/Akiva) (Ping timeout: 256 seconds)
10:43:48 yauhsien joins (~yauhsien@61-231-42-148.dynamic-ip.hinet.net)
10:46:17 nattiestnate joins (~nate@182.2.164.13)
10:47:02 × SummerSonw quits (~The_viole@203.77.49.232) (Ping timeout: 240 seconds)
10:47:39 × jonathanx quits (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Remote host closed the connection)
10:48:17 × yauhsien quits (~yauhsien@61-231-42-148.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
10:48:44 × shriekingnoise quits (~shrieking@186.137.144.80) (Quit: Quit)
10:51:03 × nattiestnate quits (~nate@182.2.164.13) (Read error: Connection reset by peer)
10:53:10 nattiestnate joins (~nate@114.122.107.243)
10:53:59 jonathanx joins (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
10:58:45 SummerSonw joins (~The_viole@203.77.49.232)
10:58:58 fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
11:01:19 × Gurkenglas quits (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) (Ping timeout: 256 seconds)
11:03:53 × fizbin quits (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Ping timeout: 268 seconds)
11:06:17 acode joins (~acode@151.65.31.181)
11:06:53 × nattiestnate quits (~nate@114.122.107.243) (Quit: WeeChat 3.4)
11:07:13 nattiestnate joins (~nate@114.122.105.227)
11:09:27 × max22- quits (~maxime@2a01cb0883359800761b1c69d9198b7f.ipv6.abo.wanadoo.fr) (Ping timeout: 268 seconds)
11:10:12 <acode> Following up on a discussion from a few days ago, has anyone figured out what happened to the learn you a haskell website?
11:11:49 <geekosaur> still only conjecture, no definitive answer
11:12:06 Midjak joins (~Midjak@may53-1-78-226-116-92.fbx.proxad.net)
11:12:22 <iphy> https://github.com/iphydf/hs-cimple/blob/fix/src/Language/Cimple/Pretty.hs#L498-L502 how would one express this using recursion-strategies or data-fix?
11:12:59 <acode> I see. Hopefully it'll be back
11:13:17 × vglfr quits (~vglfr@88.155.28.231) (Ping timeout: 252 seconds)
11:17:09 × acidjnk quits (~acidjnk@p200300d0c7271e72b97741cdfe77e27f.dip0.t-ipconnect.de) (Ping timeout: 250 seconds)
11:17:28 mvk joins (~mvk@2607:fea8:5cdd:f000::917a)
11:20:37 × jinsun__ quits (~quassel@user/jinsun) (Ping timeout: 240 seconds)
11:21:16 lavaman joins (~lavaman@98.38.249.169)
11:22:20 jinsun joins (~quassel@user/jinsun)
11:22:31 × stiell quits (~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection)
11:22:37 × noddy quits (~user@user/noddy) (Quit: WeeChat 3.3)
11:22:52 stiell joins (~stiell@gateway/tor-sasl/stiell)
11:23:37 × KvL quits (~KvL@user/KvL) (Ping timeout: 240 seconds)
11:23:40 AlexNoo_ is now known as AlexNoo
11:25:12 noddy joins (~user@user/noddy)
11:25:17 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 240 seconds)
11:27:02 × SummerSonw quits (~The_viole@203.77.49.232) (Ping timeout: 252 seconds)
11:27:48 KvL joins (~KvL@user/KvL)
11:29:07 × KvL quits (~KvL@user/KvL) (Client Quit)
11:30:53 × jinsun quits (~quassel@user/jinsun) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
11:32:51 max22- joins (~maxime@2a01cb08833598007287589cfe6298ed.ipv6.abo.wanadoo.fr)
11:34:50 KvL joins (~KvL@user/KvL)
11:35:37 × mvk quits (~mvk@2607:fea8:5cdd:f000::917a) (Ping timeout: 240 seconds)
11:37:19 × web-50 quits (~web-50@185.202.32.108) (Quit: Client closed)
11:38:23 × max22- quits (~maxime@2a01cb08833598007287589cfe6298ed.ipv6.abo.wanadoo.fr) (Ping timeout: 250 seconds)
11:40:36 __monty__ joins (~toonn@user/toonn)
11:40:45 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
11:40:45 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
11:40:45 wroathe joins (~wroathe@user/wroathe)
11:43:13 pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
11:43:42 zer0bitz joins (~zer0bitz@185.112.82.230)
11:45:32 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 240 seconds)
11:46:48 vglfr joins (~vglfr@88.155.28.231)
11:48:09 × coot quits (~coot@89-64-85-93.dynamic.chello.pl) (Quit: coot)
11:48:56 coot joins (~coot@89-64-85-93.dynamic.chello.pl)
11:53:14 × mikoto-chan quits (~mikoto-ch@esm-84-240-99-143.netplaza.fi) (Ping timeout: 268 seconds)
11:54:54 <otherwise> do you use vim (in terminal) or something else for writing haskell programs?
11:55:17 <iphy> I use vim in terminal
11:55:20 <xerox> me too
11:55:37 <iphy> vscode is pretty good these days though
11:56:32 ProfSimm joins (~ProfSimm@87.227.196.109)
11:57:08 SummerSonw joins (~The_viole@203.77.49.232)
11:57:12 burnsidesLlama joins (~burnsides@dhcp168-010.wadham.ox.ac.uk)
11:57:49 <otherwise> I dont have a lot of experience, but I use vim in terminal, although it is a little daunting cause there are so many quick commands. I see other people in videos now and again and they are blazing through their code jumping around like a rabbit... kind of a steep learning curve to get proficient
11:59:18 Vq uses Emacs in X11
12:00:53 <Vq> I don't use that many fancy features for Haskell development though.
12:01:25 × burnsidesLlama quits (~burnsides@dhcp168-010.wadham.ox.ac.uk) (Ping timeout: 240 seconds)
12:01:40 <Vq> Just plain haskell-mode + stylish-haskell on save.
12:04:10 × KvL quits (~KvL@user/KvL) (Quit: KvL)
12:05:12 CiaoSen joins (~Jura@p200300c957347b002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
12:05:50 <otherwise> hmm Emacs eh
12:07:33 Gurkenglas joins (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de)
12:08:55 <otherwise> https://paste.tomsmeding.com/0qa2v50r
12:09:48 <otherwise> interested in feedback, especially regarding the stupid long list. There must be a better way to deal with it.
12:10:20 <otherwise> from AoT, day 1 part 1
12:12:16 <otherwise> maybe the long list can live in a separate .hs file, and the main.hs file calls the list file? I haven't done anything like that yet...
12:12:50 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
12:13:51 × Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
12:17:16 Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
12:18:21 × Rum quits (~bourbon@user/rum) (Quit: WeeChat 3.4)
12:21:52 <alfonsox> write input to .txt file
12:23:04 <alfonsox> use "getContents" to read input file.
12:25:06 neceve joins (~quassel@2.26.93.228)
12:27:26 <otherwise> alfonsox i'll give that a try now
12:30:02 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:b417:46a:3118:ab81)
12:30:59 DNH joins (~DNH@2a02:8108:1100:16d8:6043:aa58:f99b:e1b)
12:31:01 × m1dnight quits (~christoph@christophe.dev) (Quit: WeeChat 3.1)
12:31:38 m1dnight joins (~christoph@christophe.dev)
12:33:00 max22- joins (~maxime@2a01cb0883359800eadee1731c9704da.ipv6.abo.wanadoo.fr)
12:34:17 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:b417:46a:3118:ab81) (Ping timeout: 240 seconds)
12:35:47 × Flow quits (~none@gentoo/developer/flow) (Ping timeout: 250 seconds)
12:36:17 <xerox> :t \x y f g h -> do { x' <- f x; y' <- g y; h x' y' }
12:36:18 <lambdabot> Monad m => t1 -> t2 -> (t1 -> m t3) -> (t2 -> m t4) -> (t3 -> t4 -> m b) -> m b
12:36:24 <xerox> :t \x y f g h -> do { h <*> f x <*> g y }
12:36:25 <lambdabot> Applicative f => t1 -> t2 -> (t1 -> f a1) -> (t2 -> f a2) -> f (a1 -> a2 -> b) -> f b
12:36:44 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
12:36:52 <xerox> is there a way to use the second style but achieving the first's objective, with a h :: _ -> _ -> m r
12:38:38 <tomsmeding> :t \x y f g h -> do { h <$> f x <*> g y
12:38:39 <lambdabot> error:
12:38:39 <lambdabot> parse error (possibly incorrect indentation or mismatched brackets)
12:38:42 <tomsmeding> :t \x y f g h -> do { h <$> f x <*> g y }
12:38:43 <lambdabot> Applicative f => t1 -> t2 -> (t1 -> f a1) -> (t2 -> f a2) -> (a1 -> a2 -> b) -> f b
12:39:09 <alfonsox> otherwise - readFile would be better. Check Files and Stream section on https://web.archive.org/web/20211102000749/http://learnyouahaskell.com/input-and-output#files-and-streams
12:40:06 <tomsmeding> :t \x y f g h -> join (h <$> f x <*> g y)
12:40:07 <lambdabot> Monad m => t1 -> t2 -> (t1 -> m a1) -> (t2 -> m a2) -> (a1 -> a2 -> m a3) -> m a3
12:41:12 Flow joins (~none@gentoo/developer/flow)
12:41:22 <xerox> tomsmeding: alright :)
12:41:42 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
12:41:46 <tomsmeding> feels like join (fmap f x) should be simplifiable
12:42:23 <xerox> @pl \f x -> join (fmap f x)
12:42:23 <tomsmeding> oh but it's not, it's join (fmap f x <*> y)
12:42:23 <lambdabot> (=<<)
12:42:39 <xerox> @pl \f x y -> join (fmap f x <*> y)
12:42:39 <lambdabot> (((join .) . (<*>)) .) . fmap
12:42:45 <xerox> 🤮
12:42:46 <tomsmeding> useful :p
12:43:12 <xerox> :t liftM2
12:43:13 <lambdabot> Monad m => (a1 -> a2 -> r) -> m a1 -> m a2 -> m r
12:43:16 <xerox> this also is just pure
12:43:56 <tomsmeding> not quite, right?
12:44:06 <xerox> yeah I mean just r not m r
12:44:17 <tomsmeding> liftM2 = \f x y -> f <$> x <*> y, if the Applicative and Monad instances agree
12:44:30 <xerox> :t (>=>)
12:44:31 <lambdabot> Monad m => (a -> m b) -> (b -> m c) -> a -> m c
12:44:33 <tomsmeding> so your thing is also join (liftM2 h (f x) (g y))
12:44:44 <xerox> yup
12:46:25 <tomsmeding> :t \x y f g h -> f x >>= (g y >=> h)
12:46:26 <lambdabot> Monad m => t1 -> t2 -> (t1 -> m a) -> (t2 -> a -> m b1) -> (b1 -> m b2) -> m b2
12:46:32 <tomsmeding> not sure that makes it better :p
12:46:47 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
12:47:07 <tomsmeding> oh it's wrong
12:48:13 <tomsmeding> >=> doesn't help
12:48:45 tomsmeding remembers using liftM always in my early haskell adventures; then I discovered it's just fmap
12:48:56 machinedgod joins (~machinedg@24.105.81.50)
12:49:06 <hpc> eventually you discover it's just (<$>) :D
12:49:36 <tomsmeding> :p yeah I did that at roughly the same time
12:50:01 <tomsmeding> 'input <- map (map read) . lines <$> getContents' for the win
12:50:09 <tomsmeding> with some 'words' in between
12:50:24 <hpc> using straight "fmap" reminds me too much of common lisp, somehow
12:50:40 <hpc> where you have to worry about what's a real function, what's a macro, everything is annoyingly prefix, etc etc
12:50:55 <hpc> not really sure why that's where my mind goes, but i always prefer (<$>) because of it
12:50:58 ksqsf joins (~user@134.209.106.31)
12:51:23 NinjaTrappeur joins (~ninja@user/ninjatrappeur)
12:51:37 × jespada quits (~jespada@87.74.33.157) (Ping timeout: 240 seconds)
12:51:55 <otherwise> alfonsox thanks I'll look at that. I think I'm actually just going to continue with LYAH instead, because that is the next section for me anyway :) After that I'll come back and see if I can replace the gargantuan list into a separate txt file that I can call into an [Int}.
12:52:44 jespada joins (~jespada@87.74.33.157)
12:52:53 <hpc> speaking of lyah, the website is still down :(
12:53:21 <otherwise> my PDF is still going strong
12:53:52 × Gurkenglas quits (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) (Remote host closed the connection)
12:54:10 Gurkenglas joins (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de)
12:54:25 <otherwise> Yeah I was in the thick of the contents when it just shut down. Hopefully it is a sign of some upgrades to come! (probably not)
12:54:39 × coot quits (~coot@89-64-85-93.dynamic.chello.pl) (Ping timeout: 256 seconds)
12:55:08 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
12:58:46 <[itchyjunk]> I have a non haskell question, are there FP languages without GC?
12:59:12 <hpc> hmm, lyah is cc by-nc-sa, maybe it can be rehosted on haskell.org?
12:59:25 × SummerSonw quits (~The_viole@203.77.49.232) (Ping timeout: 240 seconds)
12:59:37 × Tuplanolla quits (~Tuplanoll@91-159-69-236.elisa-laajakaista.fi) (Ping timeout: 240 seconds)
12:59:55 fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
13:04:23 × fizbin quits (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Ping timeout: 252 seconds)
13:07:36 SummerSonw joins (~The_viole@203.77.49.232)
13:09:26 acidjnk joins (~acidjnk@p200300d0c7271e72b97741cdfe77e27f.dip0.t-ipconnect.de)
13:09:58 <ksqsf> [itchyjunk]: iirc ATS seems to claim to support GC-free FP, but I haven't tried it yet
13:11:21 <[itchyjunk]> Apparently I don't know what GC is. Some say scoped memory management implied GC others say it doesn't. ;_;
13:11:40 <[exa]> [itchyjunk]: there is a naive super-inefficient implementation of the GCless FP (all copies are deep copies, including the copies of closures/thunks)
13:12:13 kupi joins (uid212005@id-212005.hampstead.irccloud.com)
13:12:57 <[exa]> [itchyjunk]: most of the MM magic is about dodging by sharing some of the structures while being able to guess when it's safe to free the structure, usually by just tracking everything with a GC
13:13:58 eyJhb parts (~eyJhb@user/eyjhb) (WeeChat 3.3)
13:14:14 <ksqsf> [itchyjunk]: btw what is 'scoped memory management'? do you mean C++-style RAII?
13:14:57 × dsrt^ quits (~dsrt@207.5.54.6) (Remote host closed the connection)
13:15:06 <[itchyjunk]> It was in response to "does C has GC?" it was "no, it only has scoped memory management"
13:17:24 <[itchyjunk]> I had never though of it but it does make sense that you'ed be making deep copies as an alternative
13:17:33 <[exa]> [itchyjunk]: if you allocate all resources in strictly nested regions, the memory management can be easily done with a stack-like structure, which is precisely what C does for "simple" variables
13:17:50 <[itchyjunk]> ah
13:17:51 <[exa]> (malloc() and free() doesn't count here, these are kinda "external" to the core language)
13:19:44 <[exa]> C++ RAII kinda follows the same principle even with allocations of these "external" structures using malloc/new free/delete, the stack only retains a "handle", usually some kind of a wrapped pointer that can deallocate itself
13:19:49 × NinjaTrappeur quits (~ninja@user/ninjatrappeur) (Quit: WeeChat 3.3)
13:20:13 Tuplanolla joins (~Tuplanoll@91-159-68-119.elisa-laajakaista.fi)
13:20:49 <[exa]> with the usual FP that involves lots of functions being passed around, the ability to hide super-complex things in thunks makes the stack-style memory management quite useless
13:22:18 <[exa]> there are ways to statically analyze lots of FP and compile it down to stack code, but these usually aren't general and it's technically much easier to go the dynamic way with garbage collection
13:22:53 <tomsmeding> [itchyjunk]: https://github.com/carp-lang/Carp/ exists; kind of functional
13:27:35 <tomsmeding> [itchyjunk]: if you have a strict language without mutation (haskell is neither :p), reference counting is sufficient. Some count RC as a GC, and it kind of is, but it's impact on program execution is of a very different nature than stop-the-world GCs
13:28:00 <tomsmeding> iirc python has RC, but including some kind of cycle detection because (due to mutation) you can create cyclic data structures in python
13:28:34 <[itchyjunk]> Oh, is this why there is a hard limit for number of recursion in py?
13:28:56 <tomsmeding> no that's just control stack size, unrelated :p
13:29:02 <[itchyjunk]> hmmmmm
13:29:03 <[itchyjunk]> lol
13:29:07 <tomsmeding> (if you're talking about function recursion)
13:29:12 <acode> What does RC stand for?
13:29:16 <tomsmeding> reference counting
13:29:41 <acode> Thanks, time to do some googling
13:30:13 × farzad quits (~farzad@5.121.10.41) (Quit: Leaving)
13:30:37 <[itchyjunk]> if you have no pointer pointing to a datastructure in memory, you can free that part of memory - i think it's something like that
13:30:39 [itchyjunk] googles too
13:30:56 <tomsmeding> RC (without additional cycle detection) fails in a lazy language or in a language with mutable elements (haskell's IORef is enough, even apart from laziness), because RC cannot handle reference cycles; the members of the cycle would keep each other alive
13:31:51 <tomsmeding> [itchyjunk]: yeah, the idea is that every time you throw away a reference to an object, you decrement a counter on the object; if that decrement yields zero, deallocate the object (and recursively handle the references contained therein, if any)
13:32:47 <tomsmeding> with RC, "GC time", and when "GC" runs, is fully deterministic if your program is deterministic
13:33:25 <[itchyjunk]> hmm
13:33:40 <tomsmeding> but some stop-the-world GC algorithms have the advantage that they only need to iterate over _live_ memory at each world pause; in contrast, RC needs to perform action on every object that becomes dead (and additionally needs to keep all those reference counters up to date)
13:33:59 <tomsmeding> so RC is not necessarily more efficient in terms of throughput than stop-the-world mark-and-sweep
13:34:03 <ksqsf> RC usually has lower latency but also has lower throughput; I always prefer traing GCs
13:34:10 <ksqsf> tracing *
13:34:11 <tomsmeding> but it may be more predictable
13:34:19 <tomsmeding> what ksqsf says
13:35:02 <[itchyjunk]> hmm why is it lower throughput?
13:35:03 <tomsmeding> ksqsf: tracing GC is what stop-the-world that traverses only live memory, right? i.e. what GHC has
13:35:13 <tomsmeding> [itchyjunk]: in the end, in total, RC needs to do more work
13:35:22 <tomsmeding> because of all the reference count updating
13:35:27 <[itchyjunk]> ah
13:35:53 <tomsmeding> and if you time a GC pause right, when the working memory is low, that GC only has to traverse the live memory (i.e. a small set if you're lucky), freeing all the dead memory in O(1)
13:36:33 <tomsmeding> so, tracing is O(live memory), while RC is O(reference mutations + dead memory), I _think_ (may be missing stuff)
13:37:30 coot joins (~coot@89-64-85-93.dynamic.chello.pl)
13:48:56 jinsun joins (~quassel@user/jinsun)
13:49:27 <int-e> tomsmeding: There's a fun tweak for RC where for every decrease of a reference count, you free a constant number of items from a to-free list (and maybe put new ones on the list), which has real-time properties if each memory item has a bounded number of pointers... essentially you free stuff lazily, smoothing what would otherwise be an amortized cost.
13:51:01 × max22- quits (~maxime@2a01cb0883359800eadee1731c9704da.ipv6.abo.wanadoo.fr) (Ping timeout: 268 seconds)
13:55:23 <tomsmeding> int-e: oh that's neat, indeed relies on objects having a bounded number of references
13:55:33 <tomsmeding> s/having/containing/, less ambiguous
13:59:24 tito joins (tito@tilde.team)
14:01:50 drewr joins (~drew@user/drewr)
14:07:58 jesser[m] joins (~jessermat@2001:470:69fc:105::d5ae)
14:10:00 × sagax quits (~sagax_nb@user/sagax) (Quit: Konversation terminated!)
14:11:43 × ksqsf quits (~user@134.209.106.31) (Remote host closed the connection)
14:12:04 ksqsf joins (~user@2001:da8:d800:611:dc11:dfaa:95da:b93d)
14:12:04 bollu joins (uid233390@id-233390.helmsley.irccloud.com)
14:12:14 sagax joins (~sagax_nb@user/sagax)
14:12:37 × Feuermagier quits (~Feuermagi@user/feuermagier) (Remote host closed the connection)
14:12:59 × xsperry quits (~xs@user/xsperry) (Remote host closed the connection)
14:17:27 × fef quits (~thedawn@user/thedawn) (Quit: Leaving)
14:17:50 × ksqsf quits (~user@2001:da8:d800:611:dc11:dfaa:95da:b93d) (Read error: Connection reset by peer)
14:18:09 ksqsf joins (~user@134.209.106.31)
14:19:48 × sleblanc quits (~sleblanc@user/sleblanc) (Quit: Leaving)
14:20:10 totte joins (~totte@h-82-196-112-155.A166.priv.bahnhof.se)
14:22:14 yauhsien joins (~yauhsien@61-231-42-148.dynamic-ip.hinet.net)
14:24:00 waleee joins (~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4)
14:25:09 × Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
14:25:17 × drewr quits (~drew@user/drewr) (Ping timeout: 240 seconds)
14:26:43 × yauhsien quits (~yauhsien@61-231-42-148.dynamic-ip.hinet.net) (Ping timeout: 250 seconds)
14:31:49 <iphy> is there a better way to write this? https://github.com/iphydf/hs-cimple/blob/fix/src/Language/Cimple/Diagnostics.hs#L43-L140
14:33:41 drewr joins (~drew@user/drewr)
14:40:39 max22- joins (~maxime@2a01cb0883359800b3fa5d9958932079.ipv6.abo.wanadoo.fr)
14:42:02 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
14:42:02 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
14:42:02 wroathe joins (~wroathe@user/wroathe)
14:43:27 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
14:44:57 × drewr quits (~drew@user/drewr) (Ping timeout: 240 seconds)
14:46:39 coot parts (~coot@89-64-85-93.dynamic.chello.pl) ()
14:47:07 × kaph quits (~kaph@net-2-38-107-19.cust.vodafonedsl.it) (Ping timeout: 268 seconds)
14:47:28 <pavonia> iphy: I used to use uniplate in such situations. Not sure if this is still a thing today
14:47:59 <iphy> Neil Mitchell 2006-2020
14:48:02 <iphy> looks like yes
14:48:18 <iphy> Uploaded by NeilMitchell at 2020-11-07T19:53:43Z
14:48:45 <pavonia> Yeah, but GHC has greater support for generics today. Maybe there's somthing better already built-in
14:49:27 coot joins (~coot@2a02:a310:e03f:8500:5cc8:47c:8ec0:b827)
14:50:15 × altern quits (~Sergii@altern.corbina.com.ua) (Ping timeout: 256 seconds)
14:50:28 Sgeo joins (~Sgeo@user/sgeo)
14:50:46 × coot quits (~coot@2a02:a310:e03f:8500:5cc8:47c:8ec0:b827) (Remote host closed the connection)
14:51:07 coot joins (~coot@2a02:a310:e03f:8500:5cc8:47c:8ec0:b827)
14:51:16 × ProfSimm quits (~ProfSimm@87.227.196.109) (Remote host closed the connection)
14:52:00 zincy joins (~zincy@2a00:23c8:970c:4801:bdb9:8c5f:3085:2807)
14:52:04 <tomsmeding> fairly sure you can do that with generics, but not sure how easy that is compared to just giving up and writing this out :p
14:55:27 shriekingnoise joins (~shrieking@186.137.144.80)
14:59:17 × DNH quits (~DNH@2a02:8108:1100:16d8:6043:aa58:f99b:e1b) (Quit: My MacBook has gone to sleep. ZZZzzz…)
15:01:17 Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
15:04:26 × coot quits (~coot@2a02:a310:e03f:8500:5cc8:47c:8ec0:b827) (Remote host closed the connection)
15:05:28 coot joins (~coot@2a02:a310:e03f:8500:5cc8:47c:8ec0:b827)
15:05:55 DNH joins (~DNH@2a02:8108:1100:16d8:6043:aa58:f99b:e1b)
15:06:15 × ksqsf quits (~user@134.209.106.31) (Ping timeout: 268 seconds)
15:07:06 Feuermagier joins (~Feuermagi@user/feuermagier)
15:12:26 × SummerSonw quits (~The_viole@203.77.49.232) (Quit: Leaving)
15:13:34 drewr joins (~drew@user/drewr)
15:14:22 <tomsmeding> pavonia: bit of a mess but it does seem to work https://paste.tomsmeding.com/bIGQNN1J
15:15:17 <tomsmeding> ah but it only works if 'lexeme' does not have [] as its outer type
15:15:22 <tomsmeding> because of the hacky overlapping instances
15:16:47 <tomsmeding> but you should be able to prevent that from going wrong by fmapping a newtype wrapper over the lexeme
15:17:39 neurocyte0132889 joins (~neurocyte@IP-092119008132.dynamic.medianet-world.de)
15:17:39 × neurocyte0132889 quits (~neurocyte@IP-092119008132.dynamic.medianet-world.de) (Changing host)
15:17:39 neurocyte0132889 joins (~neurocyte@user/neurocyte)
15:17:54 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
15:18:14 fef joins (~thedawn@user/thedawn)
15:18:17 × CiaoSen quits (~Jura@p200300c957347b002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
15:18:29 <pavonia> iphy: ^
15:18:31 <tomsmeding> oh it does work!
15:18:42 <tomsmeding> I just forgot to update the type ascription in 'main' :)
15:20:17 <tomsmeding> concats' :: NodeF a [a] -> [a] ; concats' = concats
15:20:20 <tomsmeding> easier
15:20:43 × fef quits (~thedawn@user/thedawn) (Remote host closed the connection)
15:20:47 <tomsmeding> presumably uniplate makes stuff easier, but never worked with that :P
15:21:08 fef joins (~thedawn@user/thedawn)
15:21:29 n3rdy1 joins (~n3rdy1@2601:281:c780:a510:f129:8ed3:b1ff:82ed)
15:22:59 lavaman joins (~lavaman@98.38.249.169)
15:26:17 <otherwise> ... that seems like a lot of code to print ['a'..'g']
15:26:57 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 240 seconds)
15:27:42 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 260 seconds)
15:28:57 × drewr quits (~drew@user/drewr) (Ping timeout: 240 seconds)
15:31:46 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:b417:46a:3118:ab81)
15:32:01 ksqsf joins (~user@134.209.106.31)
15:33:04 <tomsmeding> yes
15:33:20 <tomsmeding> but it works for any value of 'Char', and also if you add more constructors to the data type ;)
15:33:57 drewr joins (~drew@user/drewr)
15:35:57 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:b417:46a:3118:ab81) (Ping timeout: 240 seconds)
15:36:37 × ksqsf quits (~user@134.209.106.31) (Ping timeout: 240 seconds)
15:38:40 burnsidesLlama joins (~burnsides@dhcp168-010.wadham.ox.ac.uk)
15:39:22 × drewr quits (~drew@user/drewr) (Ping timeout: 260 seconds)
15:39:57 slowButPresent joins (~slowButPr@user/slowbutpresent)
15:40:37 MoC joins (~moc@user/moc)
15:42:57 × burnsidesLlama quits (~burnsides@dhcp168-010.wadham.ox.ac.uk) (Ping timeout: 256 seconds)
15:44:01 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
15:44:01 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
15:44:01 wroathe joins (~wroathe@user/wroathe)
15:44:26 bontaq joins (~user@static-108-32-49-96.pitbpa.fios.verizon.net)
15:44:27 <int-e> tomsmeding: Oh you went down that path too... I ended up with https://paste.tomsmeding.com/6mEKw6Ur
15:45:40 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
15:45:46 <int-e> (so ugly)
15:45:51 <tomsmeding> int-e: why INCOHERENT and not OVERLAPPING? :p
15:46:08 <int-e> because they *are* incoherent
15:46:21 <iphy> tomsmeding: nice
15:46:36 × acidjnk quits (~acidjnk@p200300d0c7271e72b97741cdfe77e27f.dip0.t-ipconnect.de) (Ping timeout: 245 seconds)
15:46:42 <iphy> lexeme is always something that's not a list
15:46:46 <int-e> if u = v, Fold2_Base u v u and Fold2_Base u v v produce different behavior
15:46:49 <iphy> (e.g. it's never String)
15:47:31 <int-e> tomsmeding: it's a side effect of dealing with two types rather than one
15:48:11 <int-e> And I don't like it. But it seems to work. Make of that what you will...
15:48:50 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 252 seconds)
15:49:11 rekahsoft joins (~rekahsoft@cpe0008a20f982f-cm64777d666260.cpe.net.cable.rogers.com)
15:49:34 <int-e> This means, btw, that manually inlining `fold2` is dangerous.
15:49:46 ksqsf joins (~user@134.209.106.31)
15:53:34 × DNH quits (~DNH@2a02:8108:1100:16d8:6043:aa58:f99b:e1b) (Quit: My MacBook has gone to sleep. ZZZzzz…)
15:53:55 <tomsmeding> int-e: interesting
15:54:57 × ksqsf quits (~user@134.209.106.31) (Ping timeout: 268 seconds)
15:55:16 <tomsmeding> oh yeah I didn't add support for Maybe
15:56:05 <tomsmeding> but that's easy, the types show the way :D
15:56:54 <int-e> tomsmeding: the [a] and (Maybe a) instances are merely OVERLAPPING though
15:57:01 <tomsmeding> yeah
15:59:52 <mjrosenb> is there a definition of what makes instances incoherent or overlapping? I've never ran into either before.
16:00:08 × ilkecan[m] quits (~ilkecanma@2001:470:69fc:105::1:79b) (Quit: You have been kicked for being idle)
16:00:43 × fef quits (~thedawn@user/thedawn) (Remote host closed the connection)
16:01:00 qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection)
16:01:01 qrpnxz joins (abc4f95c31@user/qrpnxz)
16:01:02 <tomsmeding> mjrosenb: https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/exts/instances.html#overlapping-instances
16:01:04 fef joins (~thedawn@user/thedawn)
16:01:24 <tomsmeding> if you want all the details :p
16:01:36 qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection)
16:01:36 qrpnxz joins (abc4f95c31@user/qrpnxz)
16:01:37 × xff0x quits (~xff0x@2001:1a81:53c9:5600:a4b4:57a2:f2c0:c793) (Ping timeout: 240 seconds)
16:02:35 xff0x joins (~xff0x@2001:1a81:53c9:5600:a16a:4242:194d:2615)
16:08:01 ksqsf joins (~user@134.209.106.31)
16:08:15 <iphy> tomsmeding: https://github.com/iphydf/hs-cimple/blob/fix/src/Language/Cimple/Diagnostics.hs#L44
16:08:24 <iphy> https://github.com/iphydf/hs-cimple/blob/fix/src/Language/Cimple/Flatten.hs
16:09:09 mario_ joins (~mario@31.147.205.13)
16:09:51 <tomsmeding> iphy: might not need a separate instance for Maybe [a], right?
16:10:10 <tomsmeding> the Maybe and OVERLAPPABLE [] instances should cover that
16:10:11 <tomsmeding> but nice!
16:10:27 <tomsmeding> _might_ want some comments :p
16:10:29 <iphy> https://www.irccloud.com/pastebin/rsBXUD6Q/
16:10:34 <iphy> tomsmeding: yeah, soon :)
16:10:57 <tomsmeding> oh heh
16:11:26 <tomsmeding> replace the 'instance GenConcatsFlatten (Maybe a) a' with 'instance GenConcatsFlatten b a => GenConcatsFlatten (Maybe b) a'
16:11:38 <tomsmeding> perhaps also OVERLAPPABLE
16:11:47 <tomsmeding> (in case 'a' is ever Maybe something)
16:12:30 <iphy> yeah
16:12:39 <iphy> it's never Maybe something, so this works
16:12:41 <tomsmeding> I mean, this also works
16:12:51 × ksqsf quits (~user@134.209.106.31) (Ping timeout: 245 seconds)
16:13:12 <iphy> https://github.com/iphydf/hs-cimple/blob/fix/src/Language/Cimple/Flatten.hs#L46
16:14:45 <tomsmeding> yay
16:14:56 Guest|88 joins (~Guest|88@79.171.77.255)
16:15:19 × Guest|88 quits (~Guest|88@79.171.77.255) (Client Quit)
16:17:10 × xff0x quits (~xff0x@2001:1a81:53c9:5600:a16a:4242:194d:2615) (Ping timeout: 268 seconds)
16:17:46 xff0x joins (~xff0x@2001:1a81:53c9:5600:de59:5c41:aa07:4876)
16:25:31 ksqsf joins (~user@134.209.106.31)
16:27:46 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
16:27:46 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
16:27:46 wroathe joins (~wroathe@user/wroathe)
16:27:56 <iphy> lexeme will always be either Lexeme String, Lexeme Text, or some other atomic type (never List or Maybe or another functor)
16:30:33 × zincy quits (~zincy@2a00:23c8:970c:4801:bdb9:8c5f:3085:2807) (Remote host closed the connection)
16:30:44 <geekosaur> String is a list
16:30:47 <geekosaur> not atomic
16:31:10 × ksqsf quits (~user@134.209.106.31) (Ping timeout: 260 seconds)
16:31:56 <tomsmeding> geekosaur: Lexeme String != String
16:32:36 <tomsmeding> iphy: still you can fmap a newtype wrapper over the thing to ensure that the root type is always that newtype wrapper, so that it can never go wrong even if someone does something stupid later on
16:32:56 <tomsmeding> not sure if 'fmap' is the right thing here though
16:33:02 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 260 seconds)
16:33:29 spoofer parts (~spoofer@64.185.111.205) ()
16:34:00 xsperry joins (~xs@user/xsperry)
16:34:53 gioyik joins (~gioyik@gateway/tor-sasl/gioyik)
16:43:20 ksqsf joins (~user@134.209.106.31)
16:43:40 burnsidesLlama joins (~burnsides@dhcp168-010.wadham.ox.ac.uk)
16:44:34 zmt00 joins (~zmt00@user/zmt00)
16:46:42 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
16:47:06 mc47 joins (~mc47@xmonad/TheMC47)
16:47:57 × ksqsf quits (~user@134.209.106.31) (Ping timeout: 240 seconds)
16:49:28 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
16:49:28 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
16:49:28 wroathe joins (~wroathe@user/wroathe)
16:49:43 × MoC quits (~moc@user/moc) (Quit: Konversation terminated!)
16:50:09 Bartol_ joins (~Bartol@user/Bartol)
16:51:19 zincy joins (~zincy@host86-151-99-97.range86-151.btcentralplus.com)
16:51:27 × waleee quits (~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4) (Ping timeout: 250 seconds)
16:51:41 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
16:52:53 justsomeguy joins (~justsomeg@user/justsomeguy)
16:53:37 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 240 seconds)
16:53:50 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
16:55:20 <mjrosenb> should emacs with hls be able to compile things without invoking haskell-compile?
16:59:53 × nattiestnate quits (~nate@114.122.105.227) (Read error: Connection reset by peer)
17:01:32 xb0o2 joins (~xb0o2@user/xb0o2)
17:03:43 haask joins (~askham@92.234.0.237)
17:04:16 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
17:07:20 × zincy quits (~zincy@host86-151-99-97.range86-151.btcentralplus.com) (Remote host closed the connection)
17:07:25 <haask> In this year of 2021, is it possible to take an existing Stack project (say, a REPL for some language) and compile it to run clientside in a browser? I understand the options to be GHCJS (no Stack support), Haste (no TemplateHaskell support), Reflex - any other option I'm overlooking before I go down the rewrite-for-GHCJS rabbithole?
17:07:33 zincy joins (~zincy@2a00:23c8:970c:4801:bdb9:8c5f:3085:2807)
17:07:54 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
17:08:58 nattiestnate joins (~nate@114.122.105.227)
17:09:02 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
17:09:47 × ubert quits (~Thunderbi@p548c8cd6.dip0.t-ipconnect.de) (Remote host closed the connection)
17:10:22 mario_ is now known as spaceseller
17:11:38 × mbuf quits (~Shakthi@122.178.203.86) (Quit: Leaving)
17:13:02 <iphy> tomsmeding: this is good enough now :) Flatten is used internally only
17:13:19 <iphy> thanks btw
17:13:40 <tomsmeding> iphy: <3
17:16:37 × alfonsox quits (~quassel@103.92.42.104) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
17:17:34 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Excess Flood)
17:18:28 Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915)
17:24:28 × zincy quits (~zincy@2a00:23c8:970c:4801:bdb9:8c5f:3085:2807) (Remote host closed the connection)
17:25:08 DNH joins (~DNH@2a02:8108:1100:16d8:6043:aa58:f99b:e1b)
17:28:53 zincy joins (~zincy@2a00:23c8:970c:4801:bdb9:8c5f:3085:2807)
17:31:24 shapr joins (~user@pool-100-36-247-68.washdc.fios.verizon.net)
17:32:17 × coot quits (~coot@2a02:a310:e03f:8500:5cc8:47c:8ec0:b827) (Quit: coot)
17:32:59 coot joins (~coot@89-64-85-93.dynamic.chello.pl)
17:33:34 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:b417:46a:3118:ab81)
17:34:50 × zincy quits (~zincy@2a00:23c8:970c:4801:bdb9:8c5f:3085:2807) (Remote host closed the connection)
17:35:33 × mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection)
17:35:56 zincy joins (~zincy@2a00:23c8:970c:4801:bdb9:8c5f:3085:2807)
17:37:32 ksqsf joins (~user@134.209.106.31)
17:38:17 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:b417:46a:3118:ab81) (Ping timeout: 252 seconds)
17:40:24 × turlando quits (~turlando@user/turlando) (Ping timeout: 268 seconds)
17:40:36 turlando joins (~turlando@93-42-250-112.ip89.fastwebnet.it)
17:40:36 × turlando quits (~turlando@93-42-250-112.ip89.fastwebnet.it) (Changing host)
17:40:36 turlando joins (~turlando@user/turlando)
17:41:24 Sgeo joins (~Sgeo@user/sgeo)
17:42:08 × ksqsf quits (~user@134.209.106.31) (Ping timeout: 252 seconds)
17:46:55 × justsomeguy quits (~justsomeg@user/justsomeguy) (Quit: WeeChat 3.3)
17:52:05 × xb0o2 quits (~xb0o2@user/xb0o2) (Quit: Client closed)
17:53:41 × bontaq quits (~user@static-108-32-49-96.pitbpa.fios.verizon.net) (Ping timeout: 252 seconds)
17:53:41 waleee joins (~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4)
17:54:51 × albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
17:56:07 tzh joins (~tzh@c-24-21-73-154.hsd1.or.comcast.net)
17:56:14 <lyxia> Can I use cabal to compile a single file that depends on packages? `cabal exec ghc` complains that I don't have a cabal.project...
18:00:58 albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8)
18:01:42 <EvanR> it's possible to use ghc with the flags for those packages
18:01:59 <EvanR> but would be nice if cabal did that
18:08:15 nicbk joins (~nicbk@user/nicbk)
18:08:16 CiaoSen joins (~Jura@p200300c957347b002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
18:12:00 × kupi quits (uid212005@id-212005.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
18:13:22 Erutuon joins (~Erutuon@user/erutuon)
18:14:00 <sm> I think stack scripts can compile themselves (to an executable you can reuse) but cabal scripts can't
18:15:52 lavaman joins (~lavaman@98.38.249.169)
18:17:58 × nattiestnate quits (~nate@114.122.105.227) (Quit: WeeChat 3.4)
18:18:17 nattiestnate joins (~nate@114.122.106.227)
18:18:52 × albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
18:19:01 × xff0x quits (~xff0x@2001:1a81:53c9:5600:de59:5c41:aa07:4876) (Ping timeout: 240 seconds)
18:21:56 econo joins (uid147250@user/econo)
18:24:37 ksqsf joins (~user@134.209.106.31)
18:24:58 albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8)
18:25:31 × DNH quits (~DNH@2a02:8108:1100:16d8:6043:aa58:f99b:e1b) (Quit: My MacBook has gone to sleep. ZZZzzz…)
18:26:05 Sgeo_ joins (~Sgeo@user/sgeo)
18:28:59 × Sgeo quits (~Sgeo@user/sgeo) (Ping timeout: 256 seconds)
18:29:31 × ksqsf quits (~user@134.209.106.31) (Ping timeout: 245 seconds)
18:31:37 DNH joins (~DNH@2a02:8108:1100:16d8:6043:aa58:f99b:e1b)
18:34:38 <iphy> I've refactored my pretty printer to use foldFix. I needed to communicate information from a deeper layer upwards, so I made it part of the accumulator. is that the right way to do this? https://github.com/iphydf/hs-cimple/blob/fix/src/Language/Cimple/Pretty.hs#L28
18:34:42 × gioyik quits (~gioyik@gateway/tor-sasl/gioyik) (Ping timeout: 276 seconds)
18:41:16 × spaceseller quits (~mario@31.147.205.13) (Quit: Leaving)
18:41:17 xff0x joins (~xff0x@2001:1a81:53c9:5600:de59:5c41:aa07:4876)
18:42:05 <EvanR> oh man you can go nuts with pretty printing by mapping each item to nested boxes, each of which carries format info and color!
18:42:32 <EvanR> to be interpreted by yet another layer of (over)engineering
18:42:33 Everything joins (~Everythin@37.115.210.35)
18:42:37 gioyik joins (~gioyik@gateway/tor-sasl/gioyik)
18:43:25 ksqsf joins (~user@134.209.106.31)
18:43:53 × pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.4)
18:44:03 <EvanR> at least it would be monomorphic
18:44:45 <monochrom> In general, rendering engines are like that. Pretty printing is just a special case.
18:45:31 <monochrom> You can regain polymorphism by unifying pretty printing, polygon rendering, ray tracing, and path tracing. >:)
18:47:26 <EvanR> in before someone claims that it's very important to distinguish different kinds of syntax by their material properties, mirror, plastic, rubblepile
18:48:04 <monochrom> Syntax texturing \∩/
18:48:10 <EvanR> (the docs for google filament are pretty cool)
18:48:22 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
18:48:51 × ksqsf quits (~user@134.209.106.31) (Ping timeout: 268 seconds)
18:49:39 × gioyik quits (~gioyik@gateway/tor-sasl/gioyik) (Ping timeout: 276 seconds)
18:50:17 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
18:50:27 <zincy> How does parametric polymorphism fall short of dependent functions. Take cons :: a -> [a] -> [a]
18:50:42 yauhsien joins (~yauhsien@61-231-42-148.dynamic-ip.hinet.net)
18:51:01 <zincy> Is it because you cant cons a Int onto a [Bool] ?
18:51:43 <monochrom> I don't understand the question.
18:51:44 <zincy> By dependent function I mean something like this in Lean
18:51:46 <zincy> constant cons : Π α : Type u, α → list α → list α
18:52:04 <EvanR> you can't cons an Int onto a [Bool] with dependent functions either
18:52:13 <EvanR> type error
18:52:20 <geekosaur> you can't write a function which can do a differrent thing depending on what a is
18:52:31 <geekosaur> dependent functions can
18:52:39 <zincy> Is that not what a dependent function allows you to do?
18:52:49 <EvanR> not exactly like that
18:52:56 <geekosaur> Haskell's cons is polymorphic but has to do the same thing regardless of a
18:53:07 <monochrom> cons is a confusing example because it will turn out to be parametric even in a non-parametric language.
18:53:22 <monochrom> Please choose a truly non-parametric example.
18:53:55 <EvanR> that cons in lean example isn't really dependent
18:54:07 altern joins (~Sergii@altern.corbina.com.ua)
18:54:32 <zincy> ugh I am asking confused questions
18:54:42 <zincy> I should probably just read a book on type theory
18:54:43 × nattiestnate quits (~nate@114.122.106.227) (Read error: Connection reset by peer)
18:55:21 gioyik joins (~gioyik@gateway/tor-sasl/gioyik)
18:55:40 <EvanR> the overused example is a list whose type contains its length... vect
18:55:59 <EvanR> then cons updates that length
18:56:27 <zincy> Which makes cons in that case a dependent function right
18:57:23 <monochrom> Not convinced it gets closer. "a -> V n a -> V (n+1) a" is still parametric in both a and n.
18:58:10 <zincy> Whats the link between being parametric and dependent?
18:58:22 <EvanR> yeah it's still polymorphic
18:58:33 × yauhsien quits (~yauhsien@61-231-42-148.dynamic-ip.hinet.net) (Remote host closed the connection)
18:58:35 × max22- quits (~maxime@2a01cb0883359800b3fa5d9958932079.ipv6.abo.wanadoo.fr) (Remote host closed the connection)
18:58:48 max22- joins (~maxime@2a01cb0883359800c465105b4f1dcedd.ipv6.abo.wanadoo.fr)
18:59:06 <monochrom> I don't know of a link. But I know parametricity.
18:59:34 <monochrom> I don't expect a link either. Links are overrated.
19:00:35 <EvanR> you can't get a proper dependent type without using the name of one of the parameters later in the type after its introduced
19:00:42 × gioyik quits (~gioyik@gateway/tor-sasl/gioyik) (Ping timeout: 276 seconds)
19:00:56 ksqsf joins (~user@134.209.106.31)
19:00:57 <EvanR> which pi and sigma let you do
19:02:12 fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
19:02:21 <zincy> Yeah was just reading about pi and sigma
19:02:33 × EvanR quits (~EvanR@user/evanr) (Remote host closed the connection)
19:02:53 EvanR joins (~EvanR@user/evanr)
19:03:05 <EvanR> Pi (n : Int) -> (if even n then Bool else Char)
19:03:25 × max22- quits (~maxime@2a01cb0883359800c465105b4f1dcedd.ipv6.abo.wanadoo.fr) (Ping timeout: 240 seconds)
19:03:52 <EvanR> silly example but you can do actual cool things with it
19:04:43 × bollu quits (uid233390@id-233390.helmsley.irccloud.com) (Quit: Connection closed for inactivity)
19:05:35 × ksqsf quits (~user@134.209.106.31) (Ping timeout: 250 seconds)
19:06:21 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
19:06:26 xb0o2 joins (~xb0o2@user/xb0o2)
19:06:39 × fizbin quits (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Ping timeout: 250 seconds)
19:06:42 <zincy> So can I do Pi (n : int) -> (if even n then A else B)
19:08:04 <EvanR> more likely Pi (n : Int) -> f n where f : Int -> Type and could do that
19:09:05 <EvanR> jargon for f could be "an indexed family of types"
19:09:32 yauhsien joins (~yauhsien@61-231-42-148.dynamic-ip.hinet.net)
19:09:58 <zincy> Is Type just like a type parameter?
19:10:04 <EvanR> no
19:10:15 <EvanR> Type is the type of types
19:10:23 <EvanR> like Int : Type
19:10:55 <zincy> So is this because there is no instantiation to do?
19:11:14 <zincy> f 1 and f 2 can return different types
19:11:22 <zincy> or have I mean
19:11:23 <EvanR> if you had a parameter of type Type, passing in a type is like instanciation in haskell
19:12:00 <EvanR> yes
19:12:52 <EvanR> in this case f always returns a Type though
19:13:05 <zincy> So is it a bit like existential types in haskell but on the value level
19:14:15 × yauhsien quits (~yauhsien@61-231-42-148.dynamic-ip.hinet.net) (Ping timeout: 250 seconds)
19:14:19 <zincy> returning Type from a function means the consumer of the function picks a different type for every value applied to f
19:14:30 <zincy> Sort of existentially maybe
19:14:42 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
19:14:44 <EvanR> Sigma is how you express existential types with dependent types
19:14:53 <EvanR> which also involves this Type family thing
19:15:42 <zincy> So with sigma values don't determine the result type
19:16:03 <EvanR> they do
19:16:26 gioyik joins (~gioyik@gateway/tor-sasl/gioyik)
19:16:36 <EvanR> Sigma (n : Int, if even n then Char else Bool)
19:16:50 <iphy> EvanR: yes, you can go nuts, but I also want it to be readable code
19:16:56 <EvanR> the type of the snd component depends on the value of n
19:17:43 × deadmarshal quits (~deadmarsh@95.38.116.71) (Ping timeout: 256 seconds)
19:19:06 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 245 seconds)
19:20:31 <zincy> Ok so each value is mapped to a choice of multiple types
19:22:10 <EvanR> so (0,'a') (1,False) (2,'z') (3,True) are values of that sigma type
19:22:54 <EvanR> when the second component is not a boring value but evidence of some property, it gets more interesting
19:23:28 <EvanR> Sigma (n : Int, Even n)
19:23:58 <EvanR> has values (0,<proof term>) (2,<other proof term>) ..., but not (1, <impossible>)
19:24:41 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
19:25:23 <EvanR> Even n are all different Types so you need dependent types for this
19:26:11 × zincy quits (~zincy@2a00:23c8:970c:4801:bdb9:8c5f:3085:2807) (Remote host closed the connection)
19:28:31 × fef quits (~thedawn@user/thedawn) (Quit: Leaving)
19:30:05 zincy joins (~zincy@host86-151-99-97.range86-151.btcentralplus.com)
19:32:03 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:b417:46a:3118:ab81)
19:32:30 × zincy quits (~zincy@host86-151-99-97.range86-151.btcentralplus.com) (Remote host closed the connection)
19:35:41 zincy joins (~zincy@2a00:23c8:970c:4801:bdb9:8c5f:3085:2807)
19:37:51 snake joins (~snake@user/snake)
19:39:23 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 250 seconds)
19:40:29 <zincy> Oh nice
19:40:41 <zincy> EvanR: What is Even n ?
19:43:10 <EvanR> a type
19:43:31 <EvanR> carefully designed to represent the fact that n is even
19:43:48 <EvanR> (if and only if it is)
19:45:18 <EvanR> types are propositions, values are the proofs
19:45:25 <EvanR> if any
19:46:04 max22- joins (~maxime@2a01cb0883359800f5f346d928347cfb.ipv6.abo.wanadoo.fr)
19:46:12 × gioyik quits (~gioyik@gateway/tor-sasl/gioyik) (Ping timeout: 276 seconds)
19:46:55 ksqsf joins (~user@134.209.106.31)
19:49:12 <zincy> ok thanks
19:49:36 <zincy> I am guessing that I wont pick this up by reading and will have to actually play around with a dependently typed language
19:49:43 <EvanR> yeah
19:49:59 <zincy> Then I will be able to ask well formed questions
19:51:56 × ksqsf quits (~user@134.209.106.31) (Ping timeout: 252 seconds)
19:53:44 gioyik joins (~gioyik@gateway/tor-sasl/gioyik)
20:05:19 × juhp quits (~juhp@128.106.188.82) (Ping timeout: 268 seconds)
20:06:03 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
20:08:29 juhp joins (~juhp@128.106.188.82)
20:09:47 aner joins (~aner@static.219.128.itcsa.net)
20:09:54 × aner quits (~aner@static.219.128.itcsa.net) (Client Quit)
20:10:22 argento joins (~argento@static.219.128.itcsa.net)
20:12:07 × Flow quits (~none@gentoo/developer/flow) (Ping timeout: 268 seconds)
20:15:28 Flow joins (~none@gentoo/developer/flow)
20:17:47 × YoungFrog quits (~youngfrog@39.129-180-91.adsl-dyn.isp.belgacom.be) (Ping timeout: 256 seconds)
20:18:57 × dcoutts_ quits (~duncan@71.78.6.51.dyn.plus.net) (Ping timeout: 240 seconds)
20:18:58 × haask quits (~askham@92.234.0.237) (Remote host closed the connection)
20:19:47 haask joins (~harry@143.47.228.49)
20:24:41 × haask quits (~harry@143.47.228.49) (Changing host)
20:24:41 haask joins (~harry@user/haask)
20:30:20 qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection)
20:30:41 qrpnxz joins (abc4f95c31@user/qrpnxz)
20:32:59 coot_ joins (~coot@2a02:a310:e03f:8500:5cc8:47c:8ec0:b827)
20:33:38 snake parts (~snake@user/snake) (Leaving)
20:35:17 × neurocyte0132889 quits (~neurocyte@user/neurocyte) (Ping timeout: 240 seconds)
20:35:21 × argento quits (~argento@static.219.128.itcsa.net) (Quit: leaving)
20:35:29 argento joins (~argento@static.204.189.itcsa.net)
20:36:09 × coot quits (~coot@89-64-85-93.dynamic.chello.pl) (Ping timeout: 268 seconds)
20:38:32 pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
20:41:06 ksqsf joins (~user@134.209.106.31)
20:45:10 justsomeguy joins (~justsomeg@user/justsomeguy)
20:46:07 × ksqsf quits (~user@134.209.106.31) (Ping timeout: 256 seconds)
20:48:30 pavonia joins (~user@user/siracusa)
20:54:15 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
20:54:30 hololeap joins (~hololeap@user/hololeap)
20:54:42 yauhsien joins (~yauhsien@61-231-42-148.dynamic-ip.hinet.net)
20:56:46 oldsk00l joins (~znc@ec2-52-57-80-8.eu-central-1.compute.amazonaws.com)
21:02:44 × otherwise quits (~otherwise@2601:602:880:90f0:7490:2afa:37a4:523b) (Remote host closed the connection)
21:02:58 jackson99 joins (~bc8147f2@cerf.good1.com)
21:03:35 × argento quits (~argento@static.204.189.itcsa.net) (Remote host closed the connection)
21:04:04 × yauhsien quits (~yauhsien@61-231-42-148.dynamic-ip.hinet.net) (Remote host closed the connection)
21:04:49 yauhsien joins (~yauhsien@61-231-42-148.dynamic-ip.hinet.net)
21:07:28 <[itchyjunk]> Non haskell question, i was made aware of a "omega combinator" which is (\x.xx) (\x.xx). But googling "omega combinator" mostly gives me things about JS. does it have alternative name?
21:08:49 <geekosaur> doubled y combinator. which adds little over a single y combinator
21:08:59 <geekosaur> (y combinator applied to another y combinator)
21:09:12 <[itchyjunk]> hmmm
21:09:17 × yauhsien quits (~yauhsien@61-231-42-148.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
21:10:17 <[itchyjunk]> Argh, googling anything with ycombinator seems to result the incubator website and not the ycombinator i want :D
21:10:21 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
21:11:31 <hpc> try "fixed point combinator"
21:11:55 <hpc> or adding "lambda calculus" to the search
21:12:01 geekosaur joins (~geekosaur@xmonad/geekosaur)
21:12:11 <[itchyjunk]> ahh ty
21:12:27 <[itchyjunk]> i had seed fixed point combinator wiki page actually, didn't realize that was what i wanted
21:12:36 <[exa]> [itchyjunk]: I never saw anyone to refer it in a different way than just Ω = ωω; sometimes it is very informally called "infinite loop"
21:12:44 × rito_ quits (~rito_gh@45.112.243.219) (Quit: Leaving)
21:13:09 × shriekingnoise quits (~shrieking@186.137.144.80) (Ping timeout: 268 seconds)
21:13:19 <[exa]> fixpoint combinators (Y) are a tiny bit more complex because they have the `f` there. In fact Ω = YI
21:14:47 × zer0bitz quits (~zer0bitz@185.112.82.230) (Read error: Connection reset by peer)
21:14:57 <[exa]> geekosaur: btw you meant YY ? (/me tries that kind of recursion in head)
21:15:00 <[itchyjunk]> Right. I was watching a "computerphile" video on it and he gives an exercise for fixed point combinator but he covers the (\x.xx) (\x.xx) thing on it's own
21:15:02 <[exa]> (head explodes)
21:16:08 <[exa]> anyway it's likely the smallest λ-term with no normal form (ie "fully reduced")
21:16:33 × hololeap quits (~hololeap@user/hololeap) (Ping timeout: 276 seconds)
21:23:28 <EvanR> the heck is omega combinator is js
21:23:33 <EvanR> in js
21:25:21 <iphy> never heard of it in js, and my google search yields nothing
21:26:00 <[exa]> const Ω = () => {while(true){}};
21:26:18 <[exa]> seems like I'll need to restart the browser now.
21:27:18 qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection)
21:27:26 qrpnxz joins (abc4f95c31@user/qrpnxz)
21:27:42 <hpc> using while seems like cheating...
21:27:58 <[exa]> nah I properly inlined that!
21:28:20 qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: closed)
21:28:32 qrpnxz joins (abc4f95c31@user/qrpnxz)
21:28:43 <EvanR> i know how to do lambda calculus in js, was wondering if it was some terribly named unrelated library xD
21:29:16 × hueso quits (~root@user/hueso) (Quit: hueso)
21:31:17 × xff0x quits (~xff0x@2001:1a81:53c9:5600:de59:5c41:aa07:4876) (Ping timeout: 240 seconds)
21:32:29 xff0x joins (~xff0x@2001:1a81:53c9:5600:4d50:2309:32ab:9f17)
21:32:36 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
21:32:50 <[exa]> hpc: never underestimate properly applied optimizations https://godbolt.org/z/3skK9j
21:33:07 steven1 joins (~steven@74.215.200.15)
21:33:40 <EvanR> what
21:33:47 × altern quits (~Sergii@altern.corbina.com.ua) (Quit: Leaving)
21:34:33 hueso joins (~root@user/hueso)
21:34:34 <steven1> hello, is `data Void -- empty` considered isomorphic to forall a. a ? I initially thought yes, but it seems I can go Void -> a with `absurd v = case v of { }`, but I can't go a -> Void since I obviously can't construct a value of type Void
21:34:46 <steven1> I can use undefined of course, but not sure if that's allowed when I'm trying to find an isomorphism
21:35:07 <EvanR> they both have no real values, and they both have undefined
21:35:17 ksqsf joins (~user@134.209.106.31)
21:35:34 <EvanR> so either way they are in correspondence
21:35:43 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
21:36:27 <lyxia> steven1: a -> Void is different from (forall a. a) -> Void.
21:36:37 <steven1> ah that is true
21:36:58 <steven1> then again I can still write the same absurd definition for that type too I think
21:37:00 drewr joins (~drew@user/drewr)
21:37:16 <steven1> oh wait that's the other way
21:37:25 <lyxia> you can also just do \x -> x
21:37:37 <steven1> ah that's right
21:39:57 × ksqsf quits (~user@134.209.106.31) (Ping timeout: 240 seconds)
21:41:57 <steven1> I was trying to derive the representation of existential types by hand. e.g. (forall r. r -> a) -> a is the same as exists r. r What I found is that exists r. r is isomorphic to (forall r. r -> Void) -> Void but this definition doesn't seem to work
21:42:12 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
21:42:27 <steven1> intuitively it seems like (forall r. r -> Void) -> Void is also isomorphic to forall a. (forall r. r -> a) -> a but I can't prove it
21:43:00 <steven1> and if I try to use the void version in haskell the same way it doesn't seem to work. Obviously it only returns Void so I can't possibly get any information out of it
21:44:08 <EvanR> well you just picked a = Void
21:44:15 <EvanR> not a problem
21:44:31 <steven1> yeah but I can't seem to go the other way
21:45:06 <EvanR> hmm?
21:45:13 <steven1> e.g. I can see that exists r. r == (forall r. r -> Void) -> Void . But I don't see how to get from this to the forall a version
21:45:14 × _ht quits (~quassel@82-169-194-8.biz.kpn.net) (Remote host closed the connection)
21:45:47 <steven1> once I know that forall a . (forall r. r -> a) -> a is the answer, I know how to go backward, but I don't see how I could have gotten there from what I have
21:45:52 <EvanR> one's a justified specialization of the other
21:46:03 <EvanR> not sure how you'd undo that
21:46:47 <EvanR> it's like saying, if I know reverse :: [Char] -> [Char], how do I prove that reverse can work for any type of list
21:46:58 <EvanR> (without looking at the code)
21:47:06 acidjnk joins (~acidjnk@pd9e0bdc0.dip0.t-ipconnect.de)
21:47:44 <steven1> yeah, I thought the isomorphism from Void to forall a. a might help, but it's not clear to me. Let me run through the steps a bit and see if I get somewhere
21:49:14 <EvanR> the specialized fact you saw reflects that anything "false" about the hidden value... is false
21:49:44 <steven1> ah that's intereseting intuition
21:49:57 × drewr quits (~drew@user/drewr) (Ping timeout: 240 seconds)
21:49:58 <steven1> then maybe my derivation is strictly less powerful than the other version
21:53:55 <steven1> let me post my steps in a minute and maybe someone can find an error in what I've done
21:56:59 <steven1> https://gist.github.com/stevenfontanella/c26bfbf79f615ae0145ae4704df8b47f here's what I did
21:57:24 <steven1> I am kind of mixing predicate logic with 'type' logic which might be wrong
21:58:03 <steven1> one thing I'm not sure of is line 2 actually, since tecnically it should be an exclusive disjunction I guess (one value can't have multiple types)
21:58:07 <EvanR> a proof of not a = a -> Void seems funny
21:58:27 <steven1> yeah not too sure of that either
21:58:41 <steven1> it should be true in predicate logic but not sure if it carries over to this
21:59:11 <EvanR> that's just the definition of not
21:59:20 × DNH quits (~DNH@2a02:8108:1100:16d8:6043:aa58:f99b:e1b) (Quit: My MacBook has gone to sleep. ZZZzzz…)
22:00:06 <monochrom> What is "\/ a" doing on its own line? Syntax error?
22:00:20 <steven1> it's like a disjunction over a set
22:00:43 <EvanR> the lines seem a bit incomplete, like they're not saying anything
22:01:05 drewr joins (~drew@user/drewr)
22:01:18 × zincy quits (~zincy@2a00:23c8:970c:4801:bdb9:8c5f:3085:2807) (Remote host closed the connection)
22:01:19 <EvanR> exists a . a doesn't seem equal to \/ a or anything
22:01:31 <steven1> by \/ a I mean we're doing a disjunction over all types e.g. t1 \/ t2 \/ t3 \/ t4 and so on
22:01:38 <EvanR> lol what
22:01:39 alekhine_ joins (~alekhine@c-73-38-152-33.hsd1.ma.comcast.net)
22:02:05 <steven1> I was thinking exists a. a means a is either t1, or t2, etc. so I represent it as a logical disjunction
22:02:49 <monochrom> You don't need to "translate" exists a. a to \/a just to use de Morgan. not (forall a. not a) is just fine.
22:02:54 <EvanR> it means there exists a type
22:03:16 <monochrom> Hell, you don't need to "translate", period.
22:03:23 <alekhine_> Hello. I'm trying to get a handle on this language, but i'm having trouble finding resources beyond the wiki and the purple book. I've written a couple very basic things but that's it. I have experience in imperative languages. If anybody could recommend some stuff for a beginner, that would be great. I appreciate any help
22:03:57 <steven1> monochrom: hmm ok, my motivation was to derive the representation of existential types (forall r. r -> a) -> a from scratch
22:04:05 <EvanR> if someone tells you there exists a type a, well there you have it. That is what type there is
22:05:06 <EvanR> doing a set complement on the whole universe types sounds interesting and outside the usual realm of possibility xD
22:05:12 <steven1> alekhine_: what's the purple book? I liked learn you a haskell when I started
22:05:36 × drewr quits (~drew@user/drewr) (Client Quit)
22:05:58 <steven1> EvanR: yeah, could be. My derivation is close so I'm thinking there could be some connection here
22:06:03 × oldsk00l quits (~znc@ec2-52-57-80-8.eu-central-1.compute.amazonaws.com) (Remote host closed the connection)
22:06:05 <monochrom> alekhine_: I don't know what's the purpose book. My http://www.vex.net/~trebla/haskell/learn-sources.html comments on some books and works I know. Maybe you find something suitable to you or not.
22:06:08 <alekhine_> steven1: I was referring to Haskell Programming from First Principles, by Chris Allen and Julie Moronuki
22:06:33 <alekhine_> Thanks monochrom
22:06:37 × alx741 quits (~alx741@157.100.93.160) (Read error: Connection reset by peer)
22:08:00 <dsal> alekhine_: That book is pretty great, but if you're not understanding something, it'd be easier to offer guidance if you said what you didn't understand and gave some context as to why you didn't understand it.
22:08:34 <dsal> e.g., "experience in imperative languages" hints at some handicaps that will make a few things harder to understand.
22:08:37 <geekosaur> @where paste
22:08:37 <lambdabot> Help us help you: please paste full code, input and/or output at e.g. https://paste.tomsmeding.com
22:09:22 <monochrom> Yeah, there is diminishing return in more reading.
22:09:57 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 250 seconds)
22:10:41 <monochrom> And the 1000-page tome is already a lot of reading.
22:11:01 <iphy> which combinator can I use to implement this function? https://github.com/iphydf/hs-cimple/blob/fix/test/Language/Cimple/ASTSpec.hs#L25
22:11:38 <EvanR> steven1, so you proved (exists a . a) -> (forall r . r -> b) -> b. With \e f -> f e. And you want to prove ((forall r . r -> Void) -> Void) -> (exists a . a) ?
22:12:00 <alekhine_> Fair enough dsal. I guess I'm trying to just learn everything I can do? I think I want a list of topics or features I need to know about so I can write useful programs, then move on to more advanced things later
22:12:01 <EvanR> or
22:12:53 <monochrom> That direction is probably unprovable in constructive logics.
22:13:08 <alekhine_> And yes, my ingrained imperative experience has actually hindered my learning.
22:13:17 <steven1> EvanR: I guess I proved (exists a. a) -> (forall r. r -> Void) -> Void
22:13:23 × machinedgod quits (~machinedg@24.105.81.50) (Ping timeout: 256 seconds)
22:13:25 Henson joins (~kvirc@107-179-133-201.cpe.teksavvy.com)
22:13:29 <dsal> alekhine_: I found the book pretty good for that. It's hard to know what's holding you up, though.
22:13:32 <EvanR> turns out using some basic assumptions you can translate any imperative program into a functional program xD
22:13:41 <EvanR> for what it's worth
22:13:42 <dsal> I had a few programs I'd written in Haskell that I'd been using while going through that book.
22:13:50 <monochrom> Indeed Kant complained about Hilbert's PhD thesis precisely because Hilbert was pulling that off.
22:13:54 <steven1> and I want to go to ((forall r. r -> Void) -> Void) -> (forall a. (forall r. r -> a) -> a)
22:14:11 <EvanR> yeah, doesn't seem plausible to do that
22:15:08 <alekhine_> dsal: fair enough, i'll go find some problem to bash my head against then come back with a more specific question
22:15:15 <monochrom> The statement to be proved was "there exists blah blah", Hilbert did "if blah blah didn't exist, something would go wrong". Kant was like "that's not math, that's theology".
22:15:25 <EvanR> haha
22:15:37 <steven1> yeah, that's too bad. I tried subbing Void = forall a. a but it doesn't seem to help. There's no way to require that both Voids are the same a. At least, I'm not sure whether I'm allowed to 'pull out' the forall
22:15:45 solidfox joins (~snake@user/snake)
22:16:07 <EvanR> sure
22:16:14 <EvanR> the forall a
22:16:19 <EvanR> doesn't changing anything
22:16:35 <EvanR> might make it even more clear what's going on
22:17:09 <steven1> yeah, basically I can make it into (forall r. r -> (forall a. a)) -> (forall a. a) but seems like I'm stuck from here
22:17:51 <EvanR> once multiple different a appear I go for a third letter
22:17:56 <EvanR> just to avoid confusion
22:18:10 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
22:18:54 <Henson> Hi everyone, I'm trying to build a project in which a Haskell function is exported to C via the FFI, but I'm getting an "undefined reference" to the exported function at link time. What can I put in the cabal file to make C find this Haskell function? Finding the C function in Haskell works just fine.
22:23:15 solidfox is now known as snake
22:23:19 <Henson> hmm, it seems if I move the library in question from "exposed-modules" to "other-modules" it compiles and gets rid of the error.
22:24:46 <EvanR> steven1, or... the task of proving that A implies B when A and B can be proven independently is possible but pointless
22:25:08 deadmarshal joins (~deadmarsh@95.38.112.219)
22:25:18 <EvanR> i.e. f :: Int -> Char, f _ = 'c'
22:25:21 <EvanR> Int implies Char
22:25:36 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
22:25:45 <steven1> Void can't be proven though
22:25:55 <EvanR> no Void is happening in your theorem
22:25:56 snake parts (~snake@user/snake) (Leaving)
22:26:12 alx741 joins (~alx741@157.100.93.160)
22:26:35 <EvanR> unless i copy pasted wrong
22:26:50 <EvanR> ((forall r. r -> Void) -> Void) -> (forall a. (forall r. r -> a) -> a)
22:27:42 <steven1> yeah that's what I want
22:28:02 <EvanR> \_ f = f id
22:28:07 <dsal> alekhine_: Yeah, for me, having a thing I want to work on makes learning *way* easier.
22:28:23 <steven1> you're saying that has that type?
22:28:33 <EvanR> yeah, a = Void -> Void xD
22:28:38 <EvanR> er
22:28:44 <EvanR> the second r = Void -> Void
22:29:21 <EvanR> they are just independent
22:29:22 ksqsf joins (~user@134.209.106.31)
22:29:34 × deadmarshal quits (~deadmarsh@95.38.112.219) (Ping timeout: 260 seconds)
22:29:47 <EvanR> all this leads back to the premise "someone tells you there exists a type, now what"
22:29:55 <steven1> hmm let me think about your definition
22:29:57 × dan-so quits (~danso@2001:1970:52e7:d000:96b8:6dff:feb3:c009) (Ping timeout: 240 seconds)
22:29:59 <EvanR> rather, there is a type and it's inhabited
22:33:00 × coot_ quits (~coot@2a02:a310:e03f:8500:5cc8:47c:8ec0:b827) (Quit: coot_)
22:33:44 <steven1> yes, I see your point, we basically ignored the first argument and then proved this: theorem :: (forall a. (forall r. r -> a) -> a)
22:33:50 <steven1> theorem f = f id
22:33:57 <steven1> which is like saying exists r. r
22:34:02 <steven1> 'there exists a type'
22:34:09 <EvanR> that is inhabited
22:34:14 × ksqsf quits (~user@134.209.106.31) (Ping timeout: 260 seconds)
22:34:18 <EvanR> for example, Void -> Void xD
22:35:30 <EvanR> alternatively show that some type is inhabited
22:35:32 <steven1> I think our formulation was wrong: theorem :: ((forall r. r -> Void) -> Void) -> (forall a. (forall r. r -> a) -> a). The r on the right is different from the r on the left
22:35:45 <steven1> the left should imply that that r exists, not some other r
22:36:22 <EvanR> it's "implied" by being unrelated and also "true"
22:36:31 <steven1> yeah
22:36:40 <steven1> that's why I'm thinking we proved the wrong thing
22:37:11 × cosimone quits (~user@93-47-231-248.ip115.fastwebnet.it) (Ping timeout: 256 seconds)
22:37:17 <steven1> ah, this is tough
22:37:25 <EvanR> the informal thing you were saying made no real sense, so I take a win if I can get it xD
22:38:17 <steven1> I can believe that, not sure where I went wrong though
22:38:25 <EvanR> the Void version of church encoded(?) existential is a possibility but doesn't really have any bearing on the general version or help
22:38:49 <steven1> yeah
22:40:13 shriekingnoise joins (~shrieking@186.137.144.80)
22:41:51 <steven1> well, thanks for the help EvanR . Maybe I will get some inspiration another time
22:42:14 × steven1 quits (~steven@74.215.200.15) (Quit: WeeChat 2.8)
22:44:19 qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection)
22:44:32 qrpnxz joins (abc4f95c31@user/qrpnxz)
22:45:36 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:b417:46a:3118:ab81) (Remote host closed the connection)
22:50:10 qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection)
22:50:13 qrpnxz joins (abc4f95c31@user/qrpnxz)
22:51:14 × acode quits (~acode@151.65.31.181) (Quit: Client closed)
22:56:25 qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection)
22:56:27 qrpnxz joins (abc4f95c31@user/qrpnxz)
23:01:55 qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection)
23:01:59 qrpnxz joins (abc4f95c31@user/qrpnxz)
23:02:35 <iphy> which combinator can I use to implement this function? https://github.com/iphydf/hs-cimple/blob/fix/test/Language/Cimple/ASTSpec.hs#L25
23:03:20 <EvanR> fmap ?
23:03:34 qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection)
23:03:39 qrpnxz joins (abc4f95c31@user/qrpnxz)
23:03:44 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
23:04:06 fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
23:05:34 qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection)
23:05:34 qrpnxz joins (abc4f95c31@user/qrpnxz)
23:06:10 qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection)
23:06:11 qrpnxz joins (abc4f95c31@user/qrpnxz)
23:06:40 qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection)
23:06:41 qrpnxz joins (abc4f95c31@user/qrpnxz)
23:07:14 mmhat joins (~mmh@55d4d066.access.ecotel.net)
23:07:14 × mmhat quits (~mmh@55d4d066.access.ecotel.net) (Client Quit)
23:07:58 qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection)
23:07:59 qrpnxz joins (abc4f95c31@user/qrpnxz)
23:08:33 qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection)
23:08:34 qrpnxz joins (abc4f95c31@user/qrpnxz)
23:08:55 × fizbin quits (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Ping timeout: 256 seconds)
23:09:32 qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection)
23:09:33 qrpnxz joins (abc4f95c31@user/qrpnxz)
23:10:07 <iphy> EvanR: fmap on the Fix?
23:10:27 <iphy> https://www.irccloud.com/pastebin/PkVts157/
23:10:33 <EvanR> oh uh, under the Fix ?
23:10:51 <iphy> fmap f . unFix?
23:10:52 <EvanR> Fix isn't actually there, afterall xD
23:11:01 falafel joins (~falafel@2603-8000-d800-688c-9993-a5d6-8c3d-400e.res6.spectrum.com)
23:11:22 <EvanR> Fix . fmap f . unFix ?
23:11:57 <iphy> https://www.irccloud.com/pastebin/Xecn7gdr/
23:11:58 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:b417:46a:3118:ab81)
23:12:47 dan-so joins (~danso@2001:1970:52e7:d000:96b8:6dff:feb3:c009)
23:13:27 × alekhine_ quits (~alekhine@c-73-38-152-33.hsd1.ma.comcast.net) (Ping timeout: 256 seconds)
23:13:33 × nicbk quits (~nicbk@user/nicbk) (Ping timeout: 276 seconds)
23:13:38 TonyStone joins (~TonyStone@2603-7080-8607-c36a-9cdb-69bc-753b-1e50.res6.spectrum.com)
23:14:04 nicbk joins (~nicbk@user/nicbk)
23:14:30 × gehmehgeh quits (~user@user/gehmehgeh) (Quit: Leaving)
23:16:37 ksqsf joins (~user@134.209.106.31)
23:16:40 lavaman joins (~lavaman@98.38.249.169)
23:17:49 <EvanR> hoistFix :: Functor f => (forall a. f a -> g a) -> Fix f -> Fix g
23:18:01 <EvanR> hoistFix' :: Functor g => (forall a. f a -> g a) -> Fix f -> Fix g
23:21:11 qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection)
23:21:11 qrpnxz joins (abc4f95c31@user/qrpnxz)
23:21:25 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 268 seconds)
23:22:06 qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection)
23:22:06 qrpnxz joins (abc4f95c31@user/qrpnxz)
23:27:01 qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection)
23:27:02 qrpnxz joins (abc4f95c31@user/qrpnxz)
23:28:20 qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection)
23:28:21 qrpnxz joins (abc4f95c31@user/qrpnxz)
23:28:52 qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection)
23:28:52 qrpnxz joins (abc4f95c31@user/qrpnxz)
23:29:04 × xb0o2 quits (~xb0o2@user/xb0o2) (Quit: Client closed)
23:30:09 qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection)
23:30:10 qrpnxz joins (abc4f95c31@user/qrpnxz)
23:30:17 <iphy> ah nice
23:30:37 × falafel quits (~falafel@2603-8000-d800-688c-9993-a5d6-8c3d-400e.res6.spectrum.com) (Ping timeout: 240 seconds)
23:31:03 qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection)
23:31:04 qrpnxz joins (abc4f95c31@user/qrpnxz)
23:31:33 qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection)
23:31:33 qrpnxz joins (abc4f95c31@user/qrpnxz)
23:33:26 <EvanR> Wonder when this tricks will run out xD
23:43:01 × Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 268 seconds)
23:44:36 × coolnickname quits (uid531864@user/coolnickname) (Quit: Connection closed for inactivity)
23:47:01 × Jing quits (~hedgehog@2604:a840:3::1067) (Remote host closed the connection)
23:47:39 Jing joins (~hedgehog@2604:a840:3::1067)
23:48:26 × motherfsck quits (~motherfsc@user/motherfsck) (Ping timeout: 252 seconds)
23:49:17 × CiaoSen quits (~Jura@p200300c957347b002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
23:50:00 dcoutts_ joins (~duncan@71.78.6.51.dyn.plus.net)
23:53:07 × ksqsf quits (~user@134.209.106.31) (Ping timeout: 256 seconds)
23:53:09 falafel joins (~falafel@2603-8000-d800-688c-9993-a5d6-8c3d-400e.res6.spectrum.com)
23:53:48 qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection)
23:53:49 qrpnxz joins (abc4f95c31@user/qrpnxz)
23:54:51 × falafel quits (~falafel@2603-8000-d800-688c-9993-a5d6-8c3d-400e.res6.spectrum.com) (Remote host closed the connection)
23:55:15 falafel joins (~falafel@2603-8000-d800-688c-9993-a5d6-8c3d-400e.res6.spectrum.com)

All times are in UTC on 2021-12-27.