2020/11/13

2020-11-13 00:00:58 +0100alp(~alp@2a01:e0a:58b:4920:a000:aac2:57e0:fe16) (Remote host closed the connection)
2020-11-13 00:01:16 +0100alp(~alp@2a01:e0a:58b:4920:3450:37c2:436b:8f86)
2020-11-13 00:01:36 +0100 <Axman6> Hmm, at ANU we used to have a system which would play student's final assignments off against each other (I can't remember the game now), and I believe we had limits on execution time and memory usage
2020-11-13 00:03:08 +0100 <Axman6> jackdk: do you know anything about the thing I'm talking about? Or was it after/before your time?
2020-11-13 00:04:18 +0100 <fendor> the issue is, students can use the server for developing their solutions...
2020-11-13 00:04:30 +0100 <fendor> so I think I want to limit the memory of every ghci invocation on that server
2020-11-13 00:04:51 +0100 <fendor> I guess the limits of the user system should do that automagically?
2020-11-13 00:05:04 +0100 <fendor> iirc, you can configure the memory limit on a per user basis?
2020-11-13 00:05:27 +0100 <Axman6> I believe so, but I have no idea how
2020-11-13 00:05:38 +0100 <jackdk> Axman6: the versions I was working on were less sophisticated. The runner used System.timeout, the NFData class, and an IORef to enforce time limits on the program runtime
2020-11-13 00:05:52 +0100 <fendor> well, time to ask the sys admin. not my job after all
2020-11-13 00:06:00 +0100 <jackdk> sure this isn't an OS-level problem? I remember everyone crashing the student server the night before a concurrent systems assignment was due
2020-11-13 00:06:10 +0100 <jackdk> then they put in process limits
2020-11-13 00:06:19 +0100 <jackdk> fendor: yeah, I think that's a good idea
2020-11-13 00:07:05 +0100 <jackdk> https://github.com/ndmitchell/spaceleak might have some haskell-side ideas for fiddling with this
2020-11-13 00:07:19 +0100 <fendor> yeah, I agree, it should be solved on the os level. I just though, maybe there are some low haning fruit. But additionally, I just saw some students somehow installed hls on the server and use it for a remote vscode session.
2020-11-13 00:07:47 +0100 <fendor> I am not worrying about space leaks in particular, students write bad code, that is to be expected, but the server should not give them all the memory
2020-11-13 00:09:02 +0100 <jackdk> Yes, but space leaks -> eating memory, and the technique for catching them sooner is to bound the stack size that the rts is allowed to use. Perhaps that part is applicable to how students invoke GHCi
2020-11-13 00:09:03 +0100livvy(~livvy@gateway/tor-sasl/livvy) (Ping timeout: 240 seconds)
2020-11-13 00:09:54 +0100 <fendor> maybe. Let's see whether we can limit the overall memory
2020-11-13 00:12:23 +0100jb55(~jb55@gateway/tor-sasl/jb55) (Ping timeout: 240 seconds)
2020-11-13 00:13:28 +0100livvy(~livvy@gateway/tor-sasl/livvy)
2020-11-13 00:15:11 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
2020-11-13 00:15:58 +0100hugh(~hugh@79-66-200-43.dynamic.dsl.as9105.com)
2020-11-13 00:16:14 +0100hughaldessa
2020-11-13 00:16:46 +0100 <aldessa> hey, where can i get recursion puzzles? i thought it would be nice to have some puzzles for recursion schemes
2020-11-13 00:17:20 +0100cr3(~cr3@192-222-143-195.qc.cable.ebox.net) (Quit: leaving)
2020-11-13 00:17:27 +0100son0p(~son0p@181.136.122.143) (Quit: Lost terminal)
2020-11-13 00:22:06 +0100jokester_(~mono@unaffiliated/jokester)
2020-11-13 00:22:24 +0100neiluj(~jco@unaffiliated/neiluj) (Quit: leaving)
2020-11-13 00:23:47 +0100HiRE_(~HiRE@2602:ffc5:20::1:512e)
2020-11-13 00:23:53 +0100jokester(~mono@unaffiliated/jokester) (Ping timeout: 260 seconds)
2020-11-13 00:24:27 +0100borne(~fritjof@200116b86423eb004fbf5cd6c83663b1.dip.versatel-1u1.de) (Ping timeout: 260 seconds)
2020-11-13 00:24:27 +0100DeadComaGrayce[m(commagra1@gateway/shell/matrix.org/x-mqetgfqfsaaixhog) (Ping timeout: 260 seconds)
2020-11-13 00:24:27 +0100psydruid(psydruidma@gateway/shell/matrix.org/x-wvuhyqhqelgtcrbj) (Ping timeout: 260 seconds)
2020-11-13 00:24:28 +0100aizen_s(sid462968@gateway/web/irccloud.com/x-stnqhzxwtvurinhz) (Ping timeout: 260 seconds)
2020-11-13 00:24:28 +0100HiRE(~HiRE@2602:ffc5:20::1:512e) (Ping timeout: 260 seconds)
2020-11-13 00:24:28 +0100grol(~quassel@2620:11e:1000:2:250:56ff:fea4:7) (Ping timeout: 260 seconds)
2020-11-13 00:24:48 +0100borne(~fritjof@200116b86423eb004fbf5cd6c83663b1.dip.versatel-1u1.de)
2020-11-13 00:24:55 +0100DeadComaGrayce[m(commagra1@gateway/shell/matrix.org/x-ybppbwirrexxdalc)
2020-11-13 00:25:44 +0100grol(~quassel@2620:11e:1000:2:250:56ff:fea4:7)
2020-11-13 00:26:30 +0100jb55(~jb55@gateway/tor-sasl/jb55)
2020-11-13 00:26:57 +0100psydruid(psydruidma@gateway/shell/matrix.org/x-dxoeoaxpehfltoxm)
2020-11-13 00:27:42 +0100aizen_s(sid462968@gateway/web/irccloud.com/x-rpdggkhwylxxzxar)
2020-11-13 00:28:34 +0100elfets(~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de) (Quit: Leaving)
2020-11-13 00:30:24 +0100Rudd0(~Rudd0@185.189.115.103) (Read error: Connection reset by peer)
2020-11-13 00:30:49 +0100vicfred(~vicfred@unaffiliated/vicfred) (Ping timeout: 264 seconds)
2020-11-13 00:32:17 +0100borne(~fritjof@200116b86423eb004fbf5cd6c83663b1.dip.versatel-1u1.de) (Ping timeout: 260 seconds)
2020-11-13 00:34:52 +0100DataComputist(~lumeng@static-50-43-26-251.bvtn.or.frontiernet.net)
2020-11-13 00:37:12 +0100aldessa(~hugh@79-66-200-43.dynamic.dsl.as9105.com) (Read error: Connection reset by peer)
2020-11-13 00:37:41 +0100borne(~fritjof@200116b86423eb004fbf5cd6c83663b1.dip.versatel-1u1.de)
2020-11-13 00:37:54 +0100Gurkenglas(~Gurkengla@unaffiliated/gurkenglas) (Read error: Connection reset by peer)
2020-11-13 00:38:36 +0100Gurkenglas(~Gurkengla@unaffiliated/gurkenglas)
2020-11-13 00:40:36 +0100Ariakenom(~Ariakenom@h-82-196-111-82.NA.cust.bahnhof.se) (Quit: Leaving)
2020-11-13 00:40:48 +0100jedws(~jedws@101.184.175.183)
2020-11-13 00:43:07 +0100zebrag(~inkbottle@aaubervilliers-654-1-113-241.w86-198.abo.wanadoo.fr) (Ping timeout: 260 seconds)
2020-11-13 00:43:31 +0100alp(~alp@2a01:e0a:58b:4920:3450:37c2:436b:8f86) (Ping timeout: 272 seconds)
2020-11-13 00:45:47 +0100nbloomf(~nbloomf@76.217.43.73) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-11-13 00:48:28 +0100jedws(~jedws@101.184.175.183) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-11-13 00:49:26 +0100jedws(~jedws@101.184.175.183)
2020-11-13 00:49:42 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-11-13 00:49:58 +0100o1lo01ol1o(~o1lo01ol1@bl8-213-81.dsl.telepac.pt) (Remote host closed the connection)
2020-11-13 00:50:11 +0100 <hekkaidekapus> fendor: When we have needs like yours this side, we handle it at the OS level by putting setting limits for every user.
2020-11-13 00:50:43 +0100 <hekkaidekapus> Ony a systemd-capable Linux, this will do:
2020-11-13 00:50:45 +0100jedws(~jedws@101.184.175.183) (Client Quit)
2020-11-13 00:51:14 +0100 <hekkaidekapus> systemd-run --user --scope -p 'MemoryHigh=XXXG' -p 'CPUQuota=YYY%' $argv
2020-11-13 00:52:35 +0100 <hekkaidekapus> Usually, ghc and ghci are symlinks to the previous command where `$argv = ghc(i)`.
2020-11-13 00:53:34 +0100dhouthoo(~dhouthoo@ptr-eiv6509pb4ifhdr9lsd.18120a2.ip6.access.telenet.be) (Quit: WeeChat 2.9)
2020-11-13 00:54:06 +0100 <Axman6> to figure out cpu%, see Erlang (the person, not the language's) work on sharing resources :P
2020-11-13 00:54:12 +0100zebrag(~inkbottle@aaubervilliers-654-1-2-77.w83-200.abo.wanadoo.fr)
2020-11-13 00:54:20 +0100jedws(~jedws@101.184.175.183)
2020-11-13 00:54:29 +0100elliott_(~elliott_@pool-108-51-141-12.washdc.fios.verizon.net) (Read error: Connection reset by peer)
2020-11-13 00:54:47 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
2020-11-13 00:55:17 +0100Tuplanolla(~Tuplanoll@91-159-68-239.elisa-laajakaista.fi) (Ping timeout: 256 seconds)
2020-11-13 00:56:38 +0100perrier-jouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 2.9)
2020-11-13 00:56:44 +0100elliott_(~elliott_@pool-108-51-141-12.washdc.fios.verizon.net)
2020-11-13 00:59:57 +0100gehmehgeh(~ircuser1@gateway/tor-sasl/gehmehgeh) (Quit: Leaving)
2020-11-13 01:00:01 +0100AstroDroid(~AstroDroi@84.39.117.57) ()
2020-11-13 01:07:52 +0100machinedgod(~machinedg@207.253.244.210) (Quit: Reconnecting)
2020-11-13 01:08:16 +0100machinedgod(~machinedg@207.253.244.210)
2020-11-13 01:10:07 +0100crdrost(~crdrost@2601:646:8280:85f0:6046:db55:79c6:4622)
2020-11-13 01:11:55 +0100star_cloud(~star_clou@ec2-34-217-37-165.us-west-2.compute.amazonaws.com) (Remote host closed the connection)
2020-11-13 01:11:55 +0100stree(~stree@50-108-72-205.adr01.mskg.mi.frontiernet.net) (Quit: Caught exception)
2020-11-13 01:12:13 +0100stree(~stree@50-108-72-205.adr01.mskg.mi.frontiernet.net)
2020-11-13 01:13:21 +0100star_cloud(~star_clou@ec2-34-217-37-165.us-west-2.compute.amazonaws.com)
2020-11-13 01:13:31 +0100da39a3ee5e6b4b0d(~da39a3ee5@cm-171-98-91-208.revip7.asianet.co.th)
2020-11-13 01:16:02 +0100olligobber(olligobber@gateway/vpn/privateinternetaccess/olligobber)
2020-11-13 01:17:02 +0100argent0(~argent0@168.227.98.81) (Quit: leaving)
2020-11-13 01:17:35 +0100christo(~chris@81.96.113.213) (Remote host closed the connection)
2020-11-13 01:18:28 +0100zebrag(~inkbottle@aaubervilliers-654-1-2-77.w83-200.abo.wanadoo.fr) (Ping timeout: 272 seconds)
2020-11-13 01:19:22 +0100christo(~chris@81.96.113.213)
2020-11-13 01:20:44 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-11-13 01:21:11 +0100veverak(~squirrel@ip-89-102-98-161.net.upcbroadband.cz) (Quit: WeeChat 2.3)
2020-11-13 01:21:45 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 240 seconds)
2020-11-13 01:24:13 +0100sim590(~sim590@modemcable090.207-203-24.mc.videotron.ca) (Ping timeout: 264 seconds)
2020-11-13 01:24:58 +0100taio(~enrik@p200300ceaf3ada00997810ade8eb1ff9.dip0.t-ipconnect.de)
2020-11-13 01:25:31 +0100squirrel1(~squirrel@ip-89-102-98-161.net.upcbroadband.cz)
2020-11-13 01:25:45 +0100zebrag(~inkbottle@aaubervilliers-654-1-107-7.w86-212.abo.wanadoo.fr)
2020-11-13 01:26:42 +0100jespada(~jespada@90.254.245.49) (Ping timeout: 272 seconds)
2020-11-13 01:27:54 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-11-13 01:28:54 +0100hekkaidekapus_(~tchouri@gateway/tor-sasl/hekkaidekapus)
2020-11-13 01:29:10 +0100jespada(~jespada@90.254.245.49)
2020-11-13 01:30:18 +0100squirrel1veverak
2020-11-13 01:31:03 +0100hekkaidekapus(~tchouri@gateway/tor-sasl/hekkaidekapus) (Ping timeout: 240 seconds)
2020-11-13 01:32:30 +0100 <taio> Hello; I have a question about the understanding of instances: Since instances are automatically (implicitly) loaded from modules, it is not possible to manually determine which instance is to be used. consequently "orphaned" instances lead to conflicts. But why didn't a rule be introduced that local instances within a module are preferred over global ones? If the functions are called in another module, the local
2020-11-13 01:32:32 +0100 <taio> instances are always used for these functions.
2020-11-13 01:32:42 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 260 seconds)
2020-11-13 01:33:49 +0100Deide(~Deide@217.155.19.23) (Quit: Seeee yaaaa)
2020-11-13 01:33:52 +0100 <Axman6> there is only allowed to be one instance of a class for a type
2020-11-13 01:34:07 +0100 <Axman6> and that mean globally
2020-11-13 01:34:26 +0100 <Axman6> s*
2020-11-13 01:37:28 +0100jespada_(~jespada@90.254.245.49)
2020-11-13 01:38:09 +0100 <taio> I know ... but I asked whether it would be unproblematic to introduce local instances that would be preferred for all functions of the respective module.
2020-11-13 01:38:21 +0100jespada(~jespada@90.254.245.49) (Ping timeout: 256 seconds)
2020-11-13 01:38:56 +0100 <monochrom> Your mechanism allows two code paths to see and use two different instances for the same type and the same class.
2020-11-13 01:39:20 +0100 <monochrom> Any mechanism that achieves that will have to answer the following question:
2020-11-13 01:40:23 +0100 <monochrom> On one code path I use one Ord instance of Int to build a binary search tree containing Ints. Clearly, this binary search tree makes sense only under the comparator I used when it's built.
2020-11-13 01:41:12 +0100 <monochrom> I now pass this binary search tree to the other code path. It uses, nay, assumes, a different comparator. Now it tries to use this other incompatible comparator to try to do BST lookup.
2020-11-13 01:41:23 +0100 <monochrom> WHAT THE HELL IS WITH THAT?
2020-11-13 01:44:02 +0100 <monochrom> https://open.kattis.com/problems/outofsorts
2020-11-13 01:44:03 +0100hekkaidekapus_(~tchouri@gateway/tor-sasl/hekkaidekapus) (Ping timeout: 240 seconds)
2020-11-13 01:44:57 +0100Varis(~Tadas@unaffiliated/varis) (Remote host closed the connection)
2020-11-13 01:45:14 +0100coot(~coot@37.30.49.253.nat.umts.dynamic.t-mobile.pl)
2020-11-13 01:46:21 +0100hekkaidekapus_(~tchouri@gateway/tor-sasl/hekkaidekapus)
2020-11-13 01:47:17 +0100hekkaidekapus_hekkaidekapus
2020-11-13 01:47:51 +0100 <taio> this situation would only occur if I used the functions from that module where local instances are defined. If I don't want these alternative implementations, then I won't use the functions.
2020-11-13 01:48:12 +0100Varis(~Tadas@unaffiliated/varis)
2020-11-13 01:49:10 +0100 <monochrom> I'm passing one data structure from one module to another. What function?
2020-11-13 01:49:43 +0100 <monochrom> The recipient module is using its own function to try to make sense of this binary tree.
2020-11-13 01:49:52 +0100 <monochrom> And that's exactly the wrong thing to do.
2020-11-13 01:51:47 +0100 <monochrom> Alternatively, tell me how your mechanism forbids me from doing what I said I planned to do.
2020-11-13 01:52:49 +0100hcchien(~hcchien@217.146.82.202)
2020-11-13 01:54:09 +0100 <SrPx> What is a good / efficient structure to represent bitstring? I.e., equivalent of: `data Bits = Empty | Bit0 Bits | Bit1 Bits` ? With fast pattern-matching, concatenation and equality?
2020-11-13 01:54:38 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
2020-11-13 01:54:58 +0100 <SrPx> And appending of a bit*
2020-11-13 01:55:38 +0100 <taio> the instance would be selected indirectly via the functions:
2020-11-13 01:55:40 +0100 <taio> Module M1 has its own instance for Ord T, which overshadows the global instance Ord T ONLY for functions of this module. the module M1 has the sorting function s.
2020-11-13 01:55:53 +0100 <taio> Everywhere outside of this module where I call s from M1, the local instance Ord T is used. That is predictable and known. I don't understand what's problematic about that.
2020-11-13 01:56:22 +0100 <hpc> SrPx: store it in ByteString and build your operations on that
2020-11-13 01:56:43 +0100 <SrPx> but isn't ByteString slow for concatenation and appending?
2020-11-13 01:57:10 +0100 <SrPx> says cons is O(n) on docs https://hackage.haskell.org/package/bytestring-0.11.0.0/docs/Data-ByteString.html
2020-11-13 01:57:27 +0100jedws(~jedws@101.184.175.183) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-11-13 01:57:35 +0100conal(~conal@64.71.133.70)
2020-11-13 01:58:11 +0100o1lo01ol1o(~o1lo01ol1@bl8-213-81.dsl.telepac.pt)
2020-11-13 01:58:12 +0100 <monochrom> The BST insert function is in M1. Which comparator does it use? The BST lookup function is outside M1. Which comparator does it use?
2020-11-13 01:58:16 +0100DirefulSalt(DirefulSal@gateway/vpn/privateinternetaccess/direfulsalt) (Ping timeout: 258 seconds)
2020-11-13 01:59:51 +0100 <taio> ok i think i understand what you mean now. In my module M1 I could use a function of another module, which expects this global instance Ord T in order to work as expected.
2020-11-13 02:00:45 +0100 <monochrom> You could. But people won't.
2020-11-13 02:01:40 +0100 <monochrom> If I s/Ord/Monad/ to create another example, you will have a hard time convincing people to "don't do that".
2020-11-13 02:02:53 +0100 <monochrom> If M1 has its own instance Monad (State s), and outside M1 there is another, you really can't convince people to "don't write '>>=' both inside M1 and outside; or if you do, don't let the two pieces of code ever see each other".
2020-11-13 02:03:18 +0100o1lo01ol1o(~o1lo01ol1@bl8-213-81.dsl.telepac.pt) (Ping timeout: 260 seconds)
2020-11-13 02:04:14 +0100 <monochrom> People will really be writing code like M1.a1 Outside.>>= some_f, where M1.a1 is defined with M1.>>=
2020-11-13 02:04:24 +0100 <monochrom> Hilarity shall ensue.
2020-11-13 02:05:37 +0100conal(~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
2020-11-13 02:09:18 +0100christo(~chris@81.96.113.213) (Remote host closed the connection)
2020-11-13 02:13:22 +0100 <taio> hmmm ok;
2020-11-13 02:13:23 +0100 <taio> another idea:
2020-11-13 02:13:25 +0100 <taio> A mechanism is introduced to take over an existing type class - possibly under a new name - in another module so that the methods are in a different namespace.
2020-11-13 02:13:26 +0100 <taio> The advantage would be that all existing instances are also taken over, but can be overwritten by new instances according to the existing rules.
2020-11-13 02:13:28 +0100 <taio> The selection would be made via the namespace.
2020-11-13 02:15:43 +0100ChaiTRex(~ChaiTRex@gateway/tor-sasl/chaitrex) (Ping timeout: 240 seconds)
2020-11-13 02:18:03 +0100ChaiTRex(~ChaiTRex@gateway/tor-sasl/chaitrex)
2020-11-13 02:20:10 +0100nbloomf(~nbloomf@2600:1700:ad14:3020:4085:c5d6:bbdf:5f4e)
2020-11-13 02:20:12 +0100borne(~fritjof@200116b86423eb004fbf5cd6c83663b1.dip.versatel-1u1.de) (Ping timeout: 260 seconds)
2020-11-13 02:20:28 +0100 <unclechu> hey, can someone remind me what `|` means here? `type Demote k = (r :: Type) | r -> k`
2020-11-13 02:21:04 +0100 <taio> for example like this: adopt Ord as My Ord
2020-11-13 02:21:06 +0100 <taio> instance My Ord ... where ...
2020-11-13 02:23:08 +0100TxGuy(~coffee2th@172-125-238-23.lightspeed.rcsntx.sbcglobal.net)
2020-11-13 02:24:28 +0100TxGuy(~coffee2th@172-125-238-23.lightspeed.rcsntx.sbcglobal.net) (Client Quit)
2020-11-13 02:25:46 +0100 <monochrom> https://mail.haskell.org/pipermail/haskell-cafe/2017-May/127147.html
2020-11-13 02:26:49 +0100devalot(~ident@mail.pmade.com) (Quit: ZNC - http://znc.in)
2020-11-13 02:27:08 +0100 <monochrom> (highest density of puns in a title ever, heehee)
2020-11-13 02:27:25 +0100 <dsal> unclechu: It's just a sum type like Bool
2020-11-13 02:27:27 +0100 <dsal> @src Bool
2020-11-13 02:27:27 +0100 <lambdabot> data Bool = False | True deriving (Eq, Ord)
2020-11-13 02:28:38 +0100dsalsuddenly very distracted by that deriving list
2020-11-13 02:28:45 +0100 <dsal> I'm glad I don't have to write base
2020-11-13 02:29:02 +0100Lord_of_Life(~Lord@46.217.223.48)
2020-11-13 02:30:27 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-11-13 02:30:28 +0100jonatanb(~jonatanb@83.24.155.27.ipv4.supernova.orange.pl)
2020-11-13 02:30:35 +0100 <solonarv> dsal: no, that is not a sum type (cc: unclechu )
2020-11-13 02:30:49 +0100Lord_of_Life_(~Lord@46.217.216.229) (Ping timeout: 264 seconds)
2020-11-13 02:31:12 +0100 <solonarv> that's an injectivity annotation (InjectiveTypeFamilies), which uses similar syntax to FunctionalDependencies
2020-11-13 02:31:31 +0100 <dsal> I just noticed `type` there. Been writing wrong language all day.
2020-11-13 02:31:35 +0100 <monochrom> fancy
2020-11-13 02:32:22 +0100 <dsal> Sorry for spreading my confusion.
2020-11-13 02:32:23 +0100 <solonarv> both (r :: Type) and r -> k would be illegal syntax in that position of a data declaration
2020-11-13 02:32:28 +0100 <monochrom> Yeah I suffer a bit of language mix-up too. After having written a fair amount of Racket, I wrote in C "(for i=0"
2020-11-13 02:32:35 +0100 <monochrom> and "(if i==0"
2020-11-13 02:33:32 +0100 <dsal> solonarv: Yeah, I'm at my least smart of the day.
2020-11-13 02:33:40 +0100 <dsal> I was writing go all day.
2020-11-13 02:34:07 +0100 <solonarv> same tbh, I've been up for 20 hours now and had a bunch of various brain-using things to do all day
2020-11-13 02:34:17 +0100 <monochrom> Further in the past, when I was writing both Java and Haskell, I wrote "public class Ord where"
2020-11-13 02:34:45 +0100 <monochrom> Aw, up for 20 hours, that kills, you need sleep.
2020-11-13 02:34:52 +0100 <unclechu> solonarv: thanks
2020-11-13 02:34:58 +0100dsalis having a sleep deprivation conversation in another chat
2020-11-13 02:35:04 +0100jonatanb(~jonatanb@83.24.155.27.ipv4.supernova.orange.pl) (Ping timeout: 258 seconds)
2020-11-13 02:35:34 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-11-13 02:35:42 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
2020-11-13 02:35:45 +0100 <taio> ok thanks for answering...
2020-11-13 02:35:51 +0100 <monochrom> Actually a short nap helps tremendously.
2020-11-13 02:36:45 +0100invaser(~Thunderbi@31.148.23.125) (Ping timeout: 240 seconds)
2020-11-13 02:37:55 +0100 <monochrom> My experience leads me to hypothesize that if you are working hard and sleep-deprived like this, if you are OK with taking short naps, your body switches to the uber-sleep mode, giving you the much fabled superpower of uber-sleep.
2020-11-13 02:38:00 +0100 <hekkaidekapus> Another sleepless here: taio, fancy a paper?
2020-11-13 02:40:16 +0100nbloomf(~nbloomf@2600:1700:ad14:3020:4085:c5d6:bbdf:5f4e) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-11-13 02:40:17 +0100invaser(~Thunderbi@31.148.23.125)
2020-11-13 02:41:14 +0100 <taio> hm I'm not an academic. it's just an idea of mine. and I wonder if that would be possible or unproblematic.
2020-11-13 02:42:26 +0100nbloomf(~nbloomf@2600:1700:ad14:3020:4085:c5d6:bbdf:5f4e)
2020-11-13 02:42:44 +0100 <hekkaidekapus> taio: “Type classes in Haskell” by C.V. Hall, K. Hammomd, S.L.P. Jones and P.L. Wadler <http://web.mit.edu/ghc/old.ghc/programatica/tools.old/semantics/Overloading/Related/p109-hall.pdf>
2020-11-13 02:44:07 +0100 <hekkaidekapus> You can skip the gnary parts and you will still get the gist of why you wanted to do was fundamentally problematic.
2020-11-13 02:44:08 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 260 seconds)
2020-11-13 02:45:32 +0100 <hekkaidekapus> Caveat: That paper covers what is now known as ‘Haskell 98’. Since 1998, there have been many additions to instance resolution mechanics.
2020-11-13 02:46:35 +0100jathan(~jathan@69.61.93.38) (Quit: WeeChat 2.3)
2020-11-13 02:46:36 +0100 <hekkaidekapus> *S.L. Peyton Jones
2020-11-13 02:46:43 +0100 <taio> well Idris has "named implementations" and it seems to work, to have proven itself.
2020-11-13 02:46:47 +0100nbloomf(~nbloomf@2600:1700:ad14:3020:4085:c5d6:bbdf:5f4e) (Client Quit)
2020-11-13 02:46:57 +0100invaser(~Thunderbi@31.148.23.125) (Ping timeout: 258 seconds)
2020-11-13 02:47:13 +0100 <hekkaidekapus> Idris is a whole other beast.
2020-11-13 02:48:24 +0100 <unclechu> i have a GADT `Stdout ∷ α `OneOf` '[ 'Play, 'Render ] ⇒ Backend α` (where `OneOf` is a type family which constrain an element to be in a list).
2020-11-13 02:48:26 +0100 <unclechu> i want to define a type-class which would convert type-level values to runtime values so i defined it like this: `class ToVal (α ∷ τ) where toVal ∷ Proxy (α ∷ τ) → τ`
2020-11-13 02:48:27 +0100 <unclechu> but this `instance ToVal ('Stdout ∷ Backend 'Play) where toVal Proxy = Stdout` fails with `it has an unpromotable context ‘OneOf α '[ 'Play, 'Render]’`
2020-11-13 02:48:34 +0100 <unclechu> can i do something about it?
2020-11-13 02:49:15 +0100nbloomf(~nbloomf@2600:1700:ad14:3020:4085:c5d6:bbdf:5f4e)
2020-11-13 02:50:02 +0100kish`(~oracle@unaffiliated/oracle) (Remote host closed the connection)
2020-11-13 02:51:02 +0100neightchan(~natechan@108-233-125-227.lightspeed.sntcca.sbcglobal.net) (Read error: Connection reset by peer)
2020-11-13 02:52:27 +0100 <unclechu> i cannot define any type with that constrainer constructor: `type Test = '[ 'Stdout ] :: [Backend 'Play]` fails with “unpromotable context”
2020-11-13 02:52:40 +0100blankhart(~blankhart@pool-100-35-219-3.nwrknj.fios.verizon.net)
2020-11-13 02:53:01 +0100nahcetan(~natechan@108-233-125-227.lightspeed.sntcca.sbcglobal.net)
2020-11-13 02:53:58 +0100 <unclechu> constrained*
2020-11-13 02:55:15 +0100Chi1thangoo(~Chi1thang@87.112.60.168) (Ping timeout: 260 seconds)
2020-11-13 02:56:37 +0100electricityZZZZ(~electrici@108-216-157-17.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 264 seconds)
2020-11-13 02:56:52 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2020-11-13 02:59:36 +0100taio(~enrik@p200300ceaf3ada00997810ade8eb1ff9.dip0.t-ipconnect.de) (Quit: Konversation terminated!)
2020-11-13 03:00:11 +0100nbloomf(~nbloomf@2600:1700:ad14:3020:4085:c5d6:bbdf:5f4e) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-11-13 03:00:11 +0100Collateral(~Collatera@4e69b241.skybroadband.com) (Ping timeout: 246 seconds)
2020-11-13 03:00:26 +0100Hijiri(~Hijiri@104.236.61.10) (Ping timeout: 272 seconds)
2020-11-13 03:06:32 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-11-13 03:07:19 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 256 seconds)
2020-11-13 03:07:40 +0100 <blankhart> let is treated as a core language construct rather than as sugar for a lambda and application in some presentations like write you a haskell. is let generalization the reason for this? are there others?
2020-11-13 03:09:26 +0100 <monochrom> That and recursion.
2020-11-13 03:09:51 +0100 <dolio> What does it mean to be a 'core language construct'? The dynamic semantics in Haskell are given in terms of other things, but the type checking is different.
2020-11-13 03:10:05 +0100 <dolio> In the Haskell report, I mean.
2020-11-13 03:10:51 +0100tinwood(~tinwood@general.default.akavanagh.uk0.bigv.io) (Remote host closed the connection)
2020-11-13 03:10:51 +0100 <blankhart> fair, i was just referring to type checking
2020-11-13 03:12:15 +0100devalot(~ident@mail.pmade.com)
2020-11-13 03:12:22 +0100sim590(~sim590@modemcable090.207-203-24.mc.videotron.ca)
2020-11-13 03:13:55 +0100tinwood(~tinwood@general.default.akavanagh.uk0.bigv.io)
2020-11-13 03:14:12 +0100 <blankhart> monochrom, is the recursion point that you need to separate out let in order to have proper binding groups? i am not quite there yet in studying this so the question may be premature
2020-11-13 03:14:34 +0100 <blankhart> but that is what i took you to mean
2020-11-13 03:14:54 +0100 <blankhart> oh nevermind i think i see
2020-11-13 03:15:21 +0100 <blankhart> you can't have a recursive (anonymous) lambda
2020-11-13 03:15:50 +0100nbloomf(~nbloomf@2600:1700:ad14:3020:4085:c5d6:bbdf:5f4e)
2020-11-13 03:15:52 +0100 <monochrom> :)
2020-11-13 03:15:55 +0100 <unclechu> correct me if my assumption if i’m wrong: using GADTs with constraints on type-level is currently impossible in haskell?
2020-11-13 03:16:02 +0100 <unclechu> is my assumption is wrong*
2020-11-13 03:16:19 +0100 <unclechu> if my assumption*.. you get it
2020-11-13 03:19:17 +0100g-belmonte(~g-belmont@2804:14c:8786:9312:3638:eaf5:dc36:146d)
2020-11-13 03:19:25 +0100olligobber(olligobber@gateway/vpn/privateinternetaccess/olligobber) (Ping timeout: 264 seconds)
2020-11-13 03:21:42 +0100erisco(~erisco@d24-57-249-233.home.cgocable.net)
2020-11-13 03:22:31 +0100conal(~conal@64.71.133.70)
2020-11-13 03:24:39 +0100 <bqv> unclechu: per my simple understanding, yes
2020-11-13 03:25:13 +0100 <unclechu> bqv: okay, thanks
2020-11-13 03:25:50 +0100 <unclechu> bqv: is there any chance you know whether it is supported in idris for instance?
2020-11-13 03:26:08 +0100 <bqv> No clue :p
2020-11-13 03:29:32 +0100jonatanb(~jonatanb@83.24.155.27.ipv4.supernova.orange.pl)
2020-11-13 03:32:36 +0100xsperry(~as@unaffiliated/xsperry) (Ping timeout: 256 seconds)
2020-11-13 03:34:18 +0100jonatanb(~jonatanb@83.24.155.27.ipv4.supernova.orange.pl) (Ping timeout: 256 seconds)
2020-11-13 03:36:02 +0100dbmikus__(~dbmikus@cpe-76-167-86-219.natsow.res.rr.com) (Ping timeout: 264 seconds)
2020-11-13 03:36:10 +0100lucasb(uid333435@gateway/web/irccloud.com/x-lsuvezrsvbepowff) (Quit: Connection closed for inactivity)
2020-11-13 03:36:23 +0100Unhammerd(~Unhammer@gateway/tor-sasl/unhammer)
2020-11-13 03:38:23 +0100Unhammer(~Unhammer@gateway/tor-sasl/unhammer) (Ping timeout: 240 seconds)
2020-11-13 03:41:53 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
2020-11-13 03:45:28 +0100 <unclechu> to overcome this i added additional *promotable* type `data SBackend = SStdout | ...etc`
2020-11-13 03:46:05 +0100 <unclechu> and added a type class `class SBackendVal (α ∷ Operation) (β ∷ SBackend) where sBackendVal ∷ Proxy β → Backend α`
2020-11-13 03:46:49 +0100o1lo01ol1o(~o1lo01ol1@bl8-213-81.dsl.telepac.pt)
2020-11-13 03:47:07 +0100xff0x(~fox@2001:1a81:53be:a900:e888:cf37:a0ae:58b2) (Ping timeout: 260 seconds)
2020-11-13 03:49:01 +0100xff0x(~fox@2001:1a81:53f2:4b00:a4e6:ede5:b1af:2468)
2020-11-13 03:49:49 +0100m0rphism(~m0rphism@HSI-KBW-095-208-098-207.hsi5.kabel-badenwuerttemberg.de) (Ping timeout: 258 seconds)
2020-11-13 03:50:50 +0100jedws(~jedws@101.184.175.183)
2020-11-13 03:51:08 +0100 <MarcelineVQ> "<unclechu> bqv: is there any chance you know whether it is supported in idris for instance?" constraints on the actual "data ..." line or constraints on the data constructors that follow it? Could be more fruitful to say what/why you're wanting to do instead of whether it's possible
2020-11-13 03:51:49 +0100o1lo01ol1o(~o1lo01ol1@bl8-213-81.dsl.telepac.pt) (Ping timeout: 264 seconds)
2020-11-13 03:52:21 +0100shatriff(~vitaliish@176.52.219.10) (Remote host closed the connection)
2020-11-13 03:52:59 +0100shatriff(~vitaliish@176.52.219.10)
2020-11-13 03:59:27 +0100 <MarcelineVQ> That being said though yes you can use gadts with constraints at the type level in idris
2020-11-13 03:59:55 +0100Audentity(~Audentity@4e69b241.skybroadband.com)
2020-11-13 04:00:01 +0100hcchien(~hcchien@217.146.82.202) ()
2020-11-13 04:00:03 +0100 <MarcelineVQ> Do you need that class or would a type family do the job you're after?
2020-11-13 04:02:28 +0100solonarv(~solonarv@astrasbourg-653-1-156-155.w90-6.abo.wanadoo.fr) (Ping timeout: 258 seconds)
2020-11-13 04:05:05 +0100 <unclechu> MarcelineVQ: less boilerplate for instance. more flexibility. in my case i had to add an another type which mostly just duplicates original type
2020-11-13 04:05:27 +0100g-belmonte(~g-belmont@2804:14c:8786:9312:3638:eaf5:dc36:146d) (Quit: Leaving)
2020-11-13 04:06:15 +0100 <unclechu> MarcelineVQ: type families do not exist in runtime. i was writing a type class in order to be able to make a runtime value from type-level value.
2020-11-13 04:06:34 +0100 <unclechu> just to shift it from type-level to runtime level in other words
2020-11-13 04:07:02 +0100dbmikus__(~dbmikus@cpe-76-167-86-219.natsow.res.rr.com)
2020-11-13 04:07:07 +0100clog(~nef@bespin.org) (Ping timeout: 260 seconds)
2020-11-13 04:07:23 +0100urodna(~urodna@unaffiliated/urodna) (Quit: urodna)
2020-11-13 04:08:26 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-11-13 04:10:35 +0100jakalx(~jakalx@base.jakalx.net)
2020-11-13 04:11:47 +0100dbmikus__(~dbmikus@cpe-76-167-86-219.natsow.res.rr.com) (Ping timeout: 260 seconds)
2020-11-13 04:13:58 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
2020-11-13 04:17:23 +0100aarvar(~foewfoiew@50.35.43.33)
2020-11-13 04:26:14 +0100Tario(~Tario@201.192.165.173) (Ping timeout: 258 seconds)
2020-11-13 04:26:51 +0100Tario(~Tario@201.192.165.173)
2020-11-13 04:27:48 +0100jonatanb(~jonatanb@83.24.155.27.ipv4.supernova.orange.pl)
2020-11-13 04:28:23 +0100Saukk(~Saukk@2001:998:f9:2914:1c59:9bb5:b94c:4)
2020-11-13 04:31:58 +0100jonatanb(~jonatanb@83.24.155.27.ipv4.supernova.orange.pl) (Ping timeout: 246 seconds)
2020-11-13 04:35:50 +0100jedws(~jedws@101.184.175.183) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-11-13 04:38:09 +0100jedws(~jedws@101.184.175.183)
2020-11-13 04:38:51 +0100da39a3ee5e6b4b0d(~da39a3ee5@cm-171-98-91-208.revip7.asianet.co.th) (Ping timeout: 260 seconds)
2020-11-13 04:43:25 +0100elliott_(~elliott_@pool-108-51-141-12.washdc.fios.verizon.net) (Ping timeout: 240 seconds)
2020-11-13 04:43:35 +0100da39a3ee5e6b4b0d(~da39a3ee5@cm-171-98-91-208.revip7.asianet.co.th)
2020-11-13 04:47:27 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-11-13 04:49:22 +0100Tario(~Tario@201.192.165.173) (Ping timeout: 272 seconds)
2020-11-13 04:50:08 +0100machinedgod(~machinedg@207.253.244.210) (Ping timeout: 260 seconds)
2020-11-13 04:50:18 +0100elliott_(~elliott_@pool-108-51-141-12.washdc.fios.verizon.net)
2020-11-13 04:55:39 +0100Guest87092(~variable@139.28.218.148)
2020-11-13 04:57:59 +0100Stanley00(~stanley00@unaffiliated/stanley00)
2020-11-13 04:58:01 +0100lagothrixGuest77095
2020-11-13 04:58:01 +0100Guest77095(~lagothrix@unaffiliated/lagothrix) (Killed (hitchcock.freenode.net (Nickname regained by services)))
2020-11-13 04:58:07 +0100lagothrix(~lagothrix@unaffiliated/lagothrix)
2020-11-13 04:58:13 +0100theDon(~td@muedsl-82-207-238-200.citykom.de) (Ping timeout: 246 seconds)
2020-11-13 05:00:09 +0100haasn(~nand@mpv/developer/haasn) (Quit: ZNC 1.7.5+deb4 - https://znc.in)
2020-11-13 05:00:13 +0100xsperry(~as@unaffiliated/xsperry)
2020-11-13 05:00:16 +0100theDon(~td@muedsl-82-207-238-116.citykom.de)
2020-11-13 05:00:21 +0100Rudd0(~Rudd0@185.189.115.98)
2020-11-13 05:01:36 +0100haasn(~nand@mpv/developer/haasn)
2020-11-13 05:01:43 +0100justsomeguy(~justsomeg@unaffiliated/--/x-3805311)
2020-11-13 05:01:57 +0100howdoi(uid224@gateway/web/irccloud.com/x-ezpbwntcbzeneljs) (Quit: Connection closed for inactivity)
2020-11-13 05:08:06 +0100ChaiTRex(~ChaiTRex@gateway/tor-sasl/chaitrex) (Remote host closed the connection)
2020-11-13 05:08:35 +0100crdrost(~crdrost@2601:646:8280:85f0:6046:db55:79c6:4622) (Quit: This computer has gone to sleep)
2020-11-13 05:08:41 +0100ChaiTRex(~ChaiTRex@gateway/tor-sasl/chaitrex)
2020-11-13 05:08:43 +0100Tario(~Tario@201.192.165.173)
2020-11-13 05:08:58 +0100erisco(~erisco@d24-57-249-233.home.cgocable.net) (Quit: Leaving)
2020-11-13 05:09:21 +0100jonatanb(~jonatanb@83.24.155.27.ipv4.supernova.orange.pl)
2020-11-13 05:09:41 +0100jedws(~jedws@101.184.175.183) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-11-13 05:11:37 +0100texasmynsted(~texasmyns@212.102.45.118) (Read error: Connection reset by peer)
2020-11-13 05:13:47 +0100jonatanb(~jonatanb@83.24.155.27.ipv4.supernova.orange.pl) (Ping timeout: 260 seconds)
2020-11-13 05:15:49 +0100darjeeling_(~darjeelin@122.245.210.116) (Ping timeout: 264 seconds)
2020-11-13 05:16:14 +0100darjeeling_(~darjeelin@122.245.210.116)
2020-11-13 05:18:48 +0100whatisRT(~whatisRT@2002:5b41:6a33:0:d89f:d10e:927a:2962)
2020-11-13 05:21:06 +0100jakob_(~textual@p200300f49f16220035a786c99145f1b1.dip0.t-ipconnect.de)
2020-11-13 05:22:22 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 246 seconds)
2020-11-13 05:24:28 +0100texasmynsted_(~texasmyns@99.96.221.112) (Ping timeout: 246 seconds)
2020-11-13 05:26:42 +0100verement(~anonymous@cpe-76-167-229-223.san.res.rr.com) (Quit: verement)
2020-11-13 05:27:26 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Quit: leaving)
2020-11-13 05:27:48 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-11-13 05:27:51 +0100texasmynsted(~texasmyns@99.96.221.112)
2020-11-13 05:32:27 +0100da39a3ee5e6b4b0d(~da39a3ee5@cm-171-98-91-208.revip7.asianet.co.th) (Ping timeout: 260 seconds)
2020-11-13 05:33:20 +0100mputz(~Thunderbi@dslb-084-058-211-084.084.058.pools.vodafone-ip.de)
2020-11-13 05:33:27 +0100elliott_(~elliott_@pool-108-51-141-12.washdc.fios.verizon.net) (Read error: Connection reset by peer)
2020-11-13 05:34:11 +0100elliott_(~elliott_@pool-108-51-141-12.washdc.fios.verizon.net)
2020-11-13 05:34:27 +0100acidjnk_new(~acidjnk@p200300d0c718f66175ef21b7256ec1f4.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2020-11-13 05:34:46 +0100o1lo01ol1o(~o1lo01ol1@bl8-213-81.dsl.telepac.pt)
2020-11-13 05:35:39 +0100verement(~anonymous@cpe-76-167-229-223.san.res.rr.com)
2020-11-13 05:35:48 +0100jedws(~jedws@101.184.175.183)
2020-11-13 05:35:57 +0100Gurkenglas(~Gurkengla@unaffiliated/gurkenglas) (Ping timeout: 260 seconds)
2020-11-13 05:38:50 +0100nados(~dan@69-165-210-185.cable.teksavvy.com) (Quit: Leaving)
2020-11-13 05:39:06 +0100conal(~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
2020-11-13 05:39:43 +0100o1lo01ol1o(~o1lo01ol1@bl8-213-81.dsl.telepac.pt) (Ping timeout: 260 seconds)
2020-11-13 05:42:02 +0100 <jakob_> Hey people, beginner question here: I want to look for a specific constructor in a list and i'm not sure whats the elegant way to do it. Here is what i came up with https://pastebin.com/e5QX1wpr Is there a nicer way to achieve what i want?
2020-11-13 05:42:32 +0100jedws(~jedws@101.184.175.183) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-11-13 05:43:28 +0100jedws(~jedws@101.184.175.183)
2020-11-13 05:43:30 +0100 <bqv> looks about as good as you'll get, to me
2020-11-13 05:45:20 +0100jedws(~jedws@101.184.175.183) (Client Quit)
2020-11-13 05:45:55 +0100conal(~conal@64.71.133.70)
2020-11-13 05:47:36 +0100 <jakob_> actually the type MyNum has a lot of constructors (in my non example code its MyValue) and i want a check for every constructor. That would mean writing a lot these isMy... functions
2020-11-13 05:48:58 +0100 <bqv> well in that case, why not make a newtyped Eq instance which only compares the constructor
2020-11-13 05:50:15 +0100 <bqv> then you can do e.g. any (\x -> TypeOf x == MyRationalType)
2020-11-13 05:50:26 +0100jonatanb(~jonatanb@83.24.155.27.ipv4.supernova.orange.pl)
2020-11-13 05:50:52 +0100conal(~conal@64.71.133.70) (Ping timeout: 256 seconds)
2020-11-13 05:54:16 +0100 <jakob_> ah, that sounds like a neat idea. I'll try it
2020-11-13 05:54:45 +0100jonatanb(~jonatanb@83.24.155.27.ipv4.supernova.orange.pl) (Ping timeout: 240 seconds)
2020-11-13 05:55:27 +0100renzhi(~renzhi@2607:fa49:655f:e600::28da) (Ping timeout: 260 seconds)
2020-11-13 05:55:52 +0100 <dsal> > [Left 1, Left 2, Left 3, Right 4, Left 5] ^? folded . _Right -- jakob_ non-beginner answer for LOL
2020-11-13 05:55:54 +0100 <lambdabot> Just 4
2020-11-13 05:56:12 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-11-13 05:56:57 +0100 <bqv> lenses solve everything
2020-11-13 05:57:27 +0100 <dsal> The cause of, and solution to...
2020-11-13 06:01:06 +0100 <dsal> `myDouble :: MyNum -> Just Double` is probably more useful, though.
2020-11-13 06:01:15 +0100 <dsal> er, Maybe
2020-11-13 06:01:25 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds)
2020-11-13 06:02:39 +0100clog(~nef@bespin.org)
2020-11-13 06:04:47 +0100polyphem(~p0lyph3m@2a02:810d:640:776c:76d7:55f6:f85b:c889) (Ping timeout: 260 seconds)
2020-11-13 06:07:18 +0100jedws(~jedws@101.184.175.183)
2020-11-13 06:07:57 +0100dbmikus__(~dbmikus@cpe-76-167-86-219.natsow.res.rr.com)
2020-11-13 06:07:57 +0100Jonkimi727406120(~Jonkimi@119.123.240.220)
2020-11-13 06:10:25 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 264 seconds)
2020-11-13 06:11:01 +0100 <jakob_> bqv this is not what you suggested i suppose? https://pastebin.com/m5gh6TrS
2020-11-13 06:11:31 +0100 <bqv> ah, not quite
2020-11-13 06:11:49 +0100 <jakob_> i thought so ;)
2020-11-13 06:12:23 +0100 <jakob_> do you have a hint what you would go for
2020-11-13 06:12:23 +0100motte(~weechat@unaffiliated/motte) (Ping timeout: 260 seconds)
2020-11-13 06:12:37 +0100dbmikus__(~dbmikus@cpe-76-167-86-219.natsow.res.rr.com) (Ping timeout: 256 seconds)
2020-11-13 06:13:10 +0100 <dsal> bqv's suggestion involved making a newtype called TypeOf
2020-11-13 06:13:49 +0100 <bqv> jakob_: think i overthought that one, pastebin.com/z4SvV5wr
2020-11-13 06:15:02 +0100 <dsal> I still think the is* model is probably not great.
2020-11-13 06:15:43 +0100 <bqv> hard to tell, without more info
2020-11-13 06:16:38 +0100 <jakob_> dsal yes, the maybe version might be helpful indeed. I'll try it after i got this one working
2020-11-13 06:16:50 +0100jedws(~jedws@101.184.175.183) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-11-13 06:17:24 +0100 <dsal> e.g.:
2020-11-13 06:17:26 +0100 <bqv> it's probably simpler codewise, thanks to makePrisms
2020-11-13 06:17:43 +0100 <dsal> > myInteger (MyDouble 3)
2020-11-13 06:17:45 +0100 <lambdabot> Nothing
2020-11-13 06:17:50 +0100 <dsal> > myInteger (MyInteger 3)
2020-11-13 06:17:52 +0100 <lambdabot> Just 3
2020-11-13 06:17:55 +0100 <dsal> :t myInteger
2020-11-13 06:17:56 +0100 <lambdabot> MyNum -> Maybe Integer
2020-11-13 06:18:02 +0100 <dsal> :t isJust . myInteger
2020-11-13 06:18:03 +0100 <lambdabot> MyNum -> Bool
2020-11-13 06:18:15 +0100uhrenmacher(~uhrenmach@p4fc078af.dip0.t-ipconnect.de)
2020-11-13 06:18:24 +0100jedws(~jedws@101.184.175.183)
2020-11-13 06:18:50 +0100 <bqv> i just suggested the more direct route because it's a lot less boilerplate
2020-11-13 06:18:55 +0100uhrenmacher(~uhrenmach@p4fc078af.dip0.t-ipconnect.de) (Remote host closed the connection)
2020-11-13 06:20:07 +0100 <dsal> Sure, it's a shorter path to the stated goal. I just don't like the goal. :)
2020-11-13 06:20:27 +0100 <bqv> simple questions get simple answers :p
2020-11-13 06:20:41 +0100 <dsal> Yeah, I'm trying to remember how to write a prism by hand.
2020-11-13 06:20:49 +0100 <bqv> :t prism
2020-11-13 06:20:51 +0100 <lambdabot> (Choice p, Applicative f) => (b -> t) -> (s -> Either t a) -> p a (f b) -> p s (f t)
2020-11-13 06:20:52 +0100 <bqv> :t prism'
2020-11-13 06:20:53 +0100 <lambdabot> (Choice p, Applicative f) => (b -> s) -> (s -> Maybe a) -> p a (f b) -> p s (f s)
2020-11-13 06:23:45 +0100 <jakob_> bvq https://pastebin.com/d30J3Usw thanks for the hint.
2020-11-13 06:25:05 +0100denisse(~spaceCat@gateway/tor-sasl/alephzer0) (Remote host closed the connection)
2020-11-13 06:25:25 +0100denisse(~spaceCat@gateway/tor-sasl/alephzer0)
2020-11-13 06:26:39 +0100Jeanne-Kamikaze(~Jeanne-Ka@66.115.189.209)
2020-11-13 06:30:07 +0100 <koz_> :t confusing
2020-11-13 06:30:09 +0100 <lambdabot> Applicative f => LensLike (Data.Functor.Day.Curried.Curried (Data.Functor.Yoneda.Yoneda f) (Data.Functor.Yoneda.Yoneda f)) s t a b -> LensLike f s t a b
2020-11-13 06:30:35 +0100 <Axman6> :t confusing traverse
2020-11-13 06:30:36 +0100 <lambdabot> (Applicative f, Traversable t) => LensLike f (t a) (t b) a b
2020-11-13 06:30:36 +0100whatisRT(~whatisRT@2002:5b41:6a33:0:d89f:d10e:927a:2962) (Read error: Connection reset by peer)
2020-11-13 06:31:07 +0100day_(~Unknown@unaffiliated/day)
2020-11-13 06:33:01 +0100 <bqv> confusing is confusing
2020-11-13 06:33:37 +0100 <bqv> aiui it's effect isn't visible at type-level so it's weird
2020-11-13 06:34:11 +0100Jonkimi727406120(~Jonkimi@119.123.240.220) (Ping timeout: 265 seconds)
2020-11-13 06:34:29 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-11-13 06:34:40 +0100day(~Unknown@unaffiliated/day) (Ping timeout: 265 seconds)
2020-11-13 06:34:40 +0100day_day
2020-11-13 06:35:00 +0100 <Axman6> it's secret make go faster juice
2020-11-13 06:35:19 +0100 <bqv> :D
2020-11-13 06:38:35 +0100 <koz_> :t confusing fmap
2020-11-13 06:38:37 +0100 <lambdabot> Applicative f => LensLike f (Data.Functor.Day.Curried.Curried (Data.Functor.Yoneda.Yoneda f) (Data.Functor.Yoneda.Yoneda f) a) (Data.Functor.Day.Curried.Curried (Data.Functor.Yoneda.Yoneda f) (Data.
2020-11-13 06:38:37 +0100 <lambdabot> Functor.Yoneda.Yoneda f) b) a b
2020-11-13 06:42:30 +0100 <bqv> :t lens . has . confusing . elements
2020-11-13 06:42:31 +0100 <lambdabot> error:
2020-11-13 06:42:31 +0100 <lambdabot> • Couldn't match type ‘Gen a’
2020-11-13 06:42:31 +0100 <lambdabot> with ‘(a0
2020-11-13 06:42:37 +0100 <bqv> darn
2020-11-13 06:42:42 +0100 <bqv> that worked on a repl
2020-11-13 06:43:21 +0100 <bqv> :: (Traversable t1, Functor f) => (Int -> Bool) -> (t1 a -> b -> t2) -> (Bool -> f b) -> t1 a -> f t2
2020-11-13 06:44:24 +0100AbhayAysola(312587e9@49.37.135.233)
2020-11-13 06:45:12 +0100 <koz_> What package(s) did those identifiers come from?
2020-11-13 06:45:16 +0100Jonkimi727406120(~Jonkimi@119.123.240.220)
2020-11-13 06:45:21 +0100 <koz_> I think lambdabot might have something else for one or more of them.
2020-11-13 06:45:30 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-11-13 06:45:33 +0100 <koz_> :t is
2020-11-13 06:45:34 +0100 <lambdabot> error:
2020-11-13 06:45:34 +0100 <lambdabot> • Variable not in scope: is
2020-11-13 06:45:34 +0100 <lambdabot> • Perhaps you meant one of these:
2020-11-13 06:45:37 +0100 <koz_> :(
2020-11-13 06:45:39 +0100 <bqv> they'll all be from lens, for me
2020-11-13 06:45:42 +0100 <Axman6> % :t lens . has . confusing . elements
2020-11-13 06:45:42 +0100 <yahb> Axman6: ; <interactive>:1:26: error:; * Variable not in scope: elements :: a -> LensLike (Data.Functor.Day.Curried.Curried (Data.Functor.Yoneda.Yoneda (Const Control.Monad.RWS.Any)) (Data.Functor.Yoneda.Yoneda (Const Control.Monad.RWS.Any))) s s a0 a0; * Perhaps you meant one of these: `Q.elements' (imported from Test.QuickCheck), `Lens.elements' (imported from Control.Lens), `element' (imported from
2020-11-13 06:45:45 +0100monochrom(trebla@216.138.220.146) (Quit: NO CARRIER)
2020-11-13 06:46:00 +0100hackagetrade-journal 0.0.2 - https://hackage.haskell.org/package/trade-journal-0.0.2 (JohnWiegley)
2020-11-13 06:46:24 +0100 <koz_> A better question: what does 'lens . has . confusing . elements' do?
2020-11-13 06:46:44 +0100 <bqv> that's above my pay grade
2020-11-13 06:46:56 +0100AbhayAysola(312587e9@49.37.135.233) (Remote host closed the connection)
2020-11-13 06:47:17 +0100 <dsal> has confuses me without needing confusing
2020-11-13 06:47:50 +0100 <koz_> :t has
2020-11-13 06:47:51 +0100 <lambdabot> Getting Any s a -> s -> Bool
2020-11-13 06:48:05 +0100 <koz_> Isn't that just like, generalized member?
2020-11-13 06:48:22 +0100 <koz_> (also, 'Getting Any' makes me giggle)
2020-11-13 06:48:40 +0100 <bqv> it's true if the prism matches
2020-11-13 06:48:42 +0100 <bqv> that's all i know
2020-11-13 06:49:59 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 258 seconds)
2020-11-13 06:50:11 +0100benjamingr__(uid23465@gateway/web/irccloud.com/x-jujlikfcmwauxivg) (Quit: Connection closed for inactivity)
2020-11-13 06:50:52 +0100jathan(~jathan@69.61.93.38)
2020-11-13 06:57:58 +0100monochrom(trebla@216.138.220.146)
2020-11-13 07:00:02 +0100Guest87092(~variable@139.28.218.148) ()
2020-11-13 07:02:14 +0100Jeanne-Kamikaze(~Jeanne-Ka@66.115.189.209) (Quit: Leaving)
2020-11-13 07:06:51 +0100howdoi(uid224@gateway/web/irccloud.com/x-odsmdwwzesbrmhor)
2020-11-13 07:09:07 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 246 seconds)
2020-11-13 07:12:07 +0100xerox_(~xerox@unaffiliated/xerox) (Ping timeout: 256 seconds)
2020-11-13 07:12:19 +0100Saukk(~Saukk@2001:998:f9:2914:1c59:9bb5:b94c:4) (Remote host closed the connection)
2020-11-13 07:14:28 +0100 <dminuoso> jakob_: Do you want to extract all values matching that constructor?
2020-11-13 07:14:45 +0100 <dminuoso> Or just determine whether any value in the list was constructed with the given constructor?
2020-11-13 07:16:38 +0100 <jakob_> dminuoso i don't care about the values, just about the constructors
2020-11-13 07:17:26 +0100sord937(~sord937@gateway/tor-sasl/sord937)
2020-11-13 07:17:45 +0100 <bqv> if you wanna get real spicy, you could probably use Typeable to get the constructor name
2020-11-13 07:18:07 +0100 <dminuoso> % anyLeft xs = any [x | Left x <- xs ]
2020-11-13 07:18:08 +0100 <yahb> dminuoso: ; <interactive>:88:18: error:; * Couldn't match expected type `a1 -> Bool' with actual type `[a]'; * In the first argument of `any', namely `[x | Left x <- xs]'; In the expression: any [x | Left x <- xs]; In an equation for `anyLeft': anyLeft xs = any [x | Left x <- xs]; * Relevant bindings include; xs :: [Either a b] (bound at <interactive>:88:9); anyLeft :: [Eithe
2020-11-13 07:18:28 +0100 <dminuoso> oh
2020-11-13 07:18:39 +0100 <dminuoso> % anyLeft xs = not (null [x | Left x <- xs ])
2020-11-13 07:18:39 +0100 <yahb> dminuoso:
2020-11-13 07:19:40 +0100thc202(~thc202@unaffiliated/thc202)
2020-11-13 07:19:51 +0100 <dminuoso> % anyLeft' = has (folded . _Left)
2020-11-13 07:19:52 +0100 <yahb> dminuoso:
2020-11-13 07:20:47 +0100 <bqv> % anyLeft [Left 1, Right 2]
2020-11-13 07:20:47 +0100 <yahb> bqv: True
2020-11-13 07:20:50 +0100 <bqv> neat
2020-11-13 07:20:58 +0100 <bqv> list comprehensions are magic
2020-11-13 07:21:21 +0100 <dminuoso> They're really just a bit more mathy looking interface for Monad.
2020-11-13 07:21:28 +0100 <dminuoso> (And some MonadPlus)
2020-11-13 07:21:59 +0100 <bqv> yeah, i've used list in do form
2020-11-13 07:22:07 +0100 <bqv> but i didn't realise you could guard in a comprehension
2020-11-13 07:22:14 +0100reallymemorable(~quassel@2601:180:8300:8fd0:c5df:6e57:bcff:c1bb) (Ping timeout: 264 seconds)
2020-11-13 07:22:54 +0100o1lo01ol1o(~o1lo01ol1@bl8-213-81.dsl.telepac.pt)
2020-11-13 07:23:06 +0100 <jakob_> dminuoso nice! List comprehensions for the win :)
2020-11-13 07:23:10 +0100 <jakob_> thx
2020-11-13 07:24:01 +0100acarrico(~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) (Ping timeout: 256 seconds)
2020-11-13 07:26:56 +0100echoreply(~echoreply@unaffiliated/echoreply) (Quit: WeeChat 1.9.1)
2020-11-13 07:27:23 +0100echoreply(~echoreply@unaffiliated/echoreply)
2020-11-13 07:27:50 +0100o1lo01ol1o(~o1lo01ol1@bl8-213-81.dsl.telepac.pt) (Ping timeout: 256 seconds)
2020-11-13 07:28:34 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-11-13 07:30:37 +0100Jonkimi727406120(~Jonkimi@119.123.240.220) (Ping timeout: 258 seconds)
2020-11-13 07:31:46 +0100 <dsal> I almost never use comprehensions for some reason.
2020-11-13 07:32:20 +0100 <bqv> i used a do list yesterday
2020-11-13 07:32:31 +0100 <bqv> because feels nicer than comprehension form
2020-11-13 07:32:39 +0100 <bqv> and i needed a guard
2020-11-13 07:32:57 +0100 <dsal> Haskell and emacs both seem to have this thing in common where there are so many things I can't even remember what all the things are. Not so much that I don't know how to use them, but that I forget they exist.
2020-11-13 07:33:13 +0100 <dsal> Yeah, do + guard is pretty awesome for lists.
2020-11-13 07:33:21 +0100ggole(~ggole@2001:8003:8119:7200:cd0:562c:261b:241d)
2020-11-13 07:33:26 +0100 <jakob_> about list comprehensions: i thought they were implemented in terms of map and concat? Nothing to to with monads
2020-11-13 07:33:56 +0100 <bqv> if that were the case, what dminuoso did would be impossible, i think
2020-11-13 07:35:31 +0100mmohammadi9812(~mmohammad@80.210.53.226) (Quit: Quit)
2020-11-13 07:35:39 +0100 <jakob_> https://www.haskell.org/onlinereport/haskell2010/haskellch3.html#x8-420003.11
2020-11-13 07:35:59 +0100 <dsal> haskell tutorials often confuse what a thing is with what you can do with the thing.
2020-11-13 07:36:11 +0100 <bqv> dsal: i find azure cloud also has that feature. unfortunately it comes in the "everything is constantly broken in an obscure way, and what isn't broken is only working due to the most unsightly of hacks" edition
2020-11-13 07:36:41 +0100 <dsal> I can't even read the "new features we've added to AWS" emails anymore.
2020-11-13 07:37:25 +0100 <dsal> Does lambdabot have an undo for list comprehensions?
2020-11-13 07:37:43 +0100 <dsal> @miscomprehend [x | x <- [1..], odd ]
2020-11-13 07:37:43 +0100 <lambdabot> Unknown command, try @list
2020-11-13 07:39:19 +0100 <dsal> @undo do { Just x <- xs; pure x }
2020-11-13 07:39:19 +0100 <lambdabot> xs >>= \ a -> case a of { Just x -> pure x; _ -> fail ""}
2020-11-13 07:39:45 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-11-13 07:40:20 +0100takuan(~takuan@178-116-218-225.access.telenet.be)
2020-11-13 07:40:30 +0100 <dsal> > let xs = [Left 1, Right 2, Left 3, Right 4] in do { Right x <- xs; pure x }
2020-11-13 07:40:32 +0100 <lambdabot> [2,4]
2020-11-13 07:40:41 +0100dbmikus__(~dbmikus@cpe-76-167-86-219.natsow.res.rr.com)
2020-11-13 07:40:50 +0100 <dsal> > let xs = [Left 1, Right 2, Left 3, Right 4] in [ x | Left x <- xs ]
2020-11-13 07:40:52 +0100 <lambdabot> [1,3]
2020-11-13 07:41:13 +0100feliocrat(~feliocrat@95.70.185.239)
2020-11-13 07:43:22 +0100 <dsal> I used this mechanism of guarding yesterday, and still don't ever think about it.
2020-11-13 07:43:30 +0100Sheilong(uid293653@gateway/web/irccloud.com/x-kihpfdwzdbjfjvbb) (Quit: Connection closed for inactivity)
2020-11-13 07:44:59 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
2020-11-13 07:45:27 +0100dbmikus__(~dbmikus@cpe-76-167-86-219.natsow.res.rr.com) (Ping timeout: 260 seconds)
2020-11-13 07:49:53 +0100 <suzu_> thats pretty cool
2020-11-13 07:50:18 +0100 <bqv> "miscomprehend" lmao
2020-11-13 07:53:01 +0100 <koz_> uncomprehend, surely?
2020-11-13 07:53:08 +0100 <koz_> Which would be like... 'misunderstand'?
2020-11-13 07:54:36 +0100asheshambasta(~user@ptr-e1lysawl9rr13i61o92.18120a2.ip6.access.telenet.be)
2020-11-13 07:55:46 +0100coot(~coot@37.30.49.253.nat.umts.dynamic.t-mobile.pl) (Ping timeout: 256 seconds)
2020-11-13 07:56:36 +0100aki_(~aki_@139.28.218.148)
2020-11-13 07:57:49 +0100 <dsal> It was the nearest word I could find at the time.
2020-11-13 07:58:54 +0100 <dsal> I can't find that thing I thought I did yesterday. It's the one where you use are in a monad and you want a maybe monad real quick that's also a guard, so you `Just x <- pure (some maybe monad stuff)`
2020-11-13 07:59:45 +0100 <dsal> @undo do { Just x <- pure someMaybeMonadStuff; do x } -- I guess that's the same, but it feels different.
2020-11-13 07:59:45 +0100 <lambdabot> pure someMaybeMonadStuff >>= \ a -> case a of { Just x -> x; _ -> fail ""}
2020-11-13 08:00:20 +0100 <dsal> Also, I just said `do x` when I meant `pure x`
2020-11-13 08:00:23 +0100hekkaidekapus(~tchouri@gateway/tor-sasl/hekkaidekapus) (Remote host closed the connection)
2020-11-13 08:00:47 +0100hekkaidekapus(~tchouri@gateway/tor-sasl/hekkaidekapus)
2020-11-13 08:01:08 +0100 <dsal> @undo do { Just x <- pure maybeGetMeSomeAction; x }
2020-11-13 08:01:08 +0100 <lambdabot> pure maybeGetMeSomeAction >>= \ a -> case a of { Just x -> x; _ -> fail ""}
2020-11-13 08:01:47 +0100 <dsal> If I'm ever seen in public again, that's gonna be on my shirt.
2020-11-13 08:02:35 +0100 <bqv> ha
2020-11-13 08:03:43 +0100 <dsal> This is another case of undo killing magic, though.
2020-11-13 08:04:57 +0100 <bqv> @pf \a -> case a of { Just x -> x; _ -> fail "" }
2020-11-13 08:04:57 +0100 <lambdabot> Maybe you meant: pl bf
2020-11-13 08:05:06 +0100 <bqv> @pl \a -> case a of { Just x -> x; _ -> fail "" }
2020-11-13 08:05:06 +0100 <lambdabot> (line 1, column 17):
2020-11-13 08:05:06 +0100 <lambdabot> unexpected '{'
2020-11-13 08:05:06 +0100 <lambdabot> expecting variable, "(", operator or end of input
2020-11-13 08:05:24 +0100 <bqv> i get it, because pointless. oh you.
2020-11-13 08:05:44 +0100 <bqv> @pl \a -> case a of Just x -> x; _ -> fail "";
2020-11-13 08:05:44 +0100 <lambdabot> (line 1, column 26):
2020-11-13 08:05:44 +0100 <lambdabot> unexpected '>'
2020-11-13 08:05:44 +0100 <lambdabot> expecting operator
2020-11-13 08:05:48 +0100nbloomf(~nbloomf@2600:1700:ad14:3020:4085:c5d6:bbdf:5f4e) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-11-13 08:05:59 +0100 <dsal> That's weird. It doesn't seem to like case.
2020-11-13 08:06:19 +0100 <bqv> indeed
2020-11-13 08:06:56 +0100 <dsal> :t fromMaybe (fail "")
2020-11-13 08:06:57 +0100 <lambdabot> MonadFail m => Maybe (m a) -> m a
2020-11-13 08:07:37 +0100 <bqv> nice
2020-11-13 08:15:09 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-11-13 08:15:24 +0100xerox_(~xerox@unaffiliated/xerox)
2020-11-13 08:17:00 +0100alx741(~alx741@186.178.110.202) (Ping timeout: 258 seconds)
2020-11-13 08:17:56 +0100zoran119(~zoran119@124-169-22-52.dyn.iinet.net.au)
2020-11-13 08:19:19 +0100 <bqv> dsal: is AWS any less blackbox-y than azure?
2020-11-13 08:19:56 +0100 <bqv> tbh even if it is it's still a cloud and at this point i think i just hate clouds
2020-11-13 08:20:02 +0100bqvyoung man shouts at cloud
2020-11-13 08:22:19 +0100dhouthoo(~dhouthoo@ptr-eiv6509pb4ifhdr9lsd.18120a2.ip6.access.telenet.be)
2020-11-13 08:26:52 +0100 <dsal> Haha. I don't know azure at all. I know a little AWS and some of Google cloud from the inside. I use aws some.
2020-11-13 08:29:40 +0100Sgeo(~Sgeo@ool-18b982ad.dyn.optonline.net) (Read error: Connection reset by peer)
2020-11-13 08:29:58 +0100alx741(~alx741@186.178.110.152)
2020-11-13 08:31:08 +0100borne(~fritjof@200116b86489f5004fbf5cd6c83663b1.dip.versatel-1u1.de)
2020-11-13 08:31:34 +0100jedws(~jedws@101.184.175.183) (Quit: Textual IRC Client: www.textualapp.com)
2020-11-13 08:35:46 +0100cfricke(~cfricke@unaffiliated/cfricke)
2020-11-13 08:38:01 +0100blankhart(~blankhart@pool-100-35-219-3.nwrknj.fios.verizon.net) (Ping timeout: 246 seconds)
2020-11-13 08:41:00 +0100jakob_(~textual@p200300f49f16220035a786c99145f1b1.dip0.t-ipconnect.de) (Quit: My Laptop has gone to sleep. ZZZzzz…)
2020-11-13 08:42:12 +0100z0(~z0@188.251.69.121)
2020-11-13 08:43:25 +0100cole-h(~cole-h@c-73-48-197-220.hsd1.ca.comcast.net) (Ping timeout: 240 seconds)
2020-11-13 08:43:57 +0100 <z0> hi. when using ghcid with the -l flag, is it possible to get coloured hlint output?
2020-11-13 08:46:10 +0100mananamenos(~mananamen@84.122.202.215.dyn.user.ono.com)
2020-11-13 08:46:52 +0100jakob_(~textual@p200300f49f162200e1f79f04dc8b19b7.dip0.t-ipconnect.de)
2020-11-13 08:47:02 +0100chele(~chele@ip5b416ea2.dynamic.kabel-deutschland.de)
2020-11-13 08:47:12 +0100vilpan(~0@212.117.1.172)
2020-11-13 08:47:28 +0100Sanchayan(~Sanchayan@2401:4900:3309:dec3:efb6:6366:cb4:cbe4)
2020-11-13 08:48:27 +0100 <dminuoso> jakob_: map and concat are the Monad interface of list.
2020-11-13 08:48:35 +0100 <dminuoso> map is just fmap, and concat is join
2020-11-13 08:48:49 +0100 <dminuoso> and equivalently concatMap (the combination of those two) is just (=<<)/(>>=)
2020-11-13 08:49:30 +0100 <dminuoso> dsal: also, you can just undo list comprehensions
2020-11-13 08:49:41 +0100 <dminuoso> @undo [x | Just x <- xs]
2020-11-13 08:49:41 +0100 <lambdabot> concatMap (\ a -> case a of { Just x -> [x]; _ -> []}) xs
2020-11-13 08:53:14 +0100danvet(~Daniel@2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa)
2020-11-13 08:55:31 +0100Varis(~Tadas@unaffiliated/varis) (Remote host closed the connection)
2020-11-13 08:58:35 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2020-11-13 08:59:46 +0100dbmikus__(~dbmikus@cpe-76-167-86-219.natsow.res.rr.com)
2020-11-13 08:59:48 +0100knupfer(~Thunderbi@200116b8249e5f00a4b9fafffef91ebc.dip.versatel-1u1.de)
2020-11-13 09:00:39 +0100knupfer(~Thunderbi@200116b8249e5f00a4b9fafffef91ebc.dip.versatel-1u1.de) (Remote host closed the connection)
2020-11-13 09:00:47 +0100knupfer(~Thunderbi@200116b8249e5f0024181441028bf74f.dip.versatel-1u1.de)
2020-11-13 09:06:32 +0100borne(~fritjof@200116b86489f5004fbf5cd6c83663b1.dip.versatel-1u1.de) (Ping timeout: 260 seconds)
2020-11-13 09:09:07 +0100Varis(~Tadas@unaffiliated/varis)
2020-11-13 09:11:26 +0100dmiles(dmiles@c-73-67-179-188.hsd1.wa.comcast.net) (Ping timeout: 258 seconds)
2020-11-13 09:12:09 +0100alp(~alp@2a01:e0a:58b:4920:3450:37c2:436b:8f86)
2020-11-13 09:12:20 +0100borne(~fritjof@200116b86489f5004fbf5cd6c83663b1.dip.versatel-1u1.de)
2020-11-13 09:18:13 +0100Lord_of_Life(~Lord@46.217.223.48) (Changing host)
2020-11-13 09:18:13 +0100Lord_of_Life(~Lord@unaffiliated/lord-of-life/x-0885362)
2020-11-13 09:19:22 +0100dbmikus__(~dbmikus@cpe-76-167-86-219.natsow.res.rr.com) (Ping timeout: 260 seconds)
2020-11-13 09:19:54 +0100jedws(~jedws@101.184.175.183)
2020-11-13 09:19:56 +0100da39a3ee5e6b4b0d(~da39a3ee5@cm-171-98-91-208.revip7.asianet.co.th)
2020-11-13 09:24:55 +0100hiroaki(~hiroaki@ip4d168e73.dynamic.kabel-deutschland.de) (Ping timeout: 260 seconds)
2020-11-13 09:25:53 +0100kritzefitz(~kritzefit@fw-front.credativ.com)
2020-11-13 09:29:49 +0100thebnq(~bnq@herrokitty.com) (Ping timeout: 256 seconds)
2020-11-13 09:29:56 +0100thebnq(~bnq@herrokitty.com)
2020-11-13 09:30:51 +0100dbmikus__(~dbmikus@cpe-76-167-86-219.natsow.res.rr.com)
2020-11-13 09:34:23 +0100 <bqv> Do any of you have tricks to make cloud-like dev a ...better experience? Is it just suffering from horizon to horizon, or is there hope somewhere?
2020-11-13 09:34:54 +0100mojtaba__(~bquest_12@5.200.109.144) (Quit: Leaving)
2020-11-13 09:35:01 +0100gproto23(~gproto23@unaffiliated/gproto23)
2020-11-13 09:35:06 +0100 <dminuoso> From experience, and Im saying this as a company that is building out their own data center, cloud rarely offers reasonable advantages.
2020-11-13 09:35:38 +0100todda7(~torstein@ppp-2-84-17-169.home.otenet.gr) (Ping timeout: 272 seconds)
2020-11-13 09:35:42 +0100dbmikus__(~dbmikus@cpe-76-167-86-219.natsow.res.rr.com) (Ping timeout: 260 seconds)
2020-11-13 09:36:13 +0100jedws(~jedws@101.184.175.183) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-11-13 09:36:29 +0100 <dminuoso> You have unpredictable costs, and a cost scaling that favors the cloud provider not you (cloud is only cheaper if you need to scale *down* not *up)
2020-11-13 09:36:39 +0100 <dminuoso> You have semantics that dont fit into traditional tooling
2020-11-13 09:37:22 +0100hnOsmium0001(uid453710@gateway/web/irccloud.com/x-mfqotttnhsysdcxs) (Quit: Connection closed for inactivity)
2020-11-13 09:37:54 +0100 <dminuoso> But really, the cost part is amazing. You first get tricked into thinking "this is cheaper because the cost scales with usage", just to realize this works in both directions later on...
2020-11-13 09:38:04 +0100jedws(~jedws@101.184.175.183)
2020-11-13 09:38:09 +0100 <dminuoso> (And it turns out, bare metal is just cheaper if you need to scale up)
2020-11-13 09:38:51 +0100 <bqv> Excellent
2020-11-13 09:39:03 +0100todda7(~torstein@ppp-2-84-17-169.home.otenet.gr)
2020-11-13 09:39:34 +0100 <bqv> Saved so I can parrot that to my coworkers someday…
2020-11-13 09:40:16 +0100 <dminuoso> Another thing is, most problems don't have a high variability in terms of performance needs
2020-11-13 09:40:46 +0100 <dminuoso> You usually have a narrow corridor in which you fluctuate. For most problems you dont need to randomly scale between "10 users today, 20 million tomorrow
2020-11-13 09:41:09 +0100jedws(~jedws@101.184.175.183) (Client Quit)
2020-11-13 09:41:36 +0100britva(~britva@31-10-157-156.cgn.dynamic.upc.ch)
2020-11-13 09:41:44 +0100 <dminuoso> Also, cloud providers heavily force you into a vendor lockin
2020-11-13 09:42:06 +0100Audentity(~Audentity@4e69b241.skybroadband.com) (Ping timeout: 258 seconds)
2020-11-13 09:42:16 +0100Audentity_(~Audentity@4e69b241.skybroadband.com)
2020-11-13 09:42:45 +0100 <dminuoso> You want their elastic computing resources? You better also use their elastic storage solution. And their elastic backup solutions. Oh and any analystics only works with their tools now
2020-11-13 09:42:56 +0100 <dminuoso> You want to build and deploy? You're forced onto their tooling too
2020-11-13 09:43:33 +0100jedws(~jedws@101.184.175.183)
2020-11-13 09:43:40 +0100 <dminuoso> And that doesn't even begin to discuss the data privacy needs.
2020-11-13 09:44:30 +0100hackagelentil 1.4.1.0 - frugal issue tracker https://hackage.haskell.org/package/lentil-1.4.1.0 (fffaaa)
2020-11-13 09:44:47 +0100britva(~britva@31-10-157-156.cgn.dynamic.upc.ch) (Client Quit)
2020-11-13 09:44:56 +0100 <dminuoso> Fun fact, most of Amazons profits actually comes from AWS, not Marketplace.
2020-11-13 09:45:02 +0100 <dminuoso> They are *that* darn profitable.
2020-11-13 09:45:05 +0100todda7(~torstein@ppp-2-84-17-169.home.otenet.gr) (Ping timeout: 240 seconds)
2020-11-13 09:45:58 +0100todda7(~torstein@ppp-2-84-17-169.home.otenet.gr)
2020-11-13 09:46:31 +0100 <merijn> dminuoso: Well, it also depends on how much fancy stuff you buy into
2020-11-13 09:46:39 +0100britva(~britva@31-10-157-156.cgn.dynamic.upc.ch)
2020-11-13 09:47:03 +0100 <merijn> My brother just got hired at a new place after doing AWS for a long time and his first reaction was "wow...you guys are wasting a lot of money on AWS..."
2020-11-13 09:47:10 +0100jakov(~jakov@95.168.120.30)
2020-11-13 09:47:21 +0100 <merijn> People just don't wanna think about performance engineering
2020-11-13 09:47:38 +0100 <dminuoso> merijn: Sure, AWS can be done cheaply with great care. But amazon counts on you not doing that.
2020-11-13 09:47:53 +0100 <dminuoso> And if you're lazy, bare metal is just cheaper.
2020-11-13 09:47:58 +0100 <merijn> I'm gonna go out and estimate that a solid 80-90% of all workloads can *easily* be handled by a single (beefy) machine
2020-11-13 09:48:03 +0100 <dminuoso> Indeed.
2020-11-13 09:48:09 +0100 <dminuoso> That is the silver bullet.
2020-11-13 09:48:19 +0100 <merijn> "ooh, no, we've got big data"
2020-11-13 09:48:34 +0100 <merijn> Fucking BS...there's like maybe 3 companies that have big data
2020-11-13 09:48:49 +0100 <dminuoso> merijn: Much of the "cloud or kubernetes" problem space addresses problems virtually noone has.
2020-11-13 09:48:59 +0100 <merijn> The rest just have incompetent software engineers and/or are too cheap to bother
2020-11-13 09:49:01 +0100 <dminuoso> Like, kubernetes is an incredibly amazing thing
2020-11-13 09:49:13 +0100 <dminuoso> If your problem is "how do I manage hundreds of services deployed to tens of thousands of nodes"
2020-11-13 09:49:20 +0100 <dminuoso> Problems everybody has in their day jobs, right?
2020-11-13 09:49:21 +0100 <merijn> dminuoso: oh, lemme look up a quote I saw recently
2020-11-13 09:49:22 +0100 <dminuoso> ;)
2020-11-13 09:49:51 +0100kuribas(~user@ptr-25vy0iaeei1zsuhust9.18120a2.ip6.access.telenet.be)
2020-11-13 09:49:56 +0100 <merijn> dminuoso: https://twitter.com/rothgar/status/1317524239218397185
2020-11-13 09:50:16 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Quit: leaving)
2020-11-13 09:50:20 +0100 <dminuoso> Haha that's a good one
2020-11-13 09:50:59 +0100 <dminuoso> Its the same with "high availability"
2020-11-13 09:51:01 +0100 <merijn> All the latest hype "ecosystems" are just pointless for most people
2020-11-13 09:51:15 +0100 <dminuoso> A well maintained single node has better high availability than piss-poor "Im gonna slap HAProxy ontop of this"
2020-11-13 09:51:30 +0100 <merijn> dminuoso: It's like people adopting Hadoop
2020-11-13 09:51:50 +0100jakov(~jakov@95.168.120.30) (Quit: leaving)
2020-11-13 09:51:55 +0100 <merijn> Spoiler: 80% of hadoop solutions I've seen/encountered are *slower* than a single node solution
2020-11-13 09:52:31 +0100 <dminuoso> (not to mention that high availability is a too broad term, what does that even mean? automatic failover? do we need active/active? active/passive? Or maybe we have differences wrt to writing/reading? Or maybe we want load sharing instead?
2020-11-13 09:52:56 +0100 <kuribas> merijn: brilliant
2020-11-13 09:52:58 +0100 <dminuoso> Trying to get the automatic failover right tends to introduce a lot of moving parts
2020-11-13 09:53:19 +0100 <dminuoso> like, if you add haproxy, you again have a single point of failure, and it must detect non-operatoinality
2020-11-13 09:53:39 +0100 <kuribas> merijn: wasn't there a company that rewrote all their scala code using hadoop in pure haskell running on a single machine, and found that everything was faster?
2020-11-13 09:54:11 +0100 <dminuoso> merijn: here we strive for a particular model of load sharing and automatic failover
2020-11-13 09:54:51 +0100 <merijn> dminuoso: Good failover requires robust software, but nobody has that :p
2020-11-13 09:55:07 +0100 <merijn> kuribas: I wouldn't be surprised
2020-11-13 09:55:09 +0100 <dminuoso> if service A needs to talk to service B, we just replicate service B a few times. A then maintains a pool of possible B targets, and implements load sharing by randomizing which B target to talk to
2020-11-13 09:55:21 +0100 <kuribas> merijn: ah, it was this one: https://tech.channable.com/posts/2019-10-04-why-we-decided-to-go-for-the-big-rewrite.html
2020-11-13 09:55:22 +0100 <dminuoso> If B emits failures, we mark them as temporarily dead and remove them from the pool for a while
2020-11-13 09:55:37 +0100 <dminuoso> so the high availability comes from *engineering*
2020-11-13 09:55:42 +0100 <kuribas> merijn: ah, spark, not hadoop
2020-11-13 09:55:44 +0100 <dminuoso> not "add random software ontop of it"
2020-11-13 09:55:58 +0100 <merijn> During my internship we were asked to benchmark Apache Spark (runs on Hadoop) and GraphX (runs on Spark) and found *negative* scaling
2020-11-13 09:56:06 +0100Yumasi(~guillaume@2a01cb09b06b29ea5faf5572fb93fcc2.ipv6.abo.wanadoo.fr)
2020-11-13 09:56:09 +0100 <merijn> i.e. it got slower the more nodes you added to the cluster
2020-11-13 09:56:25 +0100 <dminuoso> merijn: The usual cost of implementing the above, about 50 lines of haskell. Reliable failover with some good load sharing!
2020-11-13 09:56:30 +0100 <merijn> kuribas: Spark runs on hadoop :p
2020-11-13 09:56:43 +0100 <dminuoso> Only requirements: stateless services!
2020-11-13 09:58:52 +0100 <kuribas> I wonder how many problems cannot be solved on a single instance.
2020-11-13 09:58:58 +0100 <kuribas> or at least subdivided easily
2020-11-13 09:59:07 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-11-13 10:00:01 +0100aki_(~aki_@139.28.218.148) ()
2020-11-13 10:00:16 +0100raichoo(~raichoo@213.240.178.58)
2020-11-13 10:00:25 +0100 <merijn> kuribas: One of my favourite graph processing papers was just a bunch of guys going: So we bought a machine with 1 TB RAM and filled it with TBs of high speed SSDs and our graph processing framework outperforms clusters of 100s of servers
2020-11-13 10:00:32 +0100 <dminuoso> kuribas: DNS servers!
2020-11-13 10:00:53 +0100 <dminuoso> If you operate an authoritative name server, it is required to have at least two of them.
2020-11-13 10:01:28 +0100 <merijn> dminuoso: I mean, back in the early 2000s there were people hobbying on MUDs that supported hot copy-over, but major companies in 2020 can't manage to update stuff without downtime >.>
2020-11-13 10:01:30 +0100o1lo01ol1o(~o1lo01ol1@bl8-213-81.dsl.telepac.pt)
2020-11-13 10:02:28 +0100jsmolic(~jakov@95.168.121.30)
2020-11-13 10:02:41 +0100dbmikus__(~dbmikus@cpe-76-167-86-219.natsow.res.rr.com)
2020-11-13 10:02:50 +0100jsmolic(~jakov@95.168.121.30) (Client Quit)
2020-11-13 10:03:05 +0100 <kuribas> merijn: I have been lectured many time how great our lisp platform is, in that you can hot-patch everything in real-time. But when the system goes down, it takes two hours to restart.
2020-11-13 10:03:11 +0100 <kuribas> which happened a few times already
2020-11-13 10:03:13 +0100justsomeguy(~justsomeg@unaffiliated/--/x-3805311) ()
2020-11-13 10:03:39 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 260 seconds)
2020-11-13 10:03:44 +0100 <merijn> Wow...
2020-11-13 10:03:56 +0100 <merijn> 20+ Haskell openings in EU
2020-11-13 10:04:22 +0100bitmagie(~Thunderbi@200116b8068f010041b23aab865e3023.dip.versatel-1u1.de)
2020-11-13 10:04:26 +0100Sanchayan(~Sanchayan@2401:4900:3309:dec3:efb6:6366:cb4:cbe4) (Quit: leaving)
2020-11-13 10:04:34 +0100 <kuribas> maybe I should apply there...
2020-11-13 10:04:41 +0100 <kuribas> I wonder if they allow 4/5
2020-11-13 10:05:00 +0100 <dminuoso> merijn: facebook has hot code replacement with haskell :P
2020-11-13 10:05:21 +0100 <dminuoso> but in general, updating a live system is complicated
2020-11-13 10:05:50 +0100 <dminuoso> Especially if there's multiple parts, because you cant generally execute an update atomically
2020-11-13 10:06:01 +0100 <merijn> kuribas: THat's what negotiation is for ;)
2020-11-13 10:06:16 +0100 <dminuoso> What does 4/5 mean?
2020-11-13 10:06:23 +0100 <kuribas> dminuoso: 4 day workweek
2020-11-13 10:06:25 +0100 <merijn> dminuoso: I assume 32 hour work week
2020-11-13 10:06:30 +0100 <kuribas> yes
2020-11-13 10:06:39 +0100 <dminuoso> ah
2020-11-13 10:07:01 +0100 <merijn> Looks like they're mostly in Scandinavia so, that's probably negotiable
2020-11-13 10:07:13 +0100dbmikus__(~dbmikus@cpe-76-167-86-219.natsow.res.rr.com) (Ping timeout: 256 seconds)
2020-11-13 10:08:50 +0100 <dminuoso> merijn: Oh and regarding our earlier discussion with "single node", my current project involves a "servant api + postgres" server.
2020-11-13 10:09:20 +0100 <dminuoso> Since all but one systems only need read-only, we've decided to duplicate the servant+postgres onto every sever that needs to talk to my API
2020-11-13 10:09:36 +0100 <dminuoso> So there's one master servant+postgres, and everything else receives postgres streaming replicatoin
2020-11-13 10:10:39 +0100pavonia(~user@unaffiliated/siracusa) (Quit: Bye!)
2020-11-13 10:10:41 +0100britva(~britva@31-10-157-156.cgn.dynamic.upc.ch) (Quit: This computer has gone to sleep)
2020-11-13 10:10:56 +0100 <dminuoso> so if any node fails, everyone else can still talk to their local API running on a local database
2020-11-13 10:11:19 +0100 <dminuoso> that way, we remove the network dependency from the service, and have higher resilience of any single node failing
2020-11-13 10:11:52 +0100 <dminuoso> (this service is a mission critical piece in our infrastructure, we just cant take the chance of a singular node going down at the wrong time(
2020-11-13 10:12:27 +0100jsmolic(~jakov@95.168.121.30)
2020-11-13 10:12:44 +0100britva(~britva@2a02:aa13:7240:2980:bc4b:509a:98e6:5bb0)
2020-11-13 10:13:03 +0100invaser(~Thunderbi@31.148.23.125)
2020-11-13 10:13:22 +0100 <kuribas> dminuoso: that's why most of our code is written with lists instead of structs, because structs cannot be updated easily.
2020-11-13 10:13:35 +0100gehmehgeh(~ircuser1@gateway/tor-sasl/gehmehgeh)
2020-11-13 10:13:41 +0100Franciman(~francesco@host-82-56-223-169.retail.telecomitalia.it)
2020-11-13 10:13:55 +0100 <kuribas> dminuoso: but it decreases readability, because (car foo) isn't clear on what car means.
2020-11-13 10:14:45 +0100 <kuribas> I feel it's a lot of effort to solve a problem that is not a problem (hot reloading).
2020-11-13 10:15:12 +0100 <kuribas> with a stateless service we could just restart the app in seconds.
2020-11-13 10:16:50 +0100theoneyouknow(~quassel@95.168.121.30)
2020-11-13 10:16:56 +0100atbd(~atbd@68.166.138.88.rev.sfr.net) (Quit: leaving)
2020-11-13 10:17:02 +0100avdb(~avdb@ip-213-49-124-119.dsl.scarlet.be)
2020-11-13 10:17:23 +0100jakalx(~jakalx@base.jakalx.net) (Ping timeout: 260 seconds)
2020-11-13 10:18:11 +0100z0(~z0@188.251.69.121) (Quit: leaving)
2020-11-13 10:18:41 +0100invaser1(~Thunderbi@46-133-153-250.mobile.vf-ua.net)
2020-11-13 10:21:47 +0100invaser(~Thunderbi@31.148.23.125) (Ping timeout: 260 seconds)
2020-11-13 10:21:47 +0100invaser1invaser
2020-11-13 10:29:44 +0100britva(~britva@2a02:aa13:7240:2980:bc4b:509a:98e6:5bb0) (Quit: This computer has gone to sleep)
2020-11-13 10:31:10 +0100jneira(5127ac76@gateway/web/cgi-irc/kiwiirc.com/ip.81.39.172.118) (Ping timeout: 258 seconds)
2020-11-13 10:31:15 +0100m0rphism(~m0rphism@HSI-KBW-095-208-098-207.hsi5.kabel-badenwuerttemberg.de)
2020-11-13 10:34:18 +0100whatisRT(~whatisRT@2002:5b41:6a33:0:d89f:d10e:927a:2962)
2020-11-13 10:34:28 +0100gproto023(~gproto23@unaffiliated/gproto23)
2020-11-13 10:37:16 +0100akegalj(~akegalj@93-138-135-85.adsl.net.t-com.hr)
2020-11-13 10:37:32 +0100gproto23(~gproto23@unaffiliated/gproto23) (Ping timeout: 260 seconds)
2020-11-13 10:37:55 +0100britva(~britva@31-10-157-156.cgn.dynamic.upc.ch)
2020-11-13 10:39:21 +0100 <tomsmeding> kuribas: no wonder you're longing to program in haskell
2020-11-13 10:39:31 +0100 <kuribas> tomsmeding: yeah :)
2020-11-13 10:42:22 +0100cow-orker(~foobar@pogostick.net) (Remote host closed the connection)
2020-11-13 10:47:25 +0100 <benschza> Are there any Arrows or Yampa gurus online today? :) Solved the purely Haskell related type issue I had yesterday with all of your help, but have another query somebody with Yampa experience could probably advise on.
2020-11-13 10:49:33 +0100ubert(~Thunderbi@p200300ecdf1e535be6b318fffe838f33.dip0.t-ipconnect.de)
2020-11-13 10:50:04 +0100jonathanx(~jonathan@dyn-8-sc.cdg.chalmers.se)
2020-11-13 10:53:34 +0100invaser1(~Thunderbi@31.148.23.125)
2020-11-13 10:54:36 +0100jespada_(~jespada@90.254.245.49) (Ping timeout: 256 seconds)
2020-11-13 10:56:08 +0100coot(~coot@37.30.49.253.nat.umts.dynamic.t-mobile.pl)
2020-11-13 10:57:05 +0100jespada(~jespada@90.254.245.49)
2020-11-13 10:57:19 +0100invaser(~Thunderbi@46-133-153-250.mobile.vf-ua.net) (Ping timeout: 246 seconds)
2020-11-13 10:57:19 +0100invaser1invaser
2020-11-13 11:00:35 +0100akegalj(~akegalj@93-138-135-85.adsl.net.t-com.hr) (Quit: leaving)
2020-11-13 11:00:42 +0100knupfer(~Thunderbi@200116b8249e5f0024181441028bf74f.dip.versatel-1u1.de) (Remote host closed the connection)
2020-11-13 11:00:51 +0100knupfer(~Thunderbi@200116b8249e5f0010c5e6f6682b8ccf.dip.versatel-1u1.de)
2020-11-13 11:00:57 +0100o1lo01ol1o(~o1lo01ol1@bl8-213-81.dsl.telepac.pt) (Remote host closed the connection)
2020-11-13 11:02:01 +0100texasmynsted(~texasmyns@99.96.221.112) (Ping timeout: 264 seconds)
2020-11-13 11:03:02 +0100xff0x(~fox@2001:1a81:53f2:4b00:a4e6:ede5:b1af:2468) (Ping timeout: 264 seconds)
2020-11-13 11:03:39 +0100xff0x(~fox@2001:1a81:53f2:4b00:f0ff:5175:9775:725d)
2020-11-13 11:05:55 +0100 <dminuoso> Why cant I have recursive imports
2020-11-13 11:05:57 +0100 <dminuoso> *sigh*
2020-11-13 11:06:39 +0100 <dminuoso> *circular
2020-11-13 11:06:57 +0100 <merijn> dminuoso: I know, right
2020-11-13 11:07:09 +0100 <merijn> dminuoso: Take time off work to fix it in GHC! :>
2020-11-13 11:07:42 +0100 <dminuoso> merijn: Oh I had a large discussion with Ryan and some other about it a while ago. Let me summarize the feasibility for you:
2020-11-13 11:07:44 +0100 <dminuoso> Yeah uh.. no.
2020-11-13 11:08:23 +0100 <dminuoso> That's one of the things C/C++ at least got right.
2020-11-13 11:08:30 +0100 <dminuoso> Or semi right, anyhow.
2020-11-13 11:08:52 +0100cfricke(~cfricke@unaffiliated/cfricke) (Quit: WeeChat 2.9)
2020-11-13 11:09:25 +0100 <merijn> What? Not having modules or imports at all? :p
2020-11-13 11:09:32 +0100bitmagie(~Thunderbi@200116b8068f010041b23aab865e3023.dip.versatel-1u1.de) (Quit: bitmagie)
2020-11-13 11:10:17 +0100 <dminuoso> Well, separating declaration and definition lets you set up circular things easily
2020-11-13 11:10:41 +0100da39a3ee5e6b4b0d(~da39a3ee5@cm-171-98-91-208.revip7.asianet.co.th) (Ping timeout: 256 seconds)
2020-11-13 11:11:04 +0100 <dminuoso> (the problems are essentially deferred to the linker)
2020-11-13 11:12:03 +0100 <dminuoso> and our linkers *can* handle circular linking
2020-11-13 11:12:12 +0100 <dminuoso> (say via --start-group)
2020-11-13 11:12:41 +0100texasmynsted(~texasmyns@99.96.221.112)
2020-11-13 11:15:27 +0100dmiles(dmiles@c-73-67-179-188.hsd1.wa.comcast.net)
2020-11-13 11:16:52 +0100Ferdirand(~max@2001:4c78:2012:5000::2) (Ping timeout: 260 seconds)
2020-11-13 11:17:02 +0100Ferdirand(~max@2001:4c78:2012:5000::2)
2020-11-13 11:23:54 +0100dustinm(~dustinm@static.38.6.217.95.clients.your-server.de) (Quit: Leaving)
2020-11-13 11:24:10 +0100dustinm(~dustinm@static.38.6.217.95.clients.your-server.de)
2020-11-13 11:28:12 +0100Suigintou(~Suigintou@84.39.117.57)
2020-11-13 11:31:17 +0100ech(~user@gateway/tor-sasl/ech)
2020-11-13 11:34:47 +0100jsmolic(~jakov@95.168.121.30) ()
2020-11-13 11:35:36 +0100theoneyouknow(~quassel@95.168.121.30) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
2020-11-13 11:36:16 +0100Sanchayan(~Sanchayan@2401:4900:3309:dec3:efb6:6366:cb4:cbe4)
2020-11-13 11:37:25 +0100bitmagie(~Thunderbi@200116b8068f010041b23aab865e3023.dip.versatel-1u1.de)
2020-11-13 11:42:16 +0100Stanley00(~stanley00@unaffiliated/stanley00) ()
2020-11-13 11:45:49 +0100avdb(~avdb@ip-213-49-124-119.dsl.scarlet.be) (Quit: WeeChat 2.9)
2020-11-13 11:48:20 +0100gproto023gproto23
2020-11-13 11:51:45 +0100bitmagie(~Thunderbi@200116b8068f010041b23aab865e3023.dip.versatel-1u1.de) (Quit: bitmagie)
2020-11-13 11:52:56 +0100cow-orker(~foobar@pogostick.net)
2020-11-13 11:54:18 +0100theoneyouknow(~quassel@95.168.121.30)
2020-11-13 11:54:24 +0100theoneyouknow(~quassel@95.168.121.30) (Client Quit)
2020-11-13 11:54:40 +0100jsmolic(~quassel@95.168.121.30)
2020-11-13 11:57:32 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2020-11-13 11:57:37 +0100 <royal_screwup21> hello
2020-11-13 11:57:59 +0100acidjnk_new(~acidjnk@p200300d0c718f669e4bb3e68b1aef453.dip0.t-ipconnect.de)
2020-11-13 11:58:00 +0100 <royal_screwup21> I'm trying to understand what snippet does and how to run the runFSM functions: https://ideone.com/iHDBvv
2020-11-13 11:58:08 +0100 <royal_screwup21> could someone give me a quick example?
2020-11-13 11:58:37 +0100whatisRT(~whatisRT@2002:5b41:6a33:0:d89f:d10e:927a:2962) (Ping timeout: 260 seconds)
2020-11-13 12:00:03 +0100DavidEichmann(~david@43.240.198.146.dyn.plus.net)
2020-11-13 12:03:32 +0100dbmikus__(~dbmikus@cpe-76-167-86-219.natsow.res.rr.com)
2020-11-13 12:08:35 +0100 <ski> call it on an `FSM state input output', and a list of successive `input's ?
2020-11-13 12:08:39 +0100dbmikus__(~dbmikus@cpe-76-167-86-219.natsow.res.rr.com) (Ping timeout: 265 seconds)
2020-11-13 12:10:28 +0100 <royal_screwup21> ski ah hmm...could you give me a bare bones example of something I could copy-paste into ghci? :) I'm not really sure I understand what's going on in that snippet (i'm a complete beginner)
2020-11-13 12:10:52 +0100christo(~chris@81.96.113.213)
2020-11-13 12:11:43 +0100 <ski> start by defining an example FSM
2020-11-13 12:12:32 +0100 <ski> exampleFSM :: FSM Int Char Char
2020-11-13 12:12:43 +0100 <ski> exampleFSM = FSM start trans accept out
2020-11-13 12:12:46 +0100 <ski> where
2020-11-13 12:12:54 +0100 <ski> start = ...
2020-11-13 12:13:00 +0100rprije(~rprije@124.148.131.132) (Ping timeout: 265 seconds)
2020-11-13 12:13:10 +0100 <ski> trans state input = ..state..input..
2020-11-13 12:13:18 +0100 <ski> accept = [...]
2020-11-13 12:13:30 +0100 <royal_screwup21> ski thanks, I will try that out :)
2020-11-13 12:13:31 +0100 <ski> out = ...
2020-11-13 12:14:04 +0100 <ski> (seems `runFSM' doesn't use the `out' part .. so you could probably set it to `undefined', so far)
2020-11-13 12:15:15 +0100 <ski> you could use other types (e.g. user-defined) for the state type, and the input and output symbol/token types, if you wanted to
2020-11-13 12:15:27 +0100 <ski> e.g. you could define
2020-11-13 12:16:04 +0100 <ski> data ExampleState = S0 | S1 | S2 | S3 | S4 deriving (Eq,Show)
2020-11-13 12:16:15 +0100 <ski> and then use `ExampleState' in place of `Int'
2020-11-13 12:16:36 +0100 <royal_screwup21> ahh I see, for now I'd prefer using the built in types to keep things simple :)
2020-11-13 12:16:42 +0100skinods
2020-11-13 12:17:36 +0100 <vilpan> merijn: you mentioned 20+ Haskell openings in EU. Is there a dedicated site/aggregator?
2020-11-13 12:18:19 +0100howdoi(uid224@gateway/web/irccloud.com/x-odsmdwwzesbrmhor) (Quit: Connection closed for inactivity)
2020-11-13 12:18:28 +0100jakalx(~jakalx@base.jakalx.net)
2020-11-13 12:19:15 +0100 <royal_screwup21> ski I've got this so far https://ideone.com/pH4Czq do I have to define my custom arbitrary function for trans?
2020-11-13 12:19:23 +0100dbmikus__(~dbmikus@cpe-76-167-86-219.natsow.res.rr.com)
2020-11-13 12:20:00 +0100 <ski> yes
2020-11-13 12:20:24 +0100 <royal_screwup21> hmm
2020-11-13 12:21:08 +0100bitmagie(~Thunderbi@200116b8068f010041b23aab865e3023.dip.versatel-1u1.de)
2020-11-13 12:22:12 +0100alp(~alp@2a01:e0a:58b:4920:3450:37c2:436b:8f86) (Ping timeout: 260 seconds)
2020-11-13 12:22:16 +0100 <ski> `trans' needs to be able to handle the state `0', and any states that can be reached from that state (by using `trans')
2020-11-13 12:22:57 +0100 <Uniaika> (“fuck the state” – trans people)
2020-11-13 12:23:09 +0100 <royal_screwup21> ski I just did trans state input = state + 1
2020-11-13 12:24:17 +0100dbmikus__(~dbmikus@cpe-76-167-86-219.natsow.res.rr.com) (Ping timeout: 260 seconds)
2020-11-13 12:25:11 +0100 <ski> hm, in that case you don't really have *finite* number of states, do you ?
2020-11-13 12:25:25 +0100 <ski> @quote is.no.state
2020-11-13 12:25:25 +0100 <lambdabot> MonadState says: Do not try to change the state; that's impossible. Instead only try to realize the truth: There is no state.
2020-11-13 12:28:04 +0100 <ski> royal_screwup21 : you could cap the state at some number, like `9' e.g.
2020-11-13 12:28:28 +0100 <ski> > iterate (\n -> min 9 (n + 1)) 0
2020-11-13 12:28:31 +0100 <lambdabot> [0,1,2,3,4,5,6,7,8,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9...
2020-11-13 12:31:39 +0100 <royal_screwup21> ski I've found an example like so https://ideone.com/UKDuIo all I want to do is run it against the runFSM function, just to get a feel fro what's happening
2020-11-13 12:32:42 +0100cfricke(~cfricke@unaffiliated/cfricke)
2020-11-13 12:33:37 +0100Yumasi(~guillaume@2a01cb09b06b29ea5faf5572fb93fcc2.ipv6.abo.wanadoo.fr) (Ping timeout: 260 seconds)
2020-11-13 12:34:49 +0100 <ski> royal_screwup21> runFSM isEven [Zero,Zero,One,Zero,One]
2020-11-13 12:35:02 +0100acidjnk_new(~acidjnk@p200300d0c718f669e4bb3e68b1aef453.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2020-11-13 12:35:14 +0100 <ski> (btw, i would write `Moore (const ())')
2020-11-13 12:35:38 +0100jamm_(~jamm@unaffiliated/jamm)
2020-11-13 12:37:45 +0100 <royal_screwup21> ski thanks a lot for the pointers :)
2020-11-13 12:38:02 +0100 <royal_screwup21> I don't quite understand what's going on in this line: `out = Moore $ const ()`
2020-11-13 12:39:44 +0100 <ski> replace it by :
2020-11-13 12:39:50 +0100 <ski> out = Moore (const ())
2020-11-13 12:39:52 +0100 <ski> or
2020-11-13 12:40:03 +0100 <ski> out = Moore (\_ -> ())
2020-11-13 12:40:06 +0100 <ski> or
2020-11-13 12:40:10 +0100 <ski> out = Moore moore
2020-11-13 12:40:10 +0100Sanchayan(~Sanchayan@2401:4900:3309:dec3:efb6:6366:cb4:cbe4) (Quit: leaving)
2020-11-13 12:40:13 +0100 <ski> where
2020-11-13 12:40:19 +0100 <ski> moore _ = ()
2020-11-13 12:40:39 +0100 <ski> royal_screwup21 : do any of those three versions make it clearer ?
2020-11-13 12:40:59 +0100revprez_anzio(~revprez_a@pool-108-49-213-40.bstnma.fios.verizon.net) (Quit: Lost terminal)
2020-11-13 12:41:03 +0100 <royal_screwup21> so it's a function that takes something and returns...()?
2020-11-13 12:41:14 +0100 <royal_screwup21> what is the ()? Is it null in haskell?
2020-11-13 12:41:31 +0100 <royal_screwup21> (hard to google :( )
2020-11-13 12:41:32 +0100 <ski> oh, well, i suppose you'd have to put the `moore _ = ()' part after the `where' above where you define `trans'
2020-11-13 12:41:44 +0100 <ski> there is no "null" in Haskell
2020-11-13 12:41:59 +0100 <ski> `()' is the empty tuple, the zero-tuple
2020-11-13 12:42:17 +0100 <ski> just like `(x,y)' is the two-tuple, the pair, containing `x' and `y' as components
2020-11-13 12:42:21 +0100 <royal_screwup21> ah ok
2020-11-13 12:42:42 +0100 <ski> an `n'-tuple has `n' components. a pair, a two-tuple has two components, a zero-tuple has zero components
2020-11-13 12:43:30 +0100 <royal_screwup21> yup gotcha, thanks :)
2020-11-13 12:43:45 +0100 <royal_screwup21> I don't really get that definiton though:
2020-11-13 12:43:46 +0100 <royal_screwup21> data OutFunc state input output
2020-11-13 12:43:47 +0100 <royal_screwup21> = Moore (state -> output)
2020-11-13 12:43:47 +0100 <royal_screwup21> | Mealy (state -> input -> output)
2020-11-13 12:44:02 +0100 <royal_screwup21> like, how am I meant to instantiate it and then apply it?
2020-11-13 12:44:16 +0100 <ski> (if you have done any linear algebra with matrices and vectors, you could compare the zero-tuple to an "empty" vector with no coefficients in it, being a vector in ⌜ℝ⁰⌝, a zero-dimensional vector space)
2020-11-13 12:44:58 +0100 <royal_screwup21> so I know I can do something like `thing = Moore (\x -> x)`
2020-11-13 12:45:14 +0100 <royal_screwup21> but now how do I actually run it against an input?
2020-11-13 12:46:28 +0100 <ski> the type `()' corresponds more or less to the type `void' in C,C++,Java,C#. also to empty `struct' type (`struct {}', no components), in C,C++,C# (or rather, extensions that allow it). it has a single value (also written `()', in Haskell)
2020-11-13 12:47:03 +0100 <ski> you'd typically use `()' as an output (or part of an output), when you don't have any interesting information to put there
2020-11-13 12:47:07 +0100martinsos(~user@cpe-188-129-116-164.dynamic.amis.hr)
2020-11-13 12:47:18 +0100 <royal_screwup21> yup all that makes sense, it's just an empty tuple
2020-11-13 12:47:18 +0100martinsos(~user@cpe-188-129-116-164.dynamic.amis.hr) ()
2020-11-13 12:47:59 +0100 <ski> `thing = Moore (\x -> x)' would not work, if you have `isEven :: FSM EvenState Binary ()'
2020-11-13 12:48:27 +0100 <royal_screwup21> ski I just created an arbitrary function, not related to isEeven
2020-11-13 12:48:43 +0100 <royal_screwup21> I just want to understand how to run `thing` some input
2020-11-13 12:48:52 +0100 <ski> because then your `state' type is `EvenState' and your `output' type is `()', and your moore function should have type `state -> output', that is `EvenState -> ()', but `\x -> x' does not have this type
2020-11-13 12:49:26 +0100 <ski> <royal_screwup21> but now how do I actually run it against an input?
2020-11-13 12:49:32 +0100 <ski> i already answered this :
2020-11-13 12:49:33 +0100 <ski> <ski> royal_screwup21> runFSM isEven [Zero,Zero,One,Zero,One]
2020-11-13 12:50:21 +0100 <royal_screwup21> but that's the runFSM function. I want to run `thing` which of type `thing :: OutFunc output input output`
2020-11-13 12:51:40 +0100niko(~niko@freenode/staff/ubuntu.member.niko) (Ping timeout: 619 seconds)
2020-11-13 12:52:29 +0100 <ski> oh
2020-11-13 12:53:05 +0100 <ski> well, it could be a `Mealy' transition function
2020-11-13 12:53:33 +0100 <ski> so, i think you'd have to provide both a state and an input
2020-11-13 12:53:50 +0100 <ski> er, s/transition/output/
2020-11-13 12:54:01 +0100carlomagno(~cararell@148.87.23.6)
2020-11-13 12:54:07 +0100 <ski> you could try to define
2020-11-13 12:54:08 +0100alp(~alp@2a01:e0a:58b:4920:ed84:e1ea:bd3d:3a34)
2020-11-13 12:54:22 +0100 <ski> output :: OutFunc state input output -> state -> input -> output
2020-11-13 12:54:42 +0100roconnor(~roconnor@host-184-164-7-99.dyn.295.ca)
2020-11-13 12:54:52 +0100 <royal_screwup21> hmm so I've done this on ghci: thing = Moore (\x -> x). My understand is that I've defined a function (wrapped in a variant) that takes an x and returns back an x
2020-11-13 12:54:55 +0100 <ski> and then you could call `output thing E0 Zero', e.g.
2020-11-13 12:55:07 +0100 <royal_screwup21> basically, how do I run that function?
2020-11-13 12:55:12 +0100ubert(~Thunderbi@p200300ecdf1e535be6b318fffe838f33.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2020-11-13 12:55:33 +0100 <ski> you need to pattern-match, to extract the function from the variant alternative, from the data constructor
2020-11-13 12:55:41 +0100 <royal_screwup21> ahh ok
2020-11-13 12:55:57 +0100 <ski> but in general, it could be either a `Moore' or a `Mealy', and you should most probably cover both cases
2020-11-13 12:55:57 +0100 <royal_screwup21> that makes sense, thanks!
2020-11-13 12:56:12 +0100 <ski> and defining a function like `output' may help with this
2020-11-13 12:56:16 +0100 <royal_screwup21> I'm not really sure what the point is of having it in the fsm...
2020-11-13 12:56:24 +0100carlomagno1(~cararell@148.87.23.13) (Ping timeout: 272 seconds)
2020-11-13 12:56:32 +0100 <royal_screwup21> the runFSM function doesn't seem to use it
2020-11-13 12:56:46 +0100 <royal_screwup21> is it just there to confuse the beginner?
2020-11-13 12:57:10 +0100 <ski> well, according to the definitions at <https://en.wikipedia.org/wiki/Mealy_machine> and <https://en.wikipedia.org/wiki/Moore_machine>, those two kinds of finite state machines both contain output functions, not just transition functions
2020-11-13 12:57:27 +0100Suigintou(~Suigintou@84.39.117.57) (Remote host closed the connection)
2020-11-13 12:57:36 +0100 <ski> i dunno why `runFSM' is as it is
2020-11-13 12:57:40 +0100 <ski> one could have imagined
2020-11-13 12:58:22 +0100 <ski> runFSM :: Eq state => FSM state input output -> [input] -> ([output],state,Bool)
2020-11-13 12:58:43 +0100 <royal_screwup21> that makes a lot more sense yup
2020-11-13 12:58:59 +0100 <dminuoso> What does the Bool track?
2020-11-13 12:59:18 +0100 <ski> so that it doesn't only give you the resulting `state' (with a `Bool'ean for telling whether it's an accepting state) after feeding in the list of `input's, but so that you'd also get a corresponding list of `output's
2020-11-13 12:59:31 +0100 <ski> dminuoso : whether the resulting state is an accepting state
2020-11-13 13:00:03 +0100 <dminuoso> Ah
2020-11-13 13:04:38 +0100dennisb(~dennisb@89-160-106-195.cust.bredband2.com)
2020-11-13 13:06:04 +0100hekkaidekapus(~tchouri@gateway/tor-sasl/hekkaidekapus) (Quit: hekkaidekapus)
2020-11-13 13:07:59 +0100hekkaidekapus(~tchouri@gateway/tor-sasl/hekkaidekapus)
2020-11-13 13:10:47 +0100dmiles(dmiles@c-73-67-179-188.hsd1.wa.comcast.net) (Ping timeout: 260 seconds)
2020-11-13 13:11:06 +0100cfricke(~cfricke@unaffiliated/cfricke) (Quit: WeeChat 2.9)
2020-11-13 13:12:57 +0100shatriff(~vitaliish@176.52.219.10) (Remote host closed the connection)
2020-11-13 13:13:12 +0100shatriff(~vitaliish@176.52.219.10)
2020-11-13 13:13:39 +0100invaser(~Thunderbi@31.148.23.125) (Quit: invaser)
2020-11-13 13:14:09 +0100 <royal_screwup21> I'm looking at a dataype like so: `data BinState = S0 | S1 | S2 deriving (Enum, Eq, Show)`
2020-11-13 13:14:29 +0100 <royal_screwup21> is the name completely random, or is there logic to it? binary implies 2 but there's 3 variants
2020-11-13 13:16:56 +0100jakob_(~textual@p200300f49f162200e1f79f04dc8b19b7.dip0.t-ipconnect.de) (Quit: My Laptop has gone to sleep. ZZZzzz…)
2020-11-13 13:17:02 +0100 <dminuoso> royal_screwup21: Bin could also stand for bin.
2020-11-13 13:17:11 +0100 <dminuoso> Or its an abbreviation
2020-11-13 13:17:17 +0100 <royal_screwup21> bin as in bin-packing?
2020-11-13 13:17:21 +0100 <Uniaika> royal_screwup21: what's the context?
2020-11-13 13:17:44 +0100dmiles(dmiles@c-73-67-179-188.hsd1.wa.comcast.net)
2020-11-13 13:17:49 +0100 <dminuoso> royal_screwup21: bin as in bucket
2020-11-13 13:17:54 +0100 <dminuoso> trash bin
2020-11-13 13:18:32 +0100 <ski> what's the corresponding FSM ?
2020-11-13 13:20:13 +0100 <bqv> is it ocaml that has that curious semantic of needing to pass () to a member function to call it
2020-11-13 13:20:15 +0100dmiles(dmiles@c-73-67-179-188.hsd1.wa.comcast.net) (Read error: Connection reset by peer)
2020-11-13 13:20:25 +0100 <royal_screwup21> the correspoding fsm is this: https://ideone.com/fb90Ir
2020-11-13 13:20:44 +0100 <ski> bqv : not that i recall
2020-11-13 13:20:58 +0100 <bqv> what language am i thinking of then...
2020-11-13 13:21:36 +0100perrier-jouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
2020-11-13 13:21:36 +0100dmiles(dmiles@c-73-67-179-188.hsd1.wa.comcast.net)
2020-11-13 13:22:29 +0100da39a3ee5e6b4b0d(~da39a3ee5@cm-171-98-91-208.revip7.asianet.co.th)
2020-11-13 13:24:52 +0100kish`(~oracle@unaffiliated/oracle)
2020-11-13 13:24:58 +0100 <ski> bqv : hm, maybe F# ?
2020-11-13 13:25:09 +0100 <bqv> oh
2020-11-13 13:25:11 +0100 <bqv> yes
2020-11-13 13:25:13 +0100 <bqv> that's the one
2020-11-13 13:25:57 +0100 <bqv> i suppose that's just a "feature" of working under the CLR
2020-11-13 13:26:44 +0100 <kuribas> that's true for any language with side effects
2020-11-13 13:26:52 +0100 <ski> kuribas : no
2020-11-13 13:26:59 +0100 <dminuoso> https://github.com/cdepillabout/pretty-simple/blob/master/Setup.hs
2020-11-13 13:27:15 +0100 <dminuoso> Gaah! For that bit of code, this is dragging Cabal into the setup for dependencies..
2020-11-13 13:27:22 +0100 <kuribas> how would you otherwise know when to exectute the side-effects? For example "f ()" vs "f"
2020-11-13 13:27:47 +0100 <ski> see e.g. <https://caml.inria.fr/pub/docs/manual-ocaml/objectexamples.html>. the body of a parameterless method is not evaluated until it is called
2020-11-13 13:28:25 +0100 <ski> a method call is a different construct than an ordinary function call
2020-11-13 13:29:47 +0100 <ski> royal_screwup21 : hm, ok. doesn't really seem to be related to binary something, apart from accepting bits as inputs
2020-11-13 13:30:12 +0100dmiles(dmiles@c-73-67-179-188.hsd1.wa.comcast.net) (Ping timeout: 260 seconds)
2020-11-13 13:31:11 +0100 <bqv> ocaml is a fascinating language. why isn't it more used?
2020-11-13 13:31:37 +0100bqv. o O ( same reason haskell isn't )
2020-11-13 13:32:19 +0100dmiles(dmiles@c-73-67-179-188.hsd1.wa.comcast.net)
2020-11-13 13:32:21 +0100 <ski> OCaml has one of the more interesting object type, and class, system
2020-11-13 13:32:52 +0100Deide(~Deide@217.155.19.23)
2020-11-13 13:33:05 +0100 <ski> it can handle "binary methods" and "cloning methods", that is a method which accepts, or returns, a method of the same type as the object on which it's invoked on
2020-11-13 13:33:49 +0100 <ski> when these are used, the object type that results from a subclass need not be a subtype of the type that results from the corresponding superclass
2020-11-13 13:33:57 +0100jchia_(~jchia@45.32.62.73)
2020-11-13 13:35:37 +0100Zetagon(~leo@c151-177-52-233.bredband.comhem.se)
2020-11-13 13:35:58 +0100ambiso9(~ambiso@209.182.239.205) (Quit: Ping timeout (120 seconds))
2020-11-13 13:35:59 +0100 <bqv> it is used less widely than even haskell, though
2020-11-13 13:36:08 +0100 <bqv> are there shortcomings?
2020-11-13 13:36:14 +0100 <bqv> or is it just nerd tax
2020-11-13 13:36:17 +0100ambiso9(~ambiso@209.182.239.205)
2020-11-13 13:36:41 +0100 <Uniaika> tooling
2020-11-13 13:36:52 +0100 <ski> (so if class `C' has a method `m' of type `Self -> bool', then an object instantiated from this class will have `C -> bool' as type of this method. then, if `D' is a subclass of `C', then the type of the method `m' for an object instantiated from this class will be `D -> bool')
2020-11-13 13:38:01 +0100ashbreeze(~mark@72-161-252-32.dyn.centurytel.net) (Ping timeout: 264 seconds)
2020-11-13 13:38:35 +0100 <bqv> Uniaika: howso?
2020-11-13 13:39:39 +0100jchia_(~jchia@45.32.62.73) (Remote host closed the connection)
2020-11-13 13:40:17 +0100jamm_(~jamm@unaffiliated/jamm) (Remote host closed the connection)
2020-11-13 13:40:30 +0100jchia_(~jchia@45.32.62.73)
2020-11-13 13:40:54 +0100acarrico(~acarrico@dhcp-68-142-39-249.greenmountainaccess.net)
2020-11-13 13:41:54 +0100jchia_(~jchia@45.32.62.73) (Remote host closed the connection)
2020-11-13 13:42:16 +0100jamm_(~jamm@unaffiliated/jamm)
2020-11-13 13:42:51 +0100jchia_(~jchia@45.32.62.73)
2020-11-13 13:44:34 +0100jchia_(~jchia@45.32.62.73) (Remote host closed the connection)
2020-11-13 13:45:28 +0100jchia_(~jchia@58.32.37.146)
2020-11-13 13:46:35 +0100nbloomf(~nbloomf@2600:1700:ad14:3020:4085:c5d6:bbdf:5f4e)
2020-11-13 13:46:40 +0100jamm_(~jamm@unaffiliated/jamm) (Ping timeout: 258 seconds)
2020-11-13 13:49:46 +0100p8m(p8m@gateway/vpn/protonvpn/p8m) (Ping timeout: 256 seconds)
2020-11-13 13:50:10 +0100p8m(p8m@gateway/vpn/protonvpn/p8m)
2020-11-13 13:54:12 +0100AlterEgo-(~ladew@124-198-158-163.dynamic.caiway.nl)
2020-11-13 13:54:46 +0100 <ggole> The OO parts of OCaml are neat, but they don't see much use in practice
2020-11-13 13:59:58 +0100 <kuribas> how does it compare to F# ?
2020-11-13 14:00:10 +0100 <kuribas> in F# it's useful because .NET uses OO
2020-11-13 14:00:54 +0100 <carbolymer> I have a dozen of executables in my stack project, can I tell stack to *not* build them and not copy them, during stack build --test ? installing of executables takes longer than execution of tests....
2020-11-13 14:05:12 +0100 <maerwald> use `stack test`?
2020-11-13 14:05:24 +0100nbloomf(~nbloomf@2600:1700:ad14:3020:4085:c5d6:bbdf:5f4e) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-11-13 14:05:26 +0100solonarv(~solonarv@astrasbourg-653-1-156-155.w90-6.abo.wanadoo.fr)
2020-11-13 14:06:42 +0100nbloomf(~nbloomf@76.217.43.73)
2020-11-13 14:07:15 +0100 <ggole> They're pretty different, not that I've ever seriously used F#.
2020-11-13 14:08:06 +0100LKoen(~LKoen@9.253.88.92.rev.sfr.net)
2020-11-13 14:08:19 +0100 <carbolymer> maerwald, stack test is the same as stack build --test
2020-11-13 14:08:33 +0100 <maerwald> that's a bummer
2020-11-13 14:09:26 +0100_ashbreeze_(~mark@72-161-252-32.dyn.centurytel.net)
2020-11-13 14:10:18 +0100christo(~chris@81.96.113.213) (Remote host closed the connection)
2020-11-13 14:11:00 +0100jakalx(~jakalx@base.jakalx.net) (Ping timeout: 260 seconds)
2020-11-13 14:11:41 +0100nbloomf(~nbloomf@76.217.43.73) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-11-13 14:13:25 +0100jchia1(~jchia@58.32.71.83) (Ping timeout: 264 seconds)
2020-11-13 14:14:40 +0100jchia(~jchia@45.32.62.73)
2020-11-13 14:15:12 +0100 <bqv> ggole: i don't think anyone has
2020-11-13 14:15:12 +0100christo(~chris@81.96.113.213)
2020-11-13 14:15:51 +0100Yumasi(~guillaume@2a01cb09b06b29ea5faf5572fb93fcc2.ipv6.abo.wanadoo.fr)
2020-11-13 14:16:51 +0100jchia(~jchia@45.32.62.73) (Remote host closed the connection)
2020-11-13 14:17:37 +0100_ashbreeze_(~mark@72-161-252-32.dyn.centurytel.net) (Ping timeout: 264 seconds)
2020-11-13 14:17:53 +0100jchia(~jchia@45.32.62.73)
2020-11-13 14:18:07 +0100 <carbolymer> even `stack build --test project:test:project-lib` builds and copies executables god knows why
2020-11-13 14:18:34 +0100solonarv(~solonarv@astrasbourg-653-1-156-155.w90-6.abo.wanadoo.fr) (Quit: Lost terminal)
2020-11-13 14:18:47 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2020-11-13 14:18:53 +0100geekosaur(82659a09@host154-009.vpn.uakron.edu)
2020-11-13 14:19:54 +0100jchia(~jchia@45.32.62.73) (Remote host closed the connection)
2020-11-13 14:20:11 +0100dbmikus__(~dbmikus@cpe-76-167-86-219.natsow.res.rr.com)
2020-11-13 14:20:20 +0100jchia(~jchia@45.32.62.73)
2020-11-13 14:21:21 +0100jchia(~jchia@45.32.62.73) (Remote host closed the connection)
2020-11-13 14:22:11 +0100jchia(~jchia@45.32.62.73)
2020-11-13 14:23:12 +0100jchia(~jchia@45.32.62.73) (Remote host closed the connection)
2020-11-13 14:23:48 +0100jchia(~jchia@45.32.62.73)
2020-11-13 14:24:45 +0100dbmikus__(~dbmikus@cpe-76-167-86-219.natsow.res.rr.com) (Ping timeout: 240 seconds)
2020-11-13 14:25:37 +0100Yumasi(~guillaume@2a01cb09b06b29ea5faf5572fb93fcc2.ipv6.abo.wanadoo.fr) (Ping timeout: 260 seconds)
2020-11-13 14:26:19 +0100solonarv(~solonarv@astrasbourg-653-1-156-155.w90-6.abo.wanadoo.fr)
2020-11-13 14:27:30 +0100neiluj(~jco@43.245.204.77.rev.sfr.net)
2020-11-13 14:27:30 +0100neiluj(~jco@43.245.204.77.rev.sfr.net) (Changing host)
2020-11-13 14:27:30 +0100neiluj(~jco@unaffiliated/neiluj)
2020-11-13 14:29:16 +0100jchia(~jchia@45.32.62.73) (Remote host closed the connection)
2020-11-13 14:29:25 +0100 <royal_screwup21> what's the time complexity of adding an element to the a list, like `x: my_list`?
2020-11-13 14:29:47 +0100jchia(~jchia@58.32.36.109)
2020-11-13 14:29:58 +0100 <royal_screwup21> for context, I am wondering what's the complexity of `before` and `after` functions here https://ideone.com/jqgyfk
2020-11-13 14:29:58 +0100 <bqv> cons is O(1)
2020-11-13 14:30:20 +0100 <bqv> anything else needs a scan
2020-11-13 14:32:36 +0100gproto023(~gproto23@unaffiliated/gproto23)
2020-11-13 14:32:52 +0100bitmagie(~Thunderbi@200116b8068f010041b23aab865e3023.dip.versatel-1u1.de) (Quit: bitmagie)
2020-11-13 14:33:10 +0100bitmagie(~Thunderbi@200116b8068f010041b23aab865e3023.dip.versatel-1u1.de)
2020-11-13 14:35:23 +0100bitmagie(~Thunderbi@200116b8068f010041b23aab865e3023.dip.versatel-1u1.de) (Client Quit)
2020-11-13 14:35:32 +0100gproto23(~gproto23@unaffiliated/gproto23) (Ping timeout: 260 seconds)
2020-11-13 14:36:03 +0100dbmikus__(~dbmikus@cpe-76-167-86-219.natsow.res.rr.com)
2020-11-13 14:37:50 +0100 <royal_screwup21> hmm
2020-11-13 14:37:52 +0100bitmagie(~Thunderbi@200116b8068f010041b23aab865e3023.dip.versatel-1u1.de)
2020-11-13 14:38:45 +0100 <royal_screwup21> I'm looking at an impl of ziplist, which I'm told has parallels to a doubly linked list. I understand lists in haskell, and I know what doubly linked lists are, but I fail to see what the impl has to do with a dll
2020-11-13 14:38:49 +0100nbloomf(~nbloomf@2600:1700:ad14:3020:4085:c5d6:bbdf:5f4e)
2020-11-13 14:38:50 +0100Whome(0c986a83@12.152.106.131)
2020-11-13 14:38:53 +0100 <royal_screwup21> https://ideone.com/baFQja
2020-11-13 14:39:27 +0100cfricke(~cfricke@unaffiliated/cfricke)
2020-11-13 14:40:47 +0100dbmikus__(~dbmikus@cpe-76-167-86-219.natsow.res.rr.com) (Ping timeout: 260 seconds)
2020-11-13 14:41:26 +0100jakalx(~jakalx@base.jakalx.net)
2020-11-13 14:42:58 +0100 <lyxia> you can move both forward and backwards in constant time
2020-11-13 14:45:37 +0100 <royal_screwup21> if I have a list [1,2,3] and I want to append 4 to it - how can I do this?
2020-11-13 14:45:44 +0100 <royal_screwup21> I want the output to be [1,2,3,4]
2020-11-13 14:45:52 +0100DavidEichmann(~david@43.240.198.146.dyn.plus.net) (Ping timeout: 256 seconds)
2020-11-13 14:46:11 +0100 <xerox_> @hoogle [a] -> [a] -> [a]
2020-11-13 14:46:12 +0100 <lambdabot> Prelude (++) :: [a] -> [a] -> [a]
2020-11-13 14:46:12 +0100 <lambdabot> Data.List (++) :: [a] -> [a] -> [a]
2020-11-13 14:46:12 +0100 <lambdabot> GHC.Base (++) :: [a] -> [a] -> [a]
2020-11-13 14:46:31 +0100hackagephonetic-languages-examples 0.5.0.0 - A generalization of the uniqueness-periods-vector-examples functionality. https://hackage.haskell.org/package/phonetic-languages-examples-0.5.0.0 (OleksandrZhabenko)
2020-11-13 14:46:39 +0100 <royal_screwup21> hmm is there a O(1) way to do it
2020-11-13 14:47:02 +0100DavidEichmann(~david@62.110.198.146.dyn.plus.net)
2020-11-13 14:47:08 +0100 <xerox_> unfortunately, in general no
2020-11-13 14:48:53 +0100ClaudiusMaximus(~claude@unaffiliated/claudiusmaximus) (Quit: ->)
2020-11-13 14:48:54 +0100hiroaki(~hiroaki@ip4d168e73.dynamic.kabel-deutschland.de)
2020-11-13 14:49:24 +0100 <dminuoso> royal_screwup21: btw, thats better called a zipper than a ziplist
2020-11-13 14:49:41 +0100jchia__(~jchia@58.32.37.146) (Quit: Leaving.)
2020-11-13 14:49:42 +0100 <royal_screwup21> dminuoso why do you say that?
2020-11-13 14:49:44 +0100 <dminuoso> We have a newtype ZipList which provides an alternate Alternative instance for [], but it's unrelated to your thing
2020-11-13 14:50:01 +0100 <dminuoso> (or zipper list, list zipper, those are fine names)
2020-11-13 14:50:37 +0100 <dminuoso> (The general idea is usually called zippers and extends well to trees as well as lists)
2020-11-13 14:50:54 +0100nbloomf(~nbloomf@2600:1700:ad14:3020:4085:c5d6:bbdf:5f4e) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-11-13 14:50:57 +0100 <dminuoso> in case of lists the implementation is just trivial and obvious
2020-11-13 14:51:58 +0100Beetstra1(~Beetstra@178.162.212.214)
2020-11-13 14:54:56 +0100Zetagon(~leo@c151-177-52-233.bredband.comhem.se) (Ping timeout: 256 seconds)
2020-11-13 14:55:20 +0100fendor_(~fendor@178.165.131.115.wireless.dyn.drei.com)
2020-11-13 14:55:58 +0100britva(~britva@31-10-157-156.cgn.dynamic.upc.ch) (Quit: This computer has gone to sleep)
2020-11-13 14:57:29 +0100luke(~luke@bitnomial/staff/luke)
2020-11-13 14:57:58 +0100fendor(~fendor@178.165.129.175.wireless.dyn.drei.com) (Ping timeout: 260 seconds)
2020-11-13 14:59:23 +0100Qui_Sum1(~Qui_Sum@178.162.212.214)
2020-11-13 14:59:59 +0100 <ski> royal_screwup21 : i would not make that `Show' instance for `ZipElem'
2020-11-13 15:00:43 +0100 <royal_screwup21> ski why not?
2020-11-13 15:01:33 +0100urodna(~urodna@unaffiliated/urodna)
2020-11-13 15:03:20 +0100 <ski> because it doesn't output valid Haskell expressions of type `ZipElem a'. because it doesn't handle precedence correctly. because that `show' can't be pre-inverse of a `read', because `read' is supposed to ignore extra wrapping brackets
2020-11-13 15:03:48 +0100 <ski> `Show' is not intended for pretty-printing
2020-11-13 15:04:42 +0100luke(~luke@bitnomial/staff/luke) (Quit: sleep)
2020-11-13 15:04:45 +0100machinedgod(~machinedg@207.253.244.210)
2020-11-13 15:04:52 +0100 <ski> > read "(((False)))" :: Bool
2020-11-13 15:04:54 +0100 <lambdabot> False
2020-11-13 15:05:37 +0100st8less(~st8less@2603:a060:11fd:0:48e3:54d2:40b:a73f)
2020-11-13 15:05:49 +0100 <ski> if you define
2020-11-13 15:06:07 +0100 <ski> toZipList :: [a] -> a -> [a] -> ZipList a
2020-11-13 15:06:29 +0100 <ski> toZipList ls x rs = ZL (reverse ls) x rs
2020-11-13 15:06:44 +0100 <ski> then you could do
2020-11-13 15:06:53 +0100 <ski> instance Show a => Show (ZipList a)
2020-11-13 15:06:55 +0100 <ski> where
2020-11-13 15:07:16 +0100 <ski> showsPrec p (ZL ls x rs) = showsPrec (p > 10)
2020-11-13 15:07:34 +0100 <ski> $ showString "toZipList "
2020-11-13 15:07:48 +0100 <ski> . showsPrec 11 (reverse ls)
2020-11-13 15:07:53 +0100 <ski> . showsChar ' '
2020-11-13 15:07:59 +0100 <ski> . showsPrec 11 x
2020-11-13 15:08:00 +0100 <ski> . showsChar ' '
2020-11-13 15:08:05 +0100 <ski> . showsPrec 11 rs
2020-11-13 15:08:56 +0100FreeBirdLjj(~freebirdl@101.228.42.108)
2020-11-13 15:09:44 +0100 <ski> and then `show (insertBefore 0 (insertAfter 1 (insertBefore 2 (newZipList 3))))' would evaluate to `"toZipList [2] 0 [1,3]"'
2020-11-13 15:10:26 +0100 <royal_screwup21> ski hmm yeah you're right
2020-11-13 15:10:36 +0100 <royal_screwup21> it seems really weird
2020-11-13 15:10:41 +0100 <royal_screwup21> the currrent impl
2020-11-13 15:11:50 +0100 <ski> that `Show' instance would generate mostly readable output, getting relatively close to what your pretty-printing intended, while still generating a valid Haskell expression
2020-11-13 15:12:17 +0100 <royal_screwup21> ski I'm not sure I understand what's wrong with wrt to precedence
2020-11-13 15:12:26 +0100 <ski> of course, you can do your own pretty-printing as well (or instead), if you like. but please don't put that pretty-printing into `Show'
2020-11-13 15:12:45 +0100 <royal_screwup21> so if the ziplist is [1, 2] 3 [5]. Then when I run "before", I should get "1"
2020-11-13 15:12:58 +0100gproto0023(~gproto23@unaffiliated/gproto23)
2020-11-13 15:14:52 +0100 <royal_screwup21> that is, will it turn into [2] 1 [3,5]
2020-11-13 15:15:25 +0100 <ski> `Show' instances are intended to work together with each other. if you declare an instance for a type, then it will automatically be combined with other existing instances, like for `Maybe',`[]',`Ratio',&c. whenever the user asks to show an input of a type combining your data type with these other types .. you have to consider how such interactions can look like. if you deviate from generating Haskell
2020-11-13 15:15:32 +0100 <ski> expressions in `Show', then you will get weird mixes of Haskell and non-Haskell syntax, as a result of such combinations
2020-11-13 15:15:42 +0100gproto023(~gproto23@unaffiliated/gproto23) (Ping timeout: 265 seconds)
2020-11-13 15:16:02 +0100 <ski> royal_screwup21 : "so if the ziplist is [1, 2] 3 [5]" -- what do you mean by this ? do you mean `ZL [1,2] 3 [5]', or do you mean `ZL [2,1] 3 [5]' ?
2020-11-13 15:16:24 +0100 <ski> (it's not at all clear which you intended)
2020-11-13 15:16:29 +0100 <royal_screwup21> the former
2020-11-13 15:17:17 +0100 <ski> so, yes, `before (toZipList [2,1] 3 [5])' will return `toZipList [2] 1 [3,5]'
2020-11-13 15:17:38 +0100bitmapper(uid464869@gateway/web/irccloud.com/x-pozlvwyabhwikscl) (Quit: Connection closed for inactivity)
2020-11-13 15:17:45 +0100 <ski> iow, `before (ZL [1,2] 3 5)' will return `ZL [2] 1 [3,5]' -- this is the same thing
2020-11-13 15:20:19 +0100 <royal_screwup21> ski the core idea behind this impl is that preprending an element to a list is inexpensive, whereas append is expensive -- am i thinking correctly?
2020-11-13 15:21:41 +0100blankhart(~blankhart@pool-100-35-219-3.nwrknj.fios.verizon.net)
2020-11-13 15:23:05 +0100Qui_Sum1(~Qui_Sum@178.162.212.214) ()
2020-11-13 15:25:01 +0100 <ski> royal_screwup21 : yes, that's correct
2020-11-13 15:25:06 +0100 <royal_screwup21> ok cool :)
2020-11-13 15:25:15 +0100 <royal_screwup21> thanks for much for all your help - much appreciated
2020-11-13 15:25:55 +0100bitmagie(~Thunderbi@200116b8068f010041b23aab865e3023.dip.versatel-1u1.de) (Quit: bitmagie)
2020-11-13 15:26:52 +0100 <ski> "I'm not sure I understand what's wrong with wrt to precedence" -- hmm, not the best example, but consider `NotFocus (-3) % Focus 2', of type `Ratio (ZipElem Int)'. if you `show' this, you would presumably get `" -3 % (2)"', where that negation isn't protected by brackets, while precedence indicates that it ought to be
2020-11-13 15:27:26 +0100bitmagie(~Thunderbi@200116b8068f010041b23aab865e3023.dip.versatel-1u1.de)
2020-11-13 15:27:59 +0100 <ski> i'm sure you can construct better (that is, worse) examples, but i was trying to think of one that's in the base library
2020-11-13 15:28:52 +0100neiluj(~jco@unaffiliated/neiluj) (Ping timeout: 256 seconds)
2020-11-13 15:29:06 +0100 <merijn> ski: eh...did you use ZipList for a list zipper? That seems needlessly confusing, given the existing ZipList...
2020-11-13 15:29:07 +0100bitmagie(~Thunderbi@200116b8068f010041b23aab865e3023.dip.versatel-1u1.de) (Client Quit)
2020-11-13 15:29:18 +0100 <ski> the point is that `Show' is supposed to protect parts (like your `x' in `NotFocus x' and `Focus x') with wrapping brackets, if required to force the intended reading, due to precedence of operators
2020-11-13 15:29:37 +0100 <geekosaur> merijn, royal_screwup21 did and was already told about the collision
2020-11-13 15:29:41 +0100 <merijn> ah
2020-11-13 15:29:49 +0100 <ski> merijn : "<dminuoso> royal_screwup21: btw, thats better called a zipper than a ziplist","<dminuoso> We have a newtype ZipList which provides an alternate Alternative instance for [], but it's unrelated to your thing"
2020-11-13 15:31:43 +0100 <ski> royal_screwup21 : usually, except in very simple cases, when you're writing a `Show' instance manually, you should define `showsPrec', not `show'
2020-11-13 15:33:17 +0100 <ski> you can define `show' if each possible value is "atomic", never requires wrapping brackets. e.g. `data Bool = False | True' has only "constant data constructors", none of them are parameterized, they don't take arguments, don't have components
2020-11-13 15:36:04 +0100 <ski> royal_screwup21 : oh, and sorry. `showsChar' above should be `showChar'
2020-11-13 15:36:28 +0100jamm_(~jamm@unaffiliated/jamm)
2020-11-13 15:36:31 +0100 <royal_screwup21> :)
2020-11-13 15:38:18 +0100 <ski> sometimes it makes sense to not expose the implementation (in your case the `ZL' data constructor) in the `Show' instance. but then, imho, one ought to output an expression in terms of the exported operations, the public API, of the module (assuming the data type itself is exported)
2020-11-13 15:38:32 +0100darjeeling_(~darjeelin@122.245.210.116) (Ping timeout: 260 seconds)
2020-11-13 15:38:52 +0100britva(~britva@2a02:aa13:7240:2980:bc4b:509a:98e6:5bb0)
2020-11-13 15:38:58 +0100geekosaur(82659a09@host154-009.vpn.uakron.edu) (Remote host closed the connection)
2020-11-13 15:39:07 +0100renzhi(~renzhi@2607:fa49:655f:e600::28da)
2020-11-13 15:39:11 +0100 <ski> @let tabulate :: Ix i => (i,i) -> (i -> e) -> Array i e; tabulate ix f = listArray ix [f i | i <- range ix]
2020-11-13 15:39:12 +0100 <lambdabot> Defined.
2020-11-13 15:39:40 +0100 <ski> > tabulate (0,7) (\i -> i^2 + 1)
2020-11-13 15:39:41 +0100 <lambdabot> error:
2020-11-13 15:39:41 +0100 <lambdabot> Ambiguous occurrence ‘tabulate’
2020-11-13 15:39:41 +0100 <lambdabot> It could refer to
2020-11-13 15:39:46 +0100 <ski> > L.tabulate (0,7) (\i -> i^2 + 1)
2020-11-13 15:39:48 +0100 <lambdabot> array (0,7) [(0,1),(1,2),(2,5),(3,10),(4,17),(5,26),(6,37),(7,50)]
2020-11-13 15:40:51 +0100 <ski> that's an example. `Array' is an abstract data type, so its `Show' instance displays an array value in terms of the `array' operation for constructing them (note that i called `listArray', now `array', above. `listArray' is another operation for constructing them)
2020-11-13 15:40:55 +0100 <ski> @type array
2020-11-13 15:40:57 +0100 <lambdabot> Ix i => (i, i) -> [(i, e)] -> Array i e
2020-11-13 15:40:59 +0100 <ski> @type listArray
2020-11-13 15:41:00 +0100 <lambdabot> Ix i => (i, i) -> [e] -> Array i e
2020-11-13 15:42:02 +0100 <ski> (`listArray' assumes the elements come in a standard order. `array' doesn't assume that, you can list index-element pairs in any order)
2020-11-13 15:42:13 +0100christo(~chris@81.96.113.213) (Remote host closed the connection)
2020-11-13 15:45:19 +0100neiluj(~jco@43.245.204.77.rev.sfr.net)
2020-11-13 15:47:05 +0100jakob_(~textual@p200300f49f16220038ce51646f783e30.dip0.t-ipconnect.de)
2020-11-13 15:47:53 +0100jakalx(~jakalx@base.jakalx.net) ("Disconnected: closed")
2020-11-13 15:49:40 +0100jakalx(~jakalx@base.jakalx.net)
2020-11-13 15:50:08 +0100Amras(~Amras@unaffiliated/amras0000)
2020-11-13 15:51:05 +0100darjeeling_(~darjeelin@122.245.208.31)
2020-11-13 15:51:24 +0100christo(~chris@81.96.113.213)
2020-11-13 15:51:56 +0100Zetagon(~leo@c151-177-52-233.bredband.comhem.se)
2020-11-13 15:52:06 +0100manjaro-user(~manjaro-u@109.77.71.163)
2020-11-13 15:53:47 +0100motte(~weechat@unaffiliated/motte)
2020-11-13 15:54:22 +0100jakalx(~jakalx@base.jakalx.net) (Ping timeout: 256 seconds)
2020-11-13 15:54:36 +0100gproto023(~gproto23@unaffiliated/gproto23)
2020-11-13 15:56:29 +0100avdb(~avdb@ip-213-49-124-119.dsl.scarlet.be)
2020-11-13 15:57:13 +0100gproto0023(~gproto23@unaffiliated/gproto23) (Ping timeout: 264 seconds)
2020-11-13 16:00:42 +0100 <motte> hi, how can i find all possible combinations of a nested list? the result should contain only one element from a given index
2020-11-13 16:00:54 +0100lucasb(uid333435@gateway/web/irccloud.com/x-oypdzthrgbpglsbk)
2020-11-13 16:01:09 +0100 <motte> e.g. [[1,2], [4,5]] should turn into [[1,2], [1,5], [2,4], [2,5]]
2020-11-13 16:01:54 +0100 <merijn> > traverse sequence [[1,2], [4,5]]
2020-11-13 16:01:56 +0100 <lambdabot> error:
2020-11-13 16:01:56 +0100 <lambdabot> • Ambiguous type variables ‘f0’,
2020-11-13 16:01:56 +0100 <lambdabot> ‘a0’ arising from a use of ‘show_M31303913069...
2020-11-13 16:01:59 +0100 <merijn> aww
2020-11-13 16:02:26 +0100xff0x(~fox@2001:1a81:53f2:4b00:f0ff:5175:9775:725d) (Ping timeout: 264 seconds)
2020-11-13 16:03:52 +0100 <xerox_> > sequence [[1,2],[4,5]]
2020-11-13 16:03:54 +0100 <lambdabot> [[1,4],[1,5],[2,4],[2,5]]
2020-11-13 16:04:05 +0100 <merijn> rats, it *is* just sequence?
2020-11-13 16:04:18 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-11-13 16:04:35 +0100 <motte> oh i messed it up, the result should be [[1,4], [1,5], [2,4], [2,5]]
2020-11-13 16:04:40 +0100 <xerox_> ding!
2020-11-13 16:05:24 +0100 <merijn> xerox_: I thought that first, but thought the type didn't match >.>
2020-11-13 16:06:25 +0100acarrico(~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) (Ping timeout: 240 seconds)
2020-11-13 16:07:24 +0100FreeBirdLjj(~freebirdl@101.228.42.108) ()
2020-11-13 16:07:33 +0100conal(~conal@66.115.157.159)
2020-11-13 16:08:28 +0100 <motte> huh it really is sequence
2020-11-13 16:08:56 +0100bitmapper(uid464869@gateway/web/irccloud.com/x-vehblmdtqrevxqug)
2020-11-13 16:09:13 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 264 seconds)
2020-11-13 16:09:22 +0100 <bqv> well what d'you know, it really is just sequence
2020-11-13 16:09:27 +0100mtothem(~mtothem@h-213-180.A392.priv.bahnhof.se)
2020-11-13 16:09:29 +0100kritzefitz(~kritzefit@fw-front.credativ.com) (Remote host closed the connection)
2020-11-13 16:09:44 +0100jsmolic(~quassel@95.168.121.30) ("https://quassel-irc.org - Chat comfortably. Anywhere.")
2020-11-13 16:09:54 +0100bifunc2(bifunc2@gateway/vpn/protonvpn/bifunc2)
2020-11-13 16:10:02 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
2020-11-13 16:11:02 +0100 <bifunc2> What's a good way to find a bytestring b between two bytestrings b1, b2? (b1 < b < b2)
2020-11-13 16:11:14 +0100 <bifunc2> is there any library for this?
2020-11-13 16:11:21 +0100 <bifunc2> (of course, Nothing, if none exists)
2020-11-13 16:11:55 +0100kritzefitz(~kritzefit@212.86.56.80)
2020-11-13 16:13:12 +0100 <Uniaika> bifunc2: like, a substring?
2020-11-13 16:13:15 +0100alp(~alp@2a01:e0a:58b:4920:ed84:e1ea:bd3d:3a34) (Ping timeout: 272 seconds)
2020-11-13 16:13:33 +0100 <ski> find common prefix, then take middle point of next two bytes (assuming the first one has at least one more) ?
2020-11-13 16:13:47 +0100borne(~fritjof@200116b86489f5004fbf5cd6c83663b1.dip.versatel-1u1.de) (Ping timeout: 260 seconds)
2020-11-13 16:13:53 +0100 <hekkaidekapus> > traverse permutations [[1, 2], [4, 5]] -- motte: <== Not what you asked about but may come handy.
2020-11-13 16:13:55 +0100 <lambdabot> [[[1,2],[4,5]],[[1,2],[5,4]],[[2,1],[4,5]],[[2,1],[5,4]]]
2020-11-13 16:14:23 +0100Sgeo(~Sgeo@ool-18b982ad.dyn.optonline.net)
2020-11-13 16:14:25 +0100acarrico(~acarrico@dhcp-68-142-39-249.greenmountainaccess.net)
2020-11-13 16:14:27 +0100xff0x(~fox@2001:1a81:53f2:4b00:f0ff:5175:9775:725d)
2020-11-13 16:17:02 +0100jakob_(~textual@p200300f49f16220038ce51646f783e30.dip0.t-ipconnect.de) (Quit: My Laptop has gone to sleep. ZZZzzz…)
2020-11-13 16:18:07 +0100cr3(~cr3@192-222-143-195.qc.cable.ebox.net)
2020-11-13 16:18:12 +0100 <motte> hekkaidekapus: haha that's exactly what i was currently working on
2020-11-13 16:18:39 +0100 <hekkaidekapus> oh, sorry for the spoiler!
2020-11-13 16:19:26 +0100 <motte> hekkaidekapus: it's good, thanks
2020-11-13 16:19:49 +0100polyphem(~p0lyph3m@2a02:810d:640:776c:76d7:55f6:f85b:c889)
2020-11-13 16:20:10 +0100berberman_(~berberman@unaffiliated/berberman) (Quit: ZNC 1.7.5 - https://znc.in)
2020-11-13 16:20:32 +0100revprez_anzio(~revprez_a@pool-108-49-213-40.bstnma.fios.verizon.net)
2020-11-13 16:20:41 +0100berberman(~berberman@unaffiliated/berberman)
2020-11-13 16:22:33 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-11-13 16:26:55 +0100elfets(~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de)
2020-11-13 16:27:01 +0100 <motte> so now i'm trying to run length $ traverse permutations on [[a]], where the length of the outer list is 9 and the length of the inner list is 4 and this very quickly takes away all of my ram
2020-11-13 16:27:50 +0100LKoen(~LKoen@9.253.88.92.rev.sfr.net) (Remote host closed the connection)
2020-11-13 16:28:05 +0100 <pjb> motte: permutations is exponential…
2020-11-13 16:28:44 +0100 <motte> pjb: yes, i realize that, but couldn't haskell discard the already calculated part of the list?
2020-11-13 16:28:48 +0100texasmyn_(~texasmyns@185.229.59.75)
2020-11-13 16:29:31 +0100texasmyn_texasmynsted_
2020-11-13 16:29:52 +0100 <pjb> I don't know what prevents it to do that.
2020-11-13 16:30:03 +0100da39a3ee5e6b4b0d(~da39a3ee5@cm-171-98-91-208.revip7.asianet.co.th) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-11-13 16:30:20 +0100texasmynsted(~texasmyns@99.96.221.112) (Killed (cherryh.freenode.net (Nickname regained by services)))
2020-11-13 16:30:20 +0100texasmynsted_texasmynsted
2020-11-13 16:30:37 +0100texasmynsted_(~texasmyns@99.96.221.112)
2020-11-13 16:31:25 +0100 <pjb> motte: but you can compute it directly as the factorial of the length of the original lists.
2020-11-13 16:31:37 +0100reallymemorable(~quassel@2601:180:8300:8fd0:c5df:6e57:bcff:c1bb)
2020-11-13 16:31:56 +0100Gurkenglas(~Gurkengla@unaffiliated/gurkenglas)
2020-11-13 16:32:11 +0100da39a3ee5e6b4b0d(~da39a3ee5@cm-171-98-91-208.revip7.asianet.co.th)
2020-11-13 16:32:52 +0100 <merijn> motte: Where are you running that? i.e. in ghci?
2020-11-13 16:33:10 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
2020-11-13 16:33:35 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2020-11-13 16:34:01 +0100 <bifunc2> ski thank you this is the key
2020-11-13 16:34:34 +0100 <motte> merijn: yes, ghci
2020-11-13 16:34:34 +0100comerijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-11-13 16:35:31 +0100 <motte> merijn: seems to be the same when i compile it
2020-11-13 16:36:21 +0100cole-h(~cole-h@c-73-48-197-220.hsd1.ca.comcast.net)
2020-11-13 16:36:37 +0100 <motte> although i'm very surprised to see that it uses all of my 8 threads..?
2020-11-13 16:36:45 +0100gproto023(~gproto23@unaffiliated/gproto23) (Ping timeout: 240 seconds)
2020-11-13 16:36:54 +0100dbmikus__(~dbmikus@cpe-76-167-86-219.natsow.res.rr.com)
2020-11-13 16:37:19 +0100nbloomf(~nbloomf@76.217.43.73)
2020-11-13 16:37:19 +0100Tuplanolla(~Tuplanoll@91-159-68-239.elisa-laajakaista.fi)
2020-11-13 16:37:25 +0100nbloomf(~nbloomf@76.217.43.73) (Client Quit)
2020-11-13 16:37:29 +0100da39a3ee5e6b4b0d(~da39a3ee5@cm-171-98-91-208.revip7.asianet.co.th) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-11-13 16:37:39 +0100 <comerijn> Did you compile with -O2?
2020-11-13 16:37:50 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds)
2020-11-13 16:39:20 +0100acarrico(~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) (Ping timeout: 272 seconds)
2020-11-13 16:39:59 +0100 <motte> comerijn: yes
2020-11-13 16:40:29 +0100cfricke(~cfricke@unaffiliated/cfricke) (Ping timeout: 272 seconds)
2020-11-13 16:40:56 +0100 <comerijn> Ok, then no clue without seeing code :)
2020-11-13 16:40:58 +0100knupfer(~Thunderbi@200116b8249e5f0010c5e6f6682b8ccf.dip.versatel-1u1.de) (Quit: knupfer)
2020-11-13 16:41:32 +0100dbmikus__(~dbmikus@cpe-76-167-86-219.natsow.res.rr.com) (Ping timeout: 260 seconds)
2020-11-13 16:41:37 +0100veverak(~squirrel@ip-89-102-98-161.net.upcbroadband.cz) (Quit: WeeChat 2.3)
2020-11-13 16:41:37 +0100neiluj(~jco@43.245.204.77.rev.sfr.net) (Ping timeout: 256 seconds)
2020-11-13 16:41:44 +0100wtw(~wtw@unaffiliated/wtw)
2020-11-13 16:42:03 +0100ech(~user@gateway/tor-sasl/ech) (Ping timeout: 240 seconds)
2020-11-13 16:42:42 +0100 <hekkaidekapus> motte, comerijn: with `print $ length $ traverse permutations [[(1 :: Int) .. 4], [5 .. 13]]`
2020-11-13 16:42:56 +0100 <hekkaidekapus> I get:
2020-11-13 16:42:59 +0100 <hekkaidekapus> 8709120
2020-11-13 16:43:09 +0100 <hekkaidekapus> 0.81user 0.04system 0:00.86elapsed 99%CPU (0avgtext+0avgdata 155892maxresident)k
2020-11-13 16:43:24 +0100neiluj(~jco@91-167-203-101.subs.proxad.net)
2020-11-13 16:43:31 +0100Whome(0c986a83@12.152.106.131) ()
2020-11-13 16:45:08 +0100 <dsal> dminuoso: re: big data: http://dustin.sallings.org/2014/02/04/bigdata.html
2020-11-13 16:45:45 +0100bidabong(uid272474@gateway/web/irccloud.com/x-plghuymdrvvlqwlm)
2020-11-13 16:49:53 +0100baidobz(2d56c95b@45.86.201.91)
2020-11-13 16:50:42 +0100neiluj(~jco@91-167-203-101.subs.proxad.net) (Quit: leaving)
2020-11-13 16:52:42 +0100dbmikus__(~dbmikus@cpe-76-167-86-219.natsow.res.rr.com)
2020-11-13 16:54:09 +0100texasmyn_(~texasmyns@185.229.59.3)
2020-11-13 16:54:10 +0100ech(~user@gateway/tor-sasl/ech)
2020-11-13 16:55:09 +0100texasmy__(~texasmyns@2600:6c40:700:5fb3:e17e:7475:52b9:a754)
2020-11-13 16:55:54 +0100fendor__(~fendor@178.115.130.14.wireless.dyn.drei.com)
2020-11-13 16:56:23 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
2020-11-13 16:56:26 +0100texasmy__texasmynsted__
2020-11-13 16:56:29 +0100squirrel1(~squirrel@ip-89-102-98-161.net.upcbroadband.cz)
2020-11-13 16:56:49 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2020-11-13 16:56:58 +0100texasmynsted(~texasmyns@185.229.59.75) (Killed (moon.freenode.net (Nickname regained by services)))
2020-11-13 16:56:58 +0100texasmynsted__texasmynsted
2020-11-13 16:57:01 +0100squirrel1veverak
2020-11-13 16:57:16 +0100dbmikus__(~dbmikus@cpe-76-167-86-219.natsow.res.rr.com) (Ping timeout: 256 seconds)
2020-11-13 16:58:41 +0100liaar0402(258f376a@37.143.55.106)
2020-11-13 16:58:58 +0100texasmyn_(~texasmyns@185.229.59.3) (Ping timeout: 272 seconds)
2020-11-13 16:58:58 +0100fendor_(~fendor@178.165.131.115.wireless.dyn.drei.com) (Ping timeout: 272 seconds)
2020-11-13 16:59:17 +0100liaar0402(258f376a@37.143.55.106) (Remote host closed the connection)
2020-11-13 16:59:43 +0100 <baidobz> Hi everybody, I'm trying to run an IO action, that returns Either, for each element in a list and would like to stop evaluation as soon as one is Left. I tried using fmap and sequence but the later actions are still evaluated and the calculation does not short-circuit. Is the issue that bind in IO is strict?
2020-11-13 17:00:08 +0100benjamingr__(uid23465@gateway/web/irccloud.com/x-dkapzzdvbagqfebh)
2020-11-13 17:04:52 +0100 <tomsmeding> baidobz: can you share the relevant piece of code? It may indeed be that your issue is that bind in IO is strict
2020-11-13 17:05:28 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-11-13 17:07:05 +0100xerox_(~xerox@unaffiliated/xerox) (Ping timeout: 240 seconds)
2020-11-13 17:07:11 +0100bifunc2(bifunc2@gateway/vpn/protonvpn/bifunc2) (Quit: -)
2020-11-13 17:08:53 +0100 <ski> baidobz : fwiw, in general, instead of `sequence (fmap f xs)', you can do `mapM f xs'. but from what you're saying, it sounds like you want to use `ExceptT'. but let's see the code ?
2020-11-13 17:09:39 +0100 <tomsmeding> I suspect that the relevant code looks like 'sequence <$> mapM action list'
2020-11-13 17:09:42 +0100 <mtothem> How can i import a local haskell module to my xmonad.hs?
2020-11-13 17:09:48 +0100 <ski> (something like `runExceptT (mapM (ExceptT . f) xs)')
2020-11-13 17:09:59 +0100Ariakenom(~Ariakenom@h-82-196-111-82.NA.cust.bahnhof.se)
2020-11-13 17:10:07 +0100 <ski> mtothem : `import MyModule' ?
2020-11-13 17:10:15 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 265 seconds)
2020-11-13 17:10:57 +0100quinn(~quinn@c-73-223-224-163.hsd1.ca.comcast.net) (Ping timeout: 244 seconds)
2020-11-13 17:11:07 +0100 <ski> tomsmeding : hm, sounds likely
2020-11-13 17:11:51 +0100 <mtothem> I've been trying to do that. but it doesn't work for some reason. it does in other projects. so maybe xmonad does something differently i'm thinking
2020-11-13 17:12:02 +0100 <ski> what is the other file named ?
2020-11-13 17:12:19 +0100 <mtothem> `colorscheme.hs` ski
2020-11-13 17:12:36 +0100 <ski> try naming it `ColorScheme.hs', and do `import ColorScheme' ?
2020-11-13 17:12:41 +0100Sanchayan(~Sanchayan@171.61.102.109)
2020-11-13 17:13:04 +0100 <tomsmeding> (the initial letter of a module name must be a capital letter, the "S" doesn't matter)
2020-11-13 17:13:27 +0100Sanchayan(~Sanchayan@171.61.102.109) (Read error: Connection reset by peer)
2020-11-13 17:13:30 +0100 <mtothem> `Could not find module ColorScheme`
2020-11-13 17:13:31 +0100 <ski> (unless it's the main module of an executable)
2020-11-13 17:13:49 +0100 <tomsmeding> (or you're using a case-insensitive file system, like is the default on macOS)
2020-11-13 17:13:51 +0100 <ski> you renamed the file ?
2020-11-13 17:13:54 +0100 <ski> yea
2020-11-13 17:14:09 +0100berberman(~berberman@unaffiliated/berberman) (Quit: ZNC 1.7.5 - https://znc.in)
2020-11-13 17:14:38 +0100berberman(~berberman@unaffiliated/berberman)
2020-11-13 17:16:26 +0100quinn(~quinn@c-73-223-224-163.hsd1.ca.comcast.net)
2020-11-13 17:17:11 +0100 <baidobz> tomsmeding: ski: This is what I'm playing around with now: https://pastebin.com/A2MhUdC8
2020-11-13 17:18:06 +0100 <tomsmeding> baidobz: yes try ski's suggestion with ExceptT
2020-11-13 17:18:07 +0100 <baidobz> Basically I would like to short-circuit the processing of the list elements in IO upon any error
2020-11-13 17:18:29 +0100skilow fours tomsmeding
2020-11-13 17:18:29 +0100 <tomsmeding> (import Control.Monad.Except from the 'mtl' package)
2020-11-13 17:18:56 +0100 <ski> baidobz : but first replace `sequence (map f xs)' by `mapM f xs'
2020-11-13 17:19:16 +0100 <tomsmeding> (not necessary, it means the same, but it's neater)
2020-11-13 17:19:20 +0100 <baidobz> Great I'll try that, thank you
2020-11-13 17:21:02 +0100 <ski> baidobz : you could change the signature to `runFoo :: Text -> ExceptT MyErr IO Text', if you like to
2020-11-13 17:21:52 +0100zaquest(~notzaques@5.128.210.178) (Quit: Leaving)
2020-11-13 17:22:12 +0100 <ski> (if it's likely that you'd want to call `runFoo' in a context where you'd want to continue doing some possibly-aborting execution (assuming the `runFoo' invocation didn't abort), then i'd do that)
2020-11-13 17:22:59 +0100 <baidobz> Indeed that worked! How come it does not work with a plain map and sequence? Where does the short-circuiting logic come from?
2020-11-13 17:23:04 +0100christo(~chris@81.96.113.213) (Remote host closed the connection)
2020-11-13 17:23:39 +0100 <tomsmeding> ExceptT explicitly stops executing remaining monadic actions if a Left occurs
2020-11-13 17:23:43 +0100 <baidobz> The bind of MonadError?
2020-11-13 17:24:04 +0100 <tomsmeding> normally, the mapM (or in your original version, the 'sequence') would first evaluate all monadic actions, and only when those are complete return the resulting list
2020-11-13 17:24:05 +0100 <tomsmeding> yup
2020-11-13 17:24:06 +0100zaquest(~notzaques@5.128.210.178)
2020-11-13 17:24:10 +0100zaquest(~notzaques@5.128.210.178) (Read error: Connection reset by peer)
2020-11-13 17:24:30 +0100 <ski> it comes from using the `ExceptT' version of `sequence'/`mapM', which ultimately comes from the `Applicative' / `Monad' instance for `ExceptT' being short-circuiting
2020-11-13 17:25:15 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-11-13 17:26:30 +0100 <ski> (`traverse' (or `sequenceA') is a version of `mapM' (or `sequence') which only requires `Applicative', not `Monad'. back when `sequence'/`mapM' was defined, `Applicative' didn't exist yet, so now you have both those, and `sequenceA'/`traverse')
2020-11-13 17:27:15 +0100 <ski> baidobz : `MonadError' doesn't come to play here
2020-11-13 17:27:46 +0100gproto023(~gproto23@unaffiliated/gproto23)
2020-11-13 17:28:45 +0100LKoen(~LKoen@9.253.88.92.rev.sfr.net)
2020-11-13 17:29:43 +0100gproto0023(~gproto23@unaffiliated/gproto23)
2020-11-13 17:30:38 +0100kav(~kari@dsl-hkibng42-56733f-225.dhcp.inet.fi) (Ping timeout: 264 seconds)
2020-11-13 17:30:40 +0100zaquest(~notzaques@5.128.210.178)
2020-11-13 17:31:01 +0100Martinsos(~user@cpe-188-129-116-164.dynamic.amis.hr)
2020-11-13 17:31:26 +0100 <baidobz> Super interesting. I'm looking at the Haddock and mtl's sources to try and find the relevant definition in the code now
2020-11-13 17:32:05 +0100gproto023(~gproto23@unaffiliated/gproto23) (Ping timeout: 240 seconds)
2020-11-13 17:32:18 +0100 <tomsmeding> https://hackage.haskell.org/package/transformers-0.5.6.2/docs/src/Control.Monad.Trans.Except.html#…
2020-11-13 17:32:25 +0100 <baidobz> I guess it's in transformers
2020-11-13 17:32:37 +0100 <baidobz> Yes! Thanks :)
2020-11-13 17:33:20 +0100 <tomsmeding> it's refreshing how readable basic definitions like these are, the short-circuiting is actually evident in the definition of >>= (which is only 5 lines)
2020-11-13 17:33:36 +0100 <tomsmeding> contrast with e.g. C++ standard libraries...
2020-11-13 17:34:10 +0100 <baidobz> Indeed it's very simple and clear
2020-11-13 17:34:48 +0100 <baidobz> I used to do lots of template meta-programming in C++ and I don't miss it
2020-11-13 17:35:01 +0100Chi1thangoo(~Chi1thang@87.112.60.168)
2020-11-13 17:35:17 +0100conal(~conal@66.115.157.159) (Quit: Computer has gone to sleep.)
2020-11-13 17:35:49 +0100 <baidobz> Thanks a lot for your quick help!
2020-11-13 17:36:12 +0100Martinsos_(~Martinsos@cpe-188-129-116-164.dynamic.amis.hr)
2020-11-13 17:36:55 +0100 <baidobz> Can I also ask: is there a situation (different Monad?) where my naive approach with sequence would work out similarly due to laziness or does sequence/mapM always evaluate all monadic actions?
2020-11-13 17:37:28 +0100 <comerijn> baidobz: The ordering of effects is independent of laziness
2020-11-13 17:37:34 +0100 <ski> it always executes all the actions (performing all the effects)
2020-11-13 17:37:59 +0100 <comerijn> baidobz: The Monad/Applicative instance of, say, IO are always in sequential order
2020-11-13 17:38:01 +0100 <ski> but yes, non-strictness is a separate thing
2020-11-13 17:38:48 +0100 <solonarv> well, no. sequence [System.Exit.exit, putStrLn "hello"] will not output hello to the terminal, for a counterexample
2020-11-13 17:38:49 +0100Martinsos_(~Martinsos@cpe-188-129-116-164.dynamic.amis.hr) (Client Quit)
2020-11-13 17:38:59 +0100 <comerijn> baidobz: So yes, sequence and mapM guarantee that all the actions are done by the time the sequence/mapM is done
2020-11-13 17:39:03 +0100 <comerijn> solonarv: >.>
2020-11-13 17:39:15 +0100Martinsos(~user@cpe-188-129-116-164.dynamic.amis.hr) ("ERC (IRC client for Emacs 27.1)")
2020-11-13 17:39:21 +0100 <comerijn> solonarv: That's not a contradiction, anyway
2020-11-13 17:39:31 +0100hackagepolysemy-methodology-composite 0.1.0.0 - Functions for using polysemy-methodology with composite. https://hackage.haskell.org/package/polysemy-methodology-composite-0.1.0.0 (locallycompact)
2020-11-13 17:39:47 +0100 <comerijn> solonarv: exit happens in sequential order with the rest :p
2020-11-13 17:39:49 +0100 <solonarv> depending on which Monad instance is being used, the later ones may or may not be exexucted, or evaluated
2020-11-13 17:40:03 +0100 <solonarv> (however the *order* does not depend on which instance is in play)
2020-11-13 17:40:29 +0100 <ski> oh, good example. i suppose one should say that each action is executed, provided all the previous ones terminated normally
2020-11-13 17:40:44 +0100nbloomf(~nbloomf@2600:1700:ad14:3020:b423:9089:de01:217e)
2020-11-13 17:41:01 +0100hackagepolysemy-methodology-composite 0.1.1.0 - Functions for using polysemy-methodology with composite. https://hackage.haskell.org/package/polysemy-methodology-composite-0.1.1.0 (locallycompact)
2020-11-13 17:41:04 +0100xerox_(~xerox@unaffiliated/xerox)
2020-11-13 17:41:14 +0100 <solonarv> they're executed in order, but an action might say "exit immediately, nothing after me gets executed" or even "everything after me happens twice" or "everything after me happens on another thread"
2020-11-13 17:41:32 +0100 <ski> (obviously when executing `do foo; undefined; bar', `bar' will not be executed, at least in general)
2020-11-13 17:42:00 +0100 <ski> yes, which is exactly what `ExceptT' does (the "nothing after me gets executed" part)
2020-11-13 17:42:31 +0100hackagepolysemy-methodology-composite 0.1.2.0 - Functions for using polysemy-methodology with composite. https://hackage.haskell.org/package/polysemy-methodology-composite-0.1.2.0 (locallycompact)
2020-11-13 17:42:41 +0100 <solonarv> yep; the other two can be accomplished by Cont / ContT, and probably also by a number of other monads
2020-11-13 17:42:56 +0100 <ski> yep (i see how one could accomplish it)
2020-11-13 17:43:25 +0100avdb(~avdb@ip-213-49-124-119.dsl.scarlet.be) (Ping timeout: 240 seconds)
2020-11-13 17:43:28 +0100 <baidobz> Great points, that makes sense
2020-11-13 17:43:31 +0100hackagecabal-file 0.1.1 - Cabal file access https://hackage.haskell.org/package/cabal-file-0.1.1 (JensPetersen)
2020-11-13 17:45:46 +0100Martinsos(~user@cpe-188-129-116-164.dynamic.amis.hr)
2020-11-13 17:46:06 +0100Martinsos(~user@cpe-188-129-116-164.dynamic.amis.hr) ()
2020-11-13 17:46:25 +0100 <motte> hekkaidekapus: >[[(1 :: Int) .. 4], [5 .. 13]]
2020-11-13 17:46:29 +0100 <ski> in `do n <- [1 .. 9]; d <- [2 .. n-1]; guard (n `mod` d == 0); return (n,d)', for some choice of `n' (namely `1'), everything after `d <- [2 .. n-1]' will be executed zero times (iow, we abort that choice of `n'), and for some other choices of `n', what's after will be executed several times
2020-11-13 17:47:31 +0100 <ski> (and then, similarly, for different choices of `d', what comes after the `guard' invocation may be executed once or not at all)
2020-11-13 17:47:43 +0100 <ski> > do n <- [1 .. 9]; d <- [2 .. n-1]; guard (n `mod` d == 0); return (n,d)
2020-11-13 17:47:45 +0100 <lambdabot> [(4,2),(6,2),(6,3),(8,2),(8,4),(9,3)]
2020-11-13 17:48:09 +0100 <motte> hekkaidekapus: the list i was talking about was more like replicate 9 [1..4]
2020-11-13 17:48:26 +0100 <ski> (it computes composite numbers less than ten, paired with possible proper divisors)
2020-11-13 17:49:45 +0100 <motte> hekkaidekapus: so main = print $ length $ traverse permutations $ replicate 9 [1..4] , which quickly eats all my ram, even with -O2
2020-11-13 17:50:09 +0100knupfer(~Thunderbi@200116b8249e5f0024d540c2b38d8e9b.dip.versatel-1u1.de)
2020-11-13 17:50:32 +0100Saukk(~Saukk@2001:998:f9:2914:1c59:9bb5:b94c:4)
2020-11-13 17:51:13 +0100sh9(~sh9@softbank060116136158.bbtec.net) (Ping timeout: 260 seconds)
2020-11-13 17:53:38 +0100jamm_(~jamm@unaffiliated/jamm) (Remote host closed the connection)
2020-11-13 17:55:50 +0100kav(~kari@dsl-hkibng42-56733f-225.dhcp.inet.fi)
2020-11-13 17:58:11 +0100alp(~alp@2a01:e0a:58b:4920:888e:a635:2469:ca8a)
2020-11-13 17:58:50 +0100Saukk(~Saukk@2001:998:f9:2914:1c59:9bb5:b94c:4) (Remote host closed the connection)
2020-11-13 17:58:55 +0100christo(~chris@81.96.113.213)
2020-11-13 17:59:16 +0100raichoo(~raichoo@213.240.178.58) (Quit: Lost terminal)
2020-11-13 17:59:42 +0100comerijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
2020-11-13 17:59:46 +0100Martinsos_(uid473568@gateway/web/irccloud.com/x-ofadbekegfkzcelc)
2020-11-13 18:00:42 +0100dbmikus__(~dbmikus@cpe-76-167-86-219.natsow.res.rr.com)
2020-11-13 18:02:00 +0100hackagebeam-automigrate 0.1.0.0 - DB migration library for beam, targeting Postgres. https://hackage.haskell.org/package/beam-automigrate-0.1.0.0 (abrar)
2020-11-13 18:03:30 +0100christo(~chris@81.96.113.213) (Ping timeout: 258 seconds)
2020-11-13 18:04:06 +0100hnOsmium0001(uid453710@gateway/web/irccloud.com/x-tcyoqfqkxtjwjlrv)
2020-11-13 18:07:31 +0100LKoen_(~LKoen@9.253.88.92.rev.sfr.net)
2020-11-13 18:07:49 +0100Martinsos(~user@cpe-188-129-116-164.dynamic.amis.hr)
2020-11-13 18:08:24 +0100jonathanx(~jonathan@dyn-8-sc.cdg.chalmers.se) (Remote host closed the connection)
2020-11-13 18:09:19 +0100gproto023(~gproto23@unaffiliated/gproto23)
2020-11-13 18:09:26 +0100 <Martinsos> join /nickserv
2020-11-13 18:10:21 +0100gproto0023(~gproto23@unaffiliated/gproto23) (Read error: Connection reset by peer)
2020-11-13 18:10:25 +0100LKoen(~LKoen@9.253.88.92.rev.sfr.net) (Ping timeout: 264 seconds)
2020-11-13 18:11:44 +0100gproto0023(~gproto23@unaffiliated/gproto23)
2020-11-13 18:12:37 +0100Martinsos(~user@cpe-188-129-116-164.dynamic.amis.hr) (Quit: ERC (IRC client for Emacs 27.1))
2020-11-13 18:12:37 +0100Martinsos_Martinsos
2020-11-13 18:13:56 +0100Martinso`(~user@cpe-188-129-116-164.dynamic.amis.hr)
2020-11-13 18:14:05 +0100gproto023(~gproto23@unaffiliated/gproto23) (Ping timeout: 240 seconds)
2020-11-13 18:14:40 +0100Martinso`Martinsos`
2020-11-13 18:14:52 +0100conal(~conal@66.115.157.159)
2020-11-13 18:14:59 +0100Martinsos`(~user@cpe-188-129-116-164.dynamic.amis.hr) (Client Quit)
2020-11-13 18:15:39 +0100geekosaur(82659a09@host154-009.vpn.uakron.edu)
2020-11-13 18:15:46 +0100Martinsos(uid473568@gateway/web/irccloud.com/x-ofadbekegfkzcelc) ()
2020-11-13 18:16:17 +0100chele(~chele@ip5b416ea2.dynamic.kabel-deutschland.de) (Remote host closed the connection)
2020-11-13 18:17:19 +0100crdrost(~crdrost@c-98-207-102-156.hsd1.ca.comcast.net)
2020-11-13 18:17:48 +0100gproto023(~gproto23@unaffiliated/gproto23)
2020-11-13 18:20:23 +0100conal_(~conal@64.71.133.70)
2020-11-13 18:20:23 +0100electricityZZZZ(~electrici@108-216-157-17.lightspeed.sntcca.sbcglobal.net)
2020-11-13 18:20:23 +0100gproto0023(~gproto23@unaffiliated/gproto23) (Ping timeout: 260 seconds)
2020-11-13 18:20:58 +0100conal(~conal@66.115.157.159) (Ping timeout: 260 seconds)
2020-11-13 18:27:31 +0100texasmynsted(~texasmyns@2600:6c40:700:5fb3:e17e:7475:52b9:a754) ()
2020-11-13 18:28:14 +0100Martinsos(~user@cpe-188-129-116-164.dynamic.amis.hr)
2020-11-13 18:28:23 +0100Martinsos(~user@cpe-188-129-116-164.dynamic.amis.hr) ("ERC (IRC client for Emacs 27.1)")
2020-11-13 18:29:28 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-11-13 18:34:27 +0100cfricke(~cfricke@unaffiliated/cfricke)
2020-11-13 18:35:01 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds)
2020-11-13 18:35:03 +0100acarrico(~acarrico@dhcp-68-142-39-249.greenmountainaccess.net)
2020-11-13 18:35:45 +0100gproto0023(~gproto23@unaffiliated/gproto23)
2020-11-13 18:35:57 +0100machined1od(~machinedg@207.253.244.210)
2020-11-13 18:36:07 +0100machinedgod(~machinedg@207.253.244.210) (Remote host closed the connection)
2020-11-13 18:38:12 +0100gproto023(~gproto23@unaffiliated/gproto23) (Ping timeout: 260 seconds)
2020-11-13 18:40:10 +0100__monty__(~toonn@unaffiliated/toonn)
2020-11-13 18:41:30 +0100hackagestack-all 0.1 - CLI tool for building across Stackage major versions https://hackage.haskell.org/package/stack-all-0.1 (JensPetersen)
2020-11-13 18:44:50 +0100jespada(~jespada@90.254.245.49) (Quit: Leaving)
2020-11-13 18:51:41 +0100jakob_(~textual@p57b0eae0.dip0.t-ipconnect.de)
2020-11-13 18:51:42 +0100Tario(~Tario@201.192.165.173) (Read error: Connection reset by peer)
2020-11-13 18:52:51 +0100Tario(~Tario@201.192.165.173)
2020-11-13 18:54:44 +0100kwantuM(1f971d5a@31-151-29-90.dynamic.upc.nl)
2020-11-13 18:55:11 +0100 <kwantuM> hey, I was wondering if someone could explain what the (I# x#) syntax means. I was looking at the data.bits source
2020-11-13 18:55:44 +0100 <glguy> kwantuM: in that context # is just another letter
2020-11-13 18:56:11 +0100 <glguy> I# is a constructor and x# is a variable there.
2020-11-13 18:56:31 +0100 <glguy> The convention is that unboxed things have a # in their names
2020-11-13 18:56:31 +0100 <kwantuM> so why is the # used?
2020-11-13 18:56:38 +0100 <kwantuM> oh okay, thanks!
2020-11-13 18:57:25 +0100kwantuM(1f971d5a@31-151-29-90.dynamic.upc.nl) (Remote host closed the connection)
2020-11-13 18:59:26 +0100raichoo(~raichoo@dslb-178-001-022-086.178.001.pools.vodafone-ip.de)
2020-11-13 18:59:49 +0100alp(~alp@2a01:e0a:58b:4920:888e:a635:2469:ca8a) (Ping timeout: 272 seconds)
2020-11-13 19:00:22 +0100gproto023(~gproto23@unaffiliated/gproto23)
2020-11-13 19:00:56 +0100todda7(~torstein@ppp-2-84-17-169.home.otenet.gr) (Ping timeout: 265 seconds)
2020-11-13 19:01:34 +0100Zetagon(~leo@c151-177-52-233.bredband.comhem.se) (Remote host closed the connection)
2020-11-13 19:01:51 +0100gproto023(~gproto23@unaffiliated/gproto23) (Remote host closed the connection)
2020-11-13 19:01:55 +0100 <hekkaidekapus> motte: Yeah, that will blow up quickly. The oneliner we are using is useful for short lists. Perhaps approach your problem from another perspective. Define a list (a set, really) and build up permutations σ₁, σ₂, σ₃… based only on indices. Then work on those σs to pick elements from the set as you like.
2020-11-13 19:02:19 +0100gproto023(~gproto23@unaffiliated/gproto23)
2020-11-13 19:02:21 +0100vilpan(~0@212.117.1.172) (Quit: Leaving.)
2020-11-13 19:02:32 +0100vfaronov(~vfaronov@broadband-95-84-210-78.ip.moscow.rt.ru)
2020-11-13 19:02:43 +0100gproto0023(~gproto23@unaffiliated/gproto23) (Ping timeout: 256 seconds)
2020-11-13 19:03:37 +0100texasmynsted(~texasmyns@2600:6c40:700:5fb3:f092:e5c5:68d2:d761)
2020-11-13 19:06:29 +0100APic(apic@apic.name) (Ping timeout: 268 seconds)
2020-11-13 19:06:41 +0100wroathe(~wroathe@c-73-24-27-54.hsd1.mn.comcast.net)
2020-11-13 19:06:46 +0100Tario(~Tario@201.192.165.173) (Read error: Connection reset by peer)
2020-11-13 19:06:49 +0100w1gz(~do@159.89.11.133) (Quit: WeeChat 2.8)
2020-11-13 19:07:22 +0100APic(apic@apic.name)
2020-11-13 19:08:12 +0100texasmynsted(~texasmyns@2600:6c40:700:5fb3:f092:e5c5:68d2:d761) (Remote host closed the connection)
2020-11-13 19:08:23 +0100bliminse(~bliminse@host109-156-197-211.range109-156.btcentralplus.com) (Ping timeout: 256 seconds)
2020-11-13 19:08:47 +0100texasmynsted(~texasmyns@64.44.55.44)
2020-11-13 19:09:58 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-11-13 19:13:45 +0100TommyC(~TommyC@unaffiliated/sepulchralbloom) (Ping timeout: 240 seconds)
2020-11-13 19:13:55 +0100xerox_(~xerox@unaffiliated/xerox) (Quit: leaving)
2020-11-13 19:15:12 +0100todda7(~torstein@ppp-2-84-17-169.home.otenet.gr)
2020-11-13 19:18:51 +0100britva(~britva@2a02:aa13:7240:2980:bc4b:509a:98e6:5bb0) (Quit: This computer has gone to sleep)
2020-11-13 19:22:01 +0100hackagetelegram-bot-simple 0.3.4 - Easy to use library for building Telegram bots. https://hackage.haskell.org/package/telegram-bot-simple-0.3.4 (swamp_agr)
2020-11-13 19:22:24 +0100LKoen_(~LKoen@9.253.88.92.rev.sfr.net) (Remote host closed the connection)
2020-11-13 19:22:57 +0100britva(~britva@31-10-157-156.cgn.dynamic.upc.ch)
2020-11-13 19:26:18 +0100TommyC(~TommyC@unaffiliated/sepulchralbloom)
2020-11-13 19:27:45 +0100nados(~dan@69-165-210-185.cable.teksavvy.com)
2020-11-13 19:35:09 +0100jneira(02896ac0@gateway/web/cgi-irc/kiwiirc.com/ip.2.137.106.192)
2020-11-13 19:35:11 +0100hyperisco(~hyperisco@d192-186-117-226.static.comm.cgocable.net)
2020-11-13 19:35:15 +0100Gurkenglas(~Gurkengla@unaffiliated/gurkenglas) (Read error: Connection reset by peer)
2020-11-13 19:36:36 +0100Tario(~Tario@201.192.165.173)
2020-11-13 19:36:51 +0100dhouthoo(~dhouthoo@ptr-eiv6509pb4ifhdr9lsd.18120a2.ip6.access.telenet.be) (Quit: WeeChat 2.9)
2020-11-13 19:37:21 +0100rusua(uid124537@gateway/web/irccloud.com/x-tapvwonhsgfjpqka)
2020-11-13 19:38:01 +0100jakob_(~textual@p57b0eae0.dip0.t-ipconnect.de) (Quit: My Laptop has gone to sleep. ZZZzzz…)
2020-11-13 19:38:27 +0100teardown_(~user@gateway/tor-sasl/mrush)
2020-11-13 19:39:05 +0100renzhi(~renzhi@2607:fa49:655f:e600::28da) (Ping timeout: 272 seconds)
2020-11-13 19:39:51 +0100britva(~britva@31-10-157-156.cgn.dynamic.upc.ch) (Quit: This computer has gone to sleep)
2020-11-13 19:40:55 +0100britva(~britva@31-10-157-156.cgn.dynamic.upc.ch)
2020-11-13 19:41:03 +0100teardown(~user@gateway/tor-sasl/mrush) (Ping timeout: 240 seconds)
2020-11-13 19:41:06 +0100avdb(~avdb@ip-213-49-124-119.dsl.scarlet.be)
2020-11-13 19:41:39 +0100jakalx(~jakalx@base.jakalx.net)
2020-11-13 19:43:40 +0100pavonia(~user@unaffiliated/siracusa)
2020-11-13 19:43:56 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
2020-11-13 19:44:51 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
2020-11-13 19:45:15 +0100LKoen(~LKoen@9.253.88.92.rev.sfr.net)
2020-11-13 19:45:17 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2020-11-13 19:46:00 +0100jmcarthur(~jmcarthur@104.140.53.251)
2020-11-13 19:46:27 +0100jakalx(~jakalx@base.jakalx.net) (Ping timeout: 260 seconds)
2020-11-13 19:46:33 +0100alp(~alp@2a01:e0a:58b:4920:d528:e132:73d:7a39)
2020-11-13 19:48:23 +0100teardown_(~user@gateway/tor-sasl/mrush) (Ping timeout: 240 seconds)
2020-11-13 19:49:21 +0100_ashbreeze_(~mark@72-161-252-32.dyn.centurytel.net)
2020-11-13 19:49:34 +0100sord937(~sord937@gateway/tor-sasl/sord937) (Quit: sord937)
2020-11-13 19:50:14 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 265 seconds)
2020-11-13 19:51:11 +0100chaosmasttter(~chaosmast@p200300c4a70f620139da516dba2d2a81.dip0.t-ipconnect.de)
2020-11-13 19:51:34 +0100leungbk(~user@2605:e000:1315:706:6194:c9aa:33f:2f0)
2020-11-13 19:54:30 +0100jonatanb(~jonatanb@83.24.155.27.ipv4.supernova.orange.pl)
2020-11-13 19:56:19 +0100geekosaur(82659a09@host154-009.vpn.uakron.edu) (Ping timeout: 245 seconds)
2020-11-13 19:56:36 +0100lestrrat(~lestrrat@217.146.82.202)
2020-11-13 20:03:22 +0100berberman(~berberman@unaffiliated/berberman) (Ping timeout: 260 seconds)
2020-11-13 20:03:26 +0100berberman_(~berberman@unaffiliated/berberman)
2020-11-13 20:04:11 +0100_ashbreeze_(~mark@72-161-252-32.dyn.centurytel.net) (Read error: Connection reset by peer)
2020-11-13 20:04:45 +0100_ashbreeze_(~mark@72-161-252-32.dyn.centurytel.net)
2020-11-13 20:05:22 +0100britva(~britva@31-10-157-156.cgn.dynamic.upc.ch) (Quit: This computer has gone to sleep)
2020-11-13 20:06:26 +0100britva(~britva@2a02:aa13:7240:2980:bc4b:509a:98e6:5bb0)
2020-11-13 20:07:08 +0100zincy__(~tom@2a00:23c8:970a:3501:9884:7ab1:3658:f1fb)
2020-11-13 20:10:05 +0100jmcarthur(~jmcarthur@104.140.53.251) (Ping timeout: 240 seconds)
2020-11-13 20:10:14 +0100asheshambasta(~user@ptr-e1lysawl9rr13i61o92.18120a2.ip6.access.telenet.be) (Ping timeout: 264 seconds)
2020-11-13 20:10:40 +0100teardown(~user@gateway/tor-sasl/mrush)
2020-11-13 20:10:46 +0100Rudd0(~Rudd0@185.189.115.98) (Ping timeout: 258 seconds)
2020-11-13 20:10:56 +0100zincy_(~tom@2a00:23c8:970a:3501:d0cd:312d:55de:c707) (Ping timeout: 246 seconds)
2020-11-13 20:12:25 +0100aarvar(~foewfoiew@50.35.43.33) (Ping timeout: 246 seconds)
2020-11-13 20:13:13 +0100jonatanb(~jonatanb@83.24.155.27.ipv4.supernova.orange.pl) (Remote host closed the connection)
2020-11-13 20:13:17 +0100howdoi(uid224@gateway/web/irccloud.com/x-rtfvtwxlaflqdsii)
2020-11-13 20:13:55 +0100jonatanb(~jonatanb@83.24.155.27.ipv4.supernova.orange.pl)
2020-11-13 20:15:02 +0100britva(~britva@2a02:aa13:7240:2980:bc4b:509a:98e6:5bb0) (Quit: This computer has gone to sleep)
2020-11-13 20:15:59 +0100britva(~britva@2a02:aa13:7240:2980:bc4b:509a:98e6:5bb0)
2020-11-13 20:16:14 +0100MarcelineVQ(~anja@198.254.202.72) (Ping timeout: 256 seconds)
2020-11-13 20:16:28 +0100cfricke(~cfricke@unaffiliated/cfricke) (Quit: WeeChat 2.9)
2020-11-13 20:17:21 +0100acowley(~acowley@c-68-83-22-43.hsd1.nj.comcast.net) (Read error: Connection reset by peer)
2020-11-13 20:17:31 +0100o1lo01ol1o(~o1lo01ol1@bl8-213-81.dsl.telepac.pt)
2020-11-13 20:17:55 +0100jakalx(~jakalx@base.jakalx.net)
2020-11-13 20:17:57 +0100_ashbreeze_(~mark@72-161-252-32.dyn.centurytel.net) (Read error: Connection reset by peer)
2020-11-13 20:18:42 +0100geekosaur(82659a09@host154-009.vpn.uakron.edu)
2020-11-13 20:18:49 +0100jonatanb(~jonatanb@83.24.155.27.ipv4.supernova.orange.pl) (Ping timeout: 264 seconds)
2020-11-13 20:19:12 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-11-13 20:19:24 +0100_ashbreeze_(~mark@72-161-252-32.dyn.centurytel.net)
2020-11-13 20:24:40 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
2020-11-13 20:25:32 +0100knupfer(~Thunderbi@200116b8249e5f0024d540c2b38d8e9b.dip.versatel-1u1.de) (Ping timeout: 260 seconds)
2020-11-13 20:27:03 +0100cantstanya(~chatting@gateway/tor-sasl/cantstanya) (Ping timeout: 240 seconds)
2020-11-13 20:29:05 +0100manjaro-user(~manjaro-u@109.77.71.163) (Ping timeout: 240 seconds)
2020-11-13 20:29:58 +0100britva(~britva@2a02:aa13:7240:2980:bc4b:509a:98e6:5bb0) (Quit: This computer has gone to sleep)
2020-11-13 20:30:48 +0100stree(~stree@50-108-72-205.adr01.mskg.mi.frontiernet.net) (Quit: Caught exception)
2020-11-13 20:30:48 +0100star_cloud(~star_clou@ec2-34-217-37-165.us-west-2.compute.amazonaws.com) (Read error: Connection reset by peer)
2020-11-13 20:30:55 +0100britva(~britva@2a02:aa13:7240:2980:bc4b:509a:98e6:5bb0)
2020-11-13 20:31:05 +0100stree(~stree@50-108-72-205.adr01.mskg.mi.frontiernet.net)
2020-11-13 20:31:48 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2020-11-13 20:32:09 +0100cantstanya(~chatting@gateway/tor-sasl/cantstanya)
2020-11-13 20:32:58 +0100o1lo01ol1o(~o1lo01ol1@bl8-213-81.dsl.telepac.pt) (Remote host closed the connection)
2020-11-13 20:32:59 +0100star_cloud(~star_clou@ec2-34-217-37-165.us-west-2.compute.amazonaws.com)
2020-11-13 20:33:11 +0100britva(~britva@2a02:aa13:7240:2980:bc4b:509a:98e6:5bb0) (Client Quit)
2020-11-13 20:38:45 +0100w1gz(~do@159.89.11.133)
2020-11-13 20:40:01 +0100 <sm[m]> friends.. could you guess why doing writeIORef in this yesod test suite blocks the test ? https://paste.tomsmeding.com/HfUbmN1S
2020-11-13 20:41:38 +0100bliminse(~bliminse@host109-156-197-211.range109-156.btcentralplus.com)
2020-11-13 20:41:39 +0100britva(~britva@2a02:aa13:7240:2980:bc4b:509a:98e6:5bb0)
2020-11-13 20:41:59 +0100 <sm[m]> the test causes this line to run, which presumably reads from the IORef: App {appOpts = opts, appJournal} <- getYesod
2020-11-13 20:42:50 +0100 <sm[m]> or rather, that appJournal IORef does get read from, during the test
2020-11-13 20:43:26 +0100avdb(~avdb@ip-213-49-124-119.dsl.scarlet.be) (Quit: WeeChat 2.9)
2020-11-13 20:43:42 +0100 <tomsmeding> add more putStrLn until you find the exact statement that blocks :p
2020-11-13 20:44:06 +0100 <sm[m]> and yes, if I comment out the read it's fine. The write followed by the read soon after causes it to block
2020-11-13 20:45:49 +0100 <sm[m]> probably is this running in threaded mode. Perhaps I need atomicWriteIORef..
2020-11-13 20:46:22 +0100cr3(~cr3@192-222-143-195.qc.cable.ebox.net) (Ping timeout: 246 seconds)
2020-11-13 20:47:00 +0100 <sm[m]> no change. Darn.
2020-11-13 20:49:43 +0100juri_(~juri@178.63.35.222) (Ping timeout: 260 seconds)
2020-11-13 20:52:01 +0100 <sm[m]> well, I've read https://hackage.haskell.org/package/base-4.14.0.0/docs/Data-IORef.html carefully but nowhere does it say that IORef operations can block. Is it normal ?
2020-11-13 20:53:42 +0100 <sm[m]> I don't even have to writeIORef - if I newIORef with this value, then try to read, it also hangs. Hmm.
2020-11-13 20:54:25 +0100cr3(~cr3@192-222-143-195.qc.cable.ebox.net)
2020-11-13 20:55:05 +0100 <monochrom> AFAIK writeIORef doesn't block.
2020-11-13 20:55:25 +0100 <monochrom> and even more strongly, it doesn't block other threads either
2020-11-13 20:56:37 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-11-13 20:56:45 +0100blankhart(~blankhart@pool-100-35-219-3.nwrknj.fios.verizon.net) (Ping timeout: 240 seconds)
2020-11-13 20:57:06 +0100moet(~moet@mobile-166-170-42-250.mycingular.net)
2020-11-13 20:57:29 +0100 <moet> can i add a `{-# WARNING .. #-}` pragma on a function body in a class instance?
2020-11-13 20:57:44 +0100 <moet> gets a parse error currently, so i guess the answer is no, but i just wanted to confirm
2020-11-13 20:59:02 +0100dragestil(~quassel@185.137.175.104) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
2020-11-13 20:59:26 +0100 <monochrom> Does the GHC user's guide say something about this?
2020-11-13 21:00:25 +0100 <sm[m]> monochrom: thanks
2020-11-13 21:00:40 +0100jakob_(~textual@p200300f49f1622007c6473fefbd3b832.dip0.t-ipconnect.de)
2020-11-13 21:01:22 +0100jonatanb(~jonatanb@83.24.155.27.ipv4.supernova.orange.pl)
2020-11-13 21:01:40 +0100 <sm[m]> I think what I'm writing must have a circular reference or an infinite loop, but darned if I can see it..
2020-11-13 21:01:44 +0100 <moet> monochrom: it's kind of unclear, but it says "You can attach a warning to a function, class, type, or data constructor, with the following top-level declarations"
2020-11-13 21:02:14 +0100 <moet> and "You can only attach to entities declared at top level in the module being compiled"
2020-11-13 21:02:41 +0100 <moet> which might be construed to mean that it doesn't include a typeclass instance function because that's "declared" elsewhere, in the module where the typeclass is located?
2020-11-13 21:03:22 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-11-13 21:04:59 +0100conal_(~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
2020-11-13 21:06:19 +0100conal(~conal@64.71.133.70)
2020-11-13 21:06:53 +0100conal(~conal@64.71.133.70) (Client Quit)
2020-11-13 21:07:26 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2020-11-13 21:08:53 +0100avdb(~avdb@ip-213-49-124-119.dsl.scarlet.be)
2020-11-13 21:09:27 +0100conal(~conal@64.71.133.70)
2020-11-13 21:17:31 +0100jneira(02896ac0@gateway/web/cgi-irc/kiwiirc.com/ip.2.137.106.192) (Ping timeout: 260 seconds)
2020-11-13 21:17:37 +0100wroathe(~wroathe@c-73-24-27-54.hsd1.mn.comcast.net) (Ping timeout: 264 seconds)
2020-11-13 21:21:17 +0100rprije(~rprije@124.148.131.132)
2020-11-13 21:22:58 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-11-13 21:26:04 +0100cosimone(~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd)
2020-11-13 21:27:05 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 240 seconds)
2020-11-13 21:27:28 +0100LKoen(~LKoen@9.253.88.92.rev.sfr.net) (Remote host closed the connection)
2020-11-13 21:29:36 +0100davr0s(~davrs@host81-147-72-1.range81-147.btcentralplus.com)
2020-11-13 21:29:40 +0100ggole(~ggole@2001:8003:8119:7200:cd0:562c:261b:241d) (Quit: Leaving)
2020-11-13 21:30:25 +0100shadowdao(~user@unaffiliated/shadowdaemon)
2020-11-13 21:30:35 +0100avdb(~avdb@ip-213-49-124-119.dsl.scarlet.be) (Quit: avdb)
2020-11-13 21:30:52 +0100avdb(~avdb@ip-213-49-124-119.dsl.scarlet.be)
2020-11-13 21:30:53 +0100solonarv(~solonarv@astrasbourg-653-1-156-155.w90-6.abo.wanadoo.fr) (Ping timeout: 258 seconds)
2020-11-13 21:31:08 +0100vicfred(~vicfred@unaffiliated/vicfred)
2020-11-13 21:31:19 +0100davr0s(~davrs@host81-147-72-1.range81-147.btcentralplus.com) (Remote host closed the connection)
2020-11-13 21:31:27 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
2020-11-13 21:31:29 +0100Jesin(~Jesin@pool-72-66-101-18.washdc.fios.verizon.net) (Quit: Leaving)
2020-11-13 21:33:58 +0100leungbk(~user@2605:e000:1315:706:6194:c9aa:33f:2f0) (Remote host closed the connection)
2020-11-13 21:34:07 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-11-13 21:34:29 +0100leungbk`(~user@cpe-104-33-52-83.socal.res.rr.com)
2020-11-13 21:38:05 +0100gproto023(~gproto23@unaffiliated/gproto23) (Ping timeout: 240 seconds)
2020-11-13 21:39:20 +0100anthonyw(~anthonyw@c-24-10-252-98.hsd1.ut.comcast.net)
2020-11-13 21:41:51 +0100crdrost(~crdrost@c-98-207-102-156.hsd1.ca.comcast.net) (Quit: This computer has gone to sleep)
2020-11-13 21:46:35 +0100jakob_(~textual@p200300f49f1622007c6473fefbd3b832.dip0.t-ipconnect.de) (Quit: My Laptop has gone to sleep. ZZZzzz…)
2020-11-13 21:47:03 +0100rusua(uid124537@gateway/web/irccloud.com/x-tapvwonhsgfjpqka) (Quit: Connection closed for inactivity)
2020-11-13 21:47:10 +0100jakob_(~textual@p200300f49f1622007c6473fefbd3b832.dip0.t-ipconnect.de)
2020-11-13 21:47:21 +0100jakob_(~textual@p200300f49f1622007c6473fefbd3b832.dip0.t-ipconnect.de) (Client Quit)
2020-11-13 21:47:23 +0100livvy(~livvy@gateway/tor-sasl/livvy) (Ping timeout: 240 seconds)
2020-11-13 21:47:45 +0100jakob_(~textual@p200300f49f1622007c6473fefbd3b832.dip0.t-ipconnect.de)
2020-11-13 21:48:04 +0100Gurkenglas(~Gurkengla@unaffiliated/gurkenglas)
2020-11-13 21:48:09 +0100jakob_(~textual@p200300f49f1622007c6473fefbd3b832.dip0.t-ipconnect.de) (Client Quit)
2020-11-13 21:48:11 +0100Kaeipi(~Kaiepi@nwcsnbsc03w-47-55-225-82.dhcp-dynamic.fibreop.nb.bellaliant.net)
2020-11-13 21:48:15 +0100livvy(~livvy@gateway/tor-sasl/livvy)
2020-11-13 21:48:43 +0100jakob_(~textual@p200300f49f1622007c6473fefbd3b832.dip0.t-ipconnect.de)
2020-11-13 21:48:48 +0100Kaiepi(~Kaiepi@nwcsnbsc03w-47-55-225-82.dhcp-dynamic.fibreop.nb.bellaliant.net) (Ping timeout: 260 seconds)
2020-11-13 21:48:55 +0100jakob_(~textual@p200300f49f1622007c6473fefbd3b832.dip0.t-ipconnect.de) (Client Quit)
2020-11-13 21:49:23 +0100jakob_(~textual@p200300f49f1622007c6473fefbd3b832.dip0.t-ipconnect.de)
2020-11-13 21:49:41 +0100jakob_(~textual@p200300f49f1622007c6473fefbd3b832.dip0.t-ipconnect.de) (Client Quit)
2020-11-13 21:50:11 +0100cole-h(~cole-h@c-73-48-197-220.hsd1.ca.comcast.net) (Ping timeout: 260 seconds)
2020-11-13 21:51:00 +0100renzhi(~renzhi@2607:fa49:655f:e600::28da)
2020-11-13 21:52:43 +0100anthonyw(~anthonyw@c-24-10-252-98.hsd1.ut.comcast.net) (Quit: leaving)
2020-11-13 21:53:07 +0100clog(~nef@bespin.org) (Ping timeout: 258 seconds)
2020-11-13 21:54:31 +0100 <dminuoso> sm[m]: Compile with profiling, flip on `+RTS -xc -RTS` and see where it hangs?
2020-11-13 21:55:08 +0100 <dminuoso> (That is, then send SIGINT to it when it hangs)
2020-11-13 21:55:49 +0100clog(~nef@bespin.org)
2020-11-13 21:56:25 +0100Jesin(~Jesin@pool-72-66-101-18.washdc.fios.verizon.net)
2020-11-13 21:57:43 +0100Franciman(~francesco@host-82-56-223-169.retail.telecomitalia.it) (Quit: Leaving)
2020-11-13 21:58:57 +0100 <sm[m]> dminuoso: good idea, but I think I've found it. My "simple" value-generating action is going wrong when called with unusual programmatic arguments. Not exactly sure why it hangs but I can see it going off the rails
2020-11-13 22:00:02 +0100lestrrat(~lestrrat@217.146.82.202) ()
2020-11-13 22:00:06 +0100 <sm[m]> ie, it was the value and what the code under test does with it, nothing to do with the IORef activity
2020-11-13 22:00:30 +0100jonatanb(~jonatanb@83.24.155.27.ipv4.supernova.orange.pl) (Remote host closed the connection)
2020-11-13 22:00:31 +0100o1lo01ol1o(~o1lo01ol1@bl8-213-81.dsl.telepac.pt)
2020-11-13 22:00:46 +0100crdrost(~crdrost@c-98-207-102-156.hsd1.ca.comcast.net)
2020-11-13 22:01:19 +0100 <sm[m]> tests breaking stuff already \o/
2020-11-13 22:01:25 +0100conal(~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
2020-11-13 22:02:48 +0100jonatanb(~jonatanb@83.24.155.27.ipv4.supernova.orange.pl)
2020-11-13 22:03:38 +0100coot(~coot@37.30.49.253.nat.umts.dynamic.t-mobile.pl) (Quit: coot)
2020-11-13 22:04:56 +0100cgfbee(~bot@oc1.itim-cj.ro) (Ping timeout: 244 seconds)
2020-11-13 22:04:57 +0100keep_learning(~keep_lear@43.231.26.152) (Quit: Leaving)
2020-11-13 22:05:32 +0100jonatanb(~jonatanb@83.24.155.27.ipv4.supernova.orange.pl) (Remote host closed the connection)
2020-11-13 22:06:51 +0100recon_-(~quassel@2602:febc:0:b6::6ca2) (Quit: No Ping reply in 180 seconds.)
2020-11-13 22:07:11 +0100jonatanb(~jonatanb@83.24.155.27.ipv4.supernova.orange.pl)
2020-11-13 22:07:18 +0100jonatanb_(~jonatanb@83.24.155.27.ipv4.supernova.orange.pl)
2020-11-13 22:07:40 +0100jonatanb(~jonatanb@83.24.155.27.ipv4.supernova.orange.pl) (Remote host closed the connection)
2020-11-13 22:08:07 +0100recon_-(~quassel@2602:febc:0:b6::6ca2)
2020-11-13 22:09:11 +0100WeChanTonio(~WeChanTon@186-130-20-31.ftth.glasoperator.nl)
2020-11-13 22:10:30 +0100hackagehyper-haskell-server 0.2.3.0, hyper-extra 0.2.0.0, hyper 0.2.1.0 (HeinrichApfelmus): https://qbin.io/longer-equal-cbm8
2020-11-13 22:10:43 +0100avdb(~avdb@ip-213-49-124-119.dsl.scarlet.be) (Quit: avdb)
2020-11-13 22:12:11 +0100cgfbee(~bot@oc1.itim-cj.ro)
2020-11-13 22:13:31 +0100cosimone(~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd) (Quit: cosimone)
2020-11-13 22:14:44 +0100LKoen(~LKoen@9.253.88.92.rev.sfr.net)
2020-11-13 22:15:56 +0100geekosaur(82659a09@host154-009.vpn.uakron.edu) (Remote host closed the connection)
2020-11-13 22:18:36 +0100conal(~conal@64.71.133.70)
2020-11-13 22:20:19 +0100britva(~britva@2a02:aa13:7240:2980:bc4b:509a:98e6:5bb0) (Quit: This computer has gone to sleep)
2020-11-13 22:22:37 +0100BluePass(~BluePass@185.163.110.116)
2020-11-13 22:22:37 +0100chrpape`(~user@2a01:4f9:c010:632d::1) (Read error: Connection reset by peer)
2020-11-13 22:27:59 +0100conal(~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
2020-11-13 22:28:19 +0100jakob_(~textual@p57b0eae0.dip0.t-ipconnect.de)
2020-11-13 22:30:12 +0100dbmikus__(~dbmikus@cpe-76-167-86-219.natsow.res.rr.com) (Ping timeout: 272 seconds)
2020-11-13 22:30:27 +0100conal(~conal@64.71.133.70)
2020-11-13 22:34:31 +0100raichoo(~raichoo@dslb-178-001-022-086.178.001.pools.vodafone-ip.de) (Quit: Lost terminal)
2020-11-13 22:35:13 +0100pavonia(~user@unaffiliated/siracusa) (Read error: Connection reset by peer)
2020-11-13 22:39:47 +0100pavonia(~user@unaffiliated/siracusa)
2020-11-13 22:41:23 +0100jonatanb_(~jonatanb@83.24.155.27.ipv4.supernova.orange.pl) (Remote host closed the connection)
2020-11-13 22:42:04 +0100WeChan-Tonio(~WeChanTon@186-130-20-31.ftth.glasoperator.nl)
2020-11-13 22:42:53 +0100cr3(~cr3@192-222-143-195.qc.cable.ebox.net) (Quit: leaving)
2020-11-13 22:43:00 +0100WeChanTonio(~WeChanTon@186-130-20-31.ftth.glasoperator.nl) ("Leaving")
2020-11-13 22:43:01 +0100entel(uid256215@botters/entel) ()
2020-11-13 22:43:20 +0100entel(uid256215@botters/entel)
2020-11-13 22:44:20 +0100nbloomf(~nbloomf@2600:1700:ad14:3020:b423:9089:de01:217e) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-11-13 22:44:57 +0100WeChan-Tonio(~WeChanTon@186-130-20-31.ftth.glasoperator.nl) ()
2020-11-13 22:53:31 +0100thc202(~thc202@unaffiliated/thc202) (Quit: thc202)
2020-11-13 22:53:35 +0100howdoi(uid224@gateway/web/irccloud.com/x-rtfvtwxlaflqdsii) (Quit: Connection closed for inactivity)
2020-11-13 22:56:45 +0100machined1od(~machinedg@207.253.244.210) (Ping timeout: 256 seconds)
2020-11-13 22:58:57 +0100chrpape(~user@2a01:4f9:c010:632d::1)
2020-11-13 22:59:19 +0100chrpape(~user@2a01:4f9:c010:632d::1) (Client Quit)
2020-11-13 23:00:30 +0100Rudd0(~Rudd0@185.189.115.98)
2020-11-13 23:01:00 +0100chrpape(~user@2a01:4f9:c010:632d::1)
2020-11-13 23:02:30 +0100st8less(~st8less@2603:a060:11fd:0:48e3:54d2:40b:a73f) (Quit: WeeChat 2.7.1)
2020-11-13 23:03:36 +0100conal(~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
2020-11-13 23:04:02 +0100conal(~conal@64.71.133.70)
2020-11-13 23:07:07 +0100kish`(~oracle@unaffiliated/oracle) (Ping timeout: 260 seconds)
2020-11-13 23:08:15 +0100jonatanb(~jonatanb@83.24.155.27.ipv4.supernova.orange.pl)
2020-11-13 23:08:56 +0100chaosmasttter(~chaosmast@p200300c4a70f620139da516dba2d2a81.dip0.t-ipconnect.de) (Quit: WeeChat 2.9)
2020-11-13 23:10:23 +0100vfaronov(~vfaronov@broadband-95-84-210-78.ip.moscow.rt.ru) (Quit: vfaronov)
2020-11-13 23:17:23 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-11-13 23:20:13 +0100hyperisco(~hyperisco@d192-186-117-226.static.comm.cgocable.net) (Ping timeout: 260 seconds)
2020-11-13 23:20:17 +0100werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Remote host closed the connection)
2020-11-13 23:23:27 +0100machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca)
2020-11-13 23:27:21 +0100dbmikus__(~dbmikus@cpe-76-167-86-219.natsow.res.rr.com)
2020-11-13 23:29:02 +0100PatrcikGrey(4d2d3763@77-45-55-99.sta.asta-net.com.pl)
2020-11-13 23:29:41 +0100 <PatrcikGrey> Hello everyone, nice to meet all of you, I tried to google it but failed, so maybe some of you will know the answer:
2020-11-13 23:30:12 +0100 <PatrcikGrey> Do you know any successful uses of haskell in object detection?(especially people detection)
2020-11-13 23:31:25 +0100machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca) (Ping timeout: 264 seconds)
2020-11-13 23:31:31 +0100 <PatrcikGrey> Tried to find some libraries/code/companies but its pretty weak compared to c++, however I would really want to do it in functional way.
2020-11-13 23:31:43 +0100livvy(~livvy@gateway/tor-sasl/livvy) (Ping timeout: 240 seconds)
2020-11-13 23:32:30 +0100livvy(~livvy@gateway/tor-sasl/livvy)
2020-11-13 23:32:57 +0100machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca)
2020-11-13 23:33:14 +0100PatrcikGrey(4d2d3763@77-45-55-99.sta.asta-net.com.pl) ()
2020-11-13 23:33:20 +0100pfurla(~pfurla@ool-182ed2e2.dyn.optonline.net) (Read error: Connection reset by peer)
2020-11-13 23:33:22 +0100PatrcikGrey(4d2d3763@77-45-55-99.sta.asta-net.com.pl)
2020-11-13 23:33:54 +0100o1lo01ol1o(~o1lo01ol1@bl8-213-81.dsl.telepac.pt) (Remote host closed the connection)
2020-11-13 23:34:21 +0100o1lo01ol1o(~o1lo01ol1@bl8-213-81.dsl.telepac.pt)
2020-11-13 23:37:40 +0100pfurla(~pfurla@238.15.195.173.client.static.strong-in52.as13926.net)
2020-11-13 23:38:55 +0100o1lo01ol1o(~o1lo01ol1@bl8-213-81.dsl.telepac.pt) (Ping timeout: 260 seconds)
2020-11-13 23:39:22 +0100 <texasmynsted> What is object detection?
2020-11-13 23:40:00 +0100hackagepolysemy-methodology 0.1.7.0 - Domain modelling algebra for polysemy https://hackage.haskell.org/package/polysemy-methodology-0.1.7.0 (locallycompact)
2020-11-13 23:41:59 +0100 <texasmynsted> Maybe just use an object detection lib from C and call that from Haskell?
2020-11-13 23:42:40 +0100conal(~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
2020-11-13 23:43:07 +0100conal(~conal@64.71.133.70)
2020-11-13 23:43:27 +0100conal(~conal@64.71.133.70) (Client Quit)
2020-11-13 23:43:31 +0100hackagepolysemy-extra 0.1.5.0 - Extra Input and Output functions for polysemy.. https://hackage.haskell.org/package/polysemy-extra-0.1.5.0 (locallycompact)
2020-11-13 23:45:12 +0100feliocrat(~feliocrat@95.70.185.239) (Remote host closed the connection)
2020-11-13 23:45:31 +0100hackagepolysemy-extra 0.1.6.0 - Extra Input and Output functions for polysemy.. https://hackage.haskell.org/package/polysemy-extra-0.1.6.0 (locallycompact)
2020-11-13 23:47:30 +0100hackagepolysemy-extra 0.1.6.1 - Extra Input and Output functions for polysemy.. https://hackage.haskell.org/package/polysemy-extra-0.1.6.1 (locallycompact)
2020-11-13 23:53:06 +0100o1lo01ol1o(~o1lo01ol1@bl8-213-81.dsl.telepac.pt)
2020-11-13 23:58:05 +0100mananamenos(~mananamen@84.122.202.215.dyn.user.ono.com) (Ping timeout: 258 seconds)