Home freenode/#haskell: Logs Calendar

Logs on 2020-10-06 (freenode/#haskell)

00:00:01 × jesusabdullah quits (~jesusabdu@178.162.204.214) ()
00:00:13 justache joins (~justache@unaffiliated/justache)
00:00:26 <ski> in the reductions in the first figure in the paper, are they only substituting (co)values for variables ?
00:00:48 <ski> or maybe that's the initial system they start with, and want to improve on
00:00:59 <dolio> I think the first figure is showing you the problem with classical logic.
00:01:05 <dolio> First section, even.
00:01:25 × hiroaki quits (~hiroaki@ip4d176049.dynamic.kabel-deutschland.de) (Ping timeout: 240 seconds)
00:01:43 <dolio> So they can over-fix it, and then relax into something that can actually be used (kind of).
00:02:13 <ski> mhm (over-fix ?)
00:03:32 <dolio> Well, when everything is hereditarily by-name or by-value, you can't write some things, I think.
00:04:30 <dolio> You can't put a function value in an either.
00:05:28 <ski> hm, so some escaping from / explicit switching of polarity, i suppose
00:05:44 <dolio> Yeah.
00:08:09 × xerox_ quits (~xerox@unaffiliated/xerox) (Ping timeout: 256 seconds)
00:08:34 GyroW_ joins (~GyroW@d54C03E98.access.telenet.be)
00:08:34 × GyroW_ quits (~GyroW@d54C03E98.access.telenet.be) (Changing host)
00:08:34 GyroW_ joins (~GyroW@unaffiliated/gyrow)
00:08:45 <dolio> Actually, the identity function isn't even well-typed, I think.
00:09:08 × GyroW quits (~GyroW@unaffiliated/gyrow) (Ping timeout: 256 seconds)
00:09:09 <dolio> Because `A \par ¬A` doesn't make sense. A would have to be both positive and negative.
00:12:01 × martin02 quits (silas@hund.fs.lmu.de) (Ping timeout: 272 seconds)
00:13:49 snakemasterflex joins (~snakemast@213.100.206.23)
00:14:58 nbloomf joins (~nbloomf@2600:1700:83e0:1f40:71a4:5e3f:3433:7ae1)
00:18:25 × snakemasterflex quits (~snakemast@213.100.206.23) (Ping timeout: 240 seconds)
00:22:19 × heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
00:22:45 × amiri quits (~amiri@cpe-76-91-154-9.socal.res.rr.com) (Read error: No route to host)
00:23:39 × acarrico quits (~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) (Ping timeout: 260 seconds)
00:23:56 amiri joins (~amiri@cpe-76-91-154-9.socal.res.rr.com)
00:26:02 × tromp quits (~tromp@dhcp-077-249-230-040.chello.nl) (Read error: Connection reset by peer)
00:26:39 tromp joins (~tromp@dhcp-077-249-230-040.chello.nl)
00:31:44 acarrico joins (~acarrico@dhcp-68-142-39-249.greenmountainaccess.net)
00:32:25 <ski> hm. reminds me of dinatural transformations
00:32:43 heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
00:34:49 × alp quits (~alp@2a01:e0a:58b:4920:e03a:3413:fb91:53fc) (Ping timeout: 272 seconds)
00:35:24 × nineonine quits (~nineonine@216.81.48.202) (Remote host closed the connection)
00:37:45 × nbloomf quits (~nbloomf@2600:1700:83e0:1f40:71a4:5e3f:3433:7ae1) (Quit: My MacBook has gone to sleep. ZZZzzz…)
00:42:49 × polyrain quits (~polyrain@2001:8003:e501:6901:a41a:145a:3fce:c107) (Quit: My MacBook has gone to sleep. ZZZzzz…)
00:44:18 × conal quits (~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
00:47:07 nbloomf joins (~nbloomf@2600:1700:83e0:1f40:71a4:5e3f:3433:7ae1)
00:47:45 × acarrico quits (~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) (Ping timeout: 240 seconds)
00:48:17 nineonine joins (~nineonine@216-19-190-182.dyn.novuscom.net)
00:49:39 × zoom84 quits (44beb1c9@068-190-177-201.res.spectrum.com) (Ping timeout: 245 seconds)
00:49:55 da39a3ee5e6b4b0d joins (~textual@n11211935170.netvigator.com)
00:51:41 falafel joins (~falafel@2605:e000:1527:d491:99fe:5613:f0a7:56f0)
00:51:52 × heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
00:51:55 <Squarism> Anyone got some idea on this. I want users of a library be able to create a type TheType that can consist of any composition of records/lists/maybe/either/tuple2. All "leafs" of this structure should be of type "forall a. Leafy a => Leaf a". I want to create a serializable/textual addressing by type "Path" so that I can do that I can implement : get :: forall a b. (Leafy a,THDerivedMagic b) => b -> Path -> Maybe (Leaf a). Or, as a will be lost, ge
00:51:55 <Squarism> (THDerivedMagic b) => b -> Path -> Maybe LeafProjection.
00:52:22 LarryTheCow joins (~user@cpe-104-34-71-94.socal.res.rr.com)
00:53:04 <Squarism> a textual/serializable getter lens that rely on the fact all leafs carry the same parameterized type.
00:53:57 <ski> cut off after ".. Or, as a will be lost, ge"
00:54:40 rob01 joins (~rob0@178.162.204.214)
00:54:51 <Squarism> where THDerivedMagic is an instance that TheType gets after compilation
00:55:24 notzmv` joins (~user@179.246.218.173)
00:55:31 <ski> "all leafs carry the same parameterized type" -- hm, "All \"leafs\" of this structure should be of type \"forall a. Leafy a => Leaf a\"" sounded like you had something like `data TheType = ... | forall a. Leafy a => Leaf a', in which case not all leaves would have the same type
00:55:32 <Squarism> ski, it continued on next row there
00:55:52 polyrain joins (~polyrain@2001:8003:e501:6901:a41a:145a:3fce:c107)
00:56:02 <ski> hm, so you're saying you wrote ".. Or, as a will be lost, ge(THDerivedMagic b) => b -> Path -> Maybe LeafProjection.", then ? nothing missing in the middle ?
00:56:34 <Squarism> oh ok. Man, I have a hard time explaining / figuring this out.
00:56:57 notzmv` is now known as zmv
00:57:01 × zmv quits (~user@179.246.218.173) (Changing host)
00:57:01 zmv joins (~user@unaffiliated/zmv)
00:57:15 <Squarism> ski, get :: (THDerivedMagic b) => b -> Path -> Maybe LeafProjection
00:57:18 × notzmv quits (~user@unaffiliated/zmv) (Ping timeout: 256 seconds)
00:57:26 zmv is now known as notzmv
00:57:36 plutoniix joins (~q@175.176.222.7)
00:58:33 heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
00:58:48 <ski> first, i was thinking you might want something like `data TheType = FromList [TheType] | FromMaybe (Maybe TheType) | FromEither (Either TheType TheType) | FromPair (TheType,TheType) | forall a. Leafy a => Leaf a' (not sure what to do with records) .. but then the `THDerivedMagic b => ..b..' part seemed to suggest you wanted to reflect the actual structure of the nested types, in the Haskell type `b' (rather
00:58:54 <ski> than using a single "universe" type `TheType')
00:58:56 <ski> Squarism : ty
00:59:19 <ski> i dunno what `LeafProjection' is for
00:59:52 <Squarism> I guess I'm trying to provide half of the solution wo knowing if its a good idea or not.
01:01:06 <Squarism> Important parts are really. Let users define a type using above mentioned constructs. Be able to address leafs of that structure using textual paths/addresses.
01:01:07 <ski> i'm not sure what `Leafy' includes .. nor what `THDerivedMagic' would provide
01:01:25 <Squarism> neither do I really.
01:02:04 <Squarism> But previous message formalizes the basic requirement.
01:02:10 <ski> why do you want users to express themselves using exactly those particular type constructions, when interfacing with your library ?
01:02:32 <ski> do you intend to serialize values of types constructed in such a way ?
01:03:21 <ski> what if the user would like to use some other type, e.g. maybe `NonEmpty' or `Map' or `Queue' ?
01:03:32 <Squarism> I want them to freely define a process as basic data structure.
01:03:39 <Squarism> that is TheType
01:03:49 <ski> i don't understand what you mean by that
01:04:15 × aarvar quits (~foewfoiew@50.35.43.33) (Ping timeout: 260 seconds)
01:04:55 × falafel quits (~falafel@2605:e000:1527:d491:99fe:5613:f0a7:56f0) (Ping timeout: 240 seconds)
01:06:13 × xsperry quits (~as@unaffiliated/xsperry) (Ping timeout: 264 seconds)
01:06:18 <ski> for the `TheType' i mentioned, i guess you could have `data Path = Here | ToIndex Int Path | InJust Path | InLeft Path | InRight Path | InFst Path | InSnd Path'
01:06:58 <ski> (not sure to which extent that type would make sense, for what you're trying to do)
01:07:54 dansho joins (~dansho@ip68-108-167-185.lv.lv.cox.net)
01:08:15 <ski> oh .. and i suspect that instead of `get :: forall a b. (Leafy a,THDerivedMagic b) => b -> Path -> Maybe (Leaf a)', you may have intended something like `get :: forall b. THDerivedMagic b => b -> Path -> Maybe (exists a. Leafy *> a)' ..
01:08:32 <ski> .. perhaps `exists a. Leafy *> a' is what you meant by `LeafProjection' ?
01:08:40 <Squarism> Lets call the Leaf a type Step a. So users could define data TheType = TheType { s1 :: Step S1, s2 :: Maybe (Step S2, Maybe (Step S3)) } . Which would be a very simple process. Easy to serializa and pattern match
01:09:25 × ericsagnes quits (~ericsagne@2405:6580:0:5100:a920:8792:1be2:949f) (Ping timeout: 240 seconds)
01:09:30 <Squarism> so basically i just want to great serializable addressing of Step's in this structure.
01:09:44 <ski> another thing one could imagine (with `Path' a GADT) would be `get :: forall a b. THDerivedMagic b => b -> Path b a -> Maybe b' (dunno if you'd want a `Leafy b' somewhere in there)
01:10:06 xerox_ joins (~xerox@unaffiliated/xerox)
01:10:09 <ski> er, sorry, that should be : `get :: forall a b. THDerivedMagic b => b -> Path b a -> Maybe a' (dunno if you'd want a `Leafy a' somewhere in there)
01:10:53 <ski> Squarism : wait a moment. is `TheType' something the library defines, or something a user of the library would define ?
01:11:15 <Squarism> Something the that the user defines
01:11:44 <L29Ah> https://github.com/kowainik/learn4haskell lol
01:11:45 <Squarism> Basically I want to a simple textual lens library.
01:11:58 abhixec joins (~abhixec@c-67-169-141-95.hsd1.ca.comcast.net)
01:12:10 <ski> (also, i thought `Leaf' was to be a data constructor, not a type constructor. if it was meant as a type constructor, then i doubt that you really meant `forall a. Leafy a => Leaf a' before. perhaps rather `exists a. Leafy a *> Leaf a')
01:12:11 × ystael quits (~ystael@209.6.50.55) (Ping timeout: 240 seconds)
01:12:44 <Squarism> ski, okok
01:13:33 <ski> i don't understand what `Step' is for
01:13:47 <ski> what is `S1',`S2',`S3' ?
01:13:49 <Squarism> its the same as "Leaf a"
01:14:11 <ski> yes, but i don't understand what `Leaf' is for, either, if it's a type constructor
01:14:14 <Squarism> S1-3 are parameters to "Step a"
01:14:24 <Squarism> its a type and and constructor
01:14:27 <ski> yes, but what purpose does `Step' have ?
01:14:37 <ski> which is a type and a constructor ?
01:15:28 <Squarism> A requirement on "TheType" (verified by TH presumebly) is that all leafs of the datastructure are of that type.
01:16:00 <ski> also, you didn't answer whether the library or the user would define `TheType'
01:16:16 <Squarism> I use Leaf/Step interchangeably (sorry for that). Same thing
01:16:18 <ski> oh. actually, i'm sorry. you did
01:16:24 <Squarism> so data Step
01:16:33 <ski> (i think i got confused by the other link, at the time)
01:16:36 <Squarism> data Step a = Step a
01:16:53 <ski> that looks fairly useless, to me
01:17:06 <Squarism> which part?
01:17:15 <ski> the whole `data' type declaration
01:17:23 <ski> it's basically just `Identity'
01:17:29 xsperry joins (~as@unaffiliated/xsperry)
01:17:32 <ski> why use `Step S1' instead of just `S1' directly ?
01:17:49 GyroW joins (~GyroW@ptr-48ujrfd1ztq5fjywfw3.18120a2.ip6.access.telenet.be)
01:17:49 × GyroW quits (~GyroW@ptr-48ujrfd1ztq5fjywfw3.18120a2.ip6.access.telenet.be) (Changing host)
01:17:49 GyroW joins (~GyroW@unaffiliated/gyrow)
01:18:00 × GyroW_ quits (~GyroW@unaffiliated/gyrow) (Ping timeout: 272 seconds)
01:18:06 <Squarism> yeah, But I leave out other information as its not important for the task at hand "Step a" will contain other info too
01:18:16 <ski> ok
01:19:06 <ski> so, the user defines some `TheType' data type, and makes it (maybe using TH), an instance of some type class (perhaps `THDerivedMagic')
01:19:31 <ski> is that correct ?
01:19:36 <Squarism> correct.
01:19:40 <Squarism> BUT
01:20:02 ystael joins (~ystael@209.6.50.55)
01:20:35 <Squarism> What THDerivedMagic contains I really have to clear idea of yet. I see it will be needed at some point to collect the "analysis" of TheType.
01:20:41 <ski> if `TheType' derives `Generic', i think you could use that to inspect how `TheType' was constructed, so that you can do different things, in e.g. an instance of `THDerivedMagic', depending on whether you see a record, a list, a `Maybe', a pair, an `Either'
01:21:14 Saukk joins (~Saukk@2001:998:f1:3963:1c59:9bb5:b94c:2)
01:21:44 <ski> i think looking into docs for `Generic' (or `Data' ?) could possibly be useful, for what(ever) you're actually trying to do
01:22:21 <Squarism> So the gist of this is. Give basic lens functionality to some type (TheType - defined by user). First milestone, create a getter on TheType (automatically) that answers "Maybe (StepProjection)"
01:22:22 ericsagnes joins (~ericsagne@2405:6580:0:5100:11f9:52f9:c5f:a031)
01:22:51 <Squarism> and by "lens" I mean textual/serializable addresses as opposed to real lenses.
01:23:15 <Squarism> ski, ok, ill read up on Generic
01:23:55 × fraktor quits (~walt@129.93.191.18) (Ping timeout: 240 seconds)
01:26:00 <ski> <https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/glasgow_exts.html#generic-programming>,<https://downloads.haskell.org/~ghc/latest/docs/html/libraries/base-4.14.0.0/GHC-Generics.html>
01:26:08 <ski> Squarism ^
01:26:10 fraktor joins (~walt@129.93.191.18)
01:26:42 totallynotnate joins (~nate@125.160.143.17)
01:26:52 <Squarism> ski, thanks. I stumbled upon that class before and see you can have a point there. I need to refresh my memory
01:27:23 <ski> i'm not totally sure whether you can do what you want to do with this. but it sounds like it could possibly be relevant
01:27:37 × totallynotnate quits (~nate@125.160.143.17) (Client Quit)
01:27:56 <Squarism> ski, thanks for helping me process this. Really appreciated.
01:28:03 × cr3 quits (~cr3@192-222-143-195.qc.cable.ebox.net) (Ping timeout: 260 seconds)
01:28:18 <ski> Squarism : anyway, what's `StepProjection' for ?
01:29:29 mirrorbird joins (~psutcliff@2a00:801:2d5:9d73:ff00:6553:d451:a276)
01:30:23 <Squarism> ski, results of the getter need to be sent over the wire. Then "a" of Step a will be out of scope. So need to make a type independent type (?) =D
01:30:41 <Squarism> "a" of "Step a"
01:31:58 <ski> "will be out of scope" -- out of which scope ?
01:32:46 <ski> could `StepProjection' be something like `exists a. (Leafy a,Typeable a) *> a' ?
01:34:00 × taurux quits (~taurux@net-93-146-149-217.cust.vodafonedsl.it) (Ping timeout: 244 seconds)
01:34:39 taurux joins (~taurux@net-188-152-143-169.cust.dsl.teletu.it)
01:37:54 cr3 joins (~cr3@192-222-143-195.qc.cable.ebox.net)
01:40:59 × Lowl3v3l quits (~Lowl3v3l@dslb-090-186-188-115.090.186.pools.vodafone-ip.de) (Ping timeout: 240 seconds)
01:41:41 <Squarism> ski, imagine some "REST Controller" delegating the "get" application on TheType".
01:42:05 <Squarism> ...that will work for all implementations of TheType
01:42:18 <Squarism> or should i say definitions
01:43:18 × ddellacosta quits (~dd@86.106.121.168) (Ping timeout: 244 seconds)
01:44:24 <Squarism> ski, " could `StepProjection' be something like `exists a. (Leafy a,Typeable a) *> a' ?" ... I really dont know. Wouldnt "a" need to be in function scope for such applications?
01:44:29 × machinedgod quits (~machinedg@24.105.81.50) (Ping timeout: 256 seconds)
01:44:41 jedws joins (~jedws@121.209.186.103)
01:47:15 <ski> by `StepProjection' encoding `exists a. (Leafy a,Typeable a) *> a' i mean something like `data StepProjection = forall a. (Leafy a,Typeable a) => MkStepProjection a', or the equivalent (using `GADTSyntax') `data StepProjection where MkStepProjection :: (Leafy a,Typeable a) => a -> StepProjection'
01:48:03 <ski> (i dunno what you mean by "Wouldnt \"a\" need to be in function scope for such applications?" -- what is "function scope" ? are you thinking of any particular function (`get' ?) ?)
01:48:28 × ryansmccoy quits (~ryansmcco@156.96.151.132) (Ping timeout: 244 seconds)
01:48:48 × shatriff quits (~vitaliish@217.27.153.240) (Remote host closed the connection)
01:49:05 ryansmccoy joins (~ryansmcco@193.37.254.27)
01:49:06 shatriff joins (~vitaliish@217.27.153.240)
01:49:21 albert_91 joins (~Albert@p200300e5ff0b5b4248a33bded2872db1.dip0.t-ipconnect.de)
01:49:36 × shatriff quits (~vitaliish@217.27.153.240) (Remote host closed the connection)
01:49:55 shatriff joins (~vitaliish@217.27.153.240)
01:50:25 × shatriff quits (~vitaliish@217.27.153.240) (Remote host closed the connection)
01:50:43 shatriff joins (~vitaliish@217.27.153.240)
01:51:10 <ski> (an alternative encoding of `exists a. (Leafy a,Typeable a) *> a' is `forall o. (forall a. (Leafy a,Typeable a) => a -> o) -> o'. this is CPS (Continuation-Passing Style), where you pass your main result to a callback (a continuation). like `withCString :: String -> (CString -> IO a) -> IO a' or `withStep :: StepProjection -> (forall a. (Leafy a,Typeable a) => a -> o) -> o')
01:51:11 × shatriff quits (~vitaliish@217.27.153.240) (Remote host closed the connection)
01:51:31 shatriff joins (~vitaliish@217.27.153.240)
01:51:57 × shatriff quits (~vitaliish@217.27.153.240) (Remote host closed the connection)
01:52:01 × argent0 quits (~argent0@168.227.97.5) (Quit: leaving)
01:52:02 <ski> (or, i suppose, `get :: forall b. THDerivedMagic b => b -> Path -> (forall a. (Leafy a,Typeable a) => a -> o) -> o', directly)
01:53:08 <Squarism> ski, yeah "get". If I had say `myRestEndpoint :: Path -> SomeSerializableStep ; myRestEndpoint p = let r = get theTypeInstance in convertToSomeSerializableStep r` wouldnt it complain about not knowing what "a" is. "Not bound"
01:53:54 <Squarism> (oh forgot to pass p to get ^)
01:54:26 <ski> (better to say `theTypeValue', since "instance" means something else, in Haskell)
01:54:37 × albert_91 quits (~Albert@p200300e5ff0b5b4248a33bded2872db1.dip0.t-ipconnect.de) (Ping timeout: 272 seconds)
01:54:49 <ski> Squarism : what's the intended type of `convertToSomeSerializableStep', here ?
01:55:22 <ski> convertToSomeSerializableStep :: Leafy a => a -> SomeSerializableStep -- ?
01:55:28 thir joins (~thir@p200300f27f0fc60038c1b16891cbfa03.dip0.t-ipconnect.de)
01:55:49 Lowl3v3l joins (~Lowl3v3l@dslb-002-203-195-108.002.203.pools.vodafone-ip.de)
01:55:57 <Squarism> not that important. Something that could contain the important informaiton `forall a. Step a`
01:56:14 <ski> myRestEndpoint p = get theTypeValue p convertToSomeSerializableStep -- in that case. using the CPS version of `get'
01:57:15 × Gurkenglas quits (~Gurkengla@unaffiliated/gurkenglas) (Ping timeout: 244 seconds)
01:57:30 × nbloomf quits (~nbloomf@2600:1700:83e0:1f40:71a4:5e3f:3433:7ae1) (Quit: My MacBook has gone to sleep. ZZZzzz…)
01:59:25 × thir quits (~thir@p200300f27f0fc60038c1b16891cbfa03.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
01:59:57 zacts joins (~zacts@dragora/developer/zacts)
02:00:03 × abhixec quits (~abhixec@c-67-169-141-95.hsd1.ca.comcast.net) (Read error: Connection reset by peer)
02:01:58 snakemasterflex joins (~snakemast@213.100.206.23)
02:06:47 × snakemasterflex quits (~snakemast@213.100.206.23) (Ping timeout: 260 seconds)
02:07:41 × GyroW quits (~GyroW@unaffiliated/gyrow) (Quit: Someone ate my pie)
02:08:00 GyroW joins (~GyroW@ptr-48ujrfd1ztq5fjywfw3.18120a2.ip6.access.telenet.be)
02:08:00 × GyroW quits (~GyroW@ptr-48ujrfd1ztq5fjywfw3.18120a2.ip6.access.telenet.be) (Changing host)
02:08:00 GyroW joins (~GyroW@unaffiliated/gyrow)
02:10:10 slack1256 joins (~slack1256@181.203.50.26)
02:11:49 mathlover2 joins (~mathlover@2604:6000:1013:129e:755e:eccf:8735:da37)
02:12:11 zebrag joins (~inkbottle@aaubervilliers-654-1-95-218.w86-212.abo.wanadoo.fr)
02:12:49 × inkbottle quits (~inkbottle@aaubervilliers-654-1-101-245.w86-212.abo.wanadoo.fr) (Ping timeout: 264 seconds)
02:16:49 × urodna quits (~urodna@unaffiliated/urodna) (Quit: urodna)
02:18:58 × Wuzzy quits (~Wuzzy@p5790e6f5.dip0.t-ipconnect.de) (Remote host closed the connection)
02:18:59 <hololeap> how important is it to know where to add INLINE pragmas these days? will compiling with -O2 on the latest GHC be sufficient without worrying about using INLINE?
02:19:26 × solonarv quits (~solonarv@astrasbourg-653-1-252-112.w92-161.abo.wanadoo.fr) (Ping timeout: 272 seconds)
02:19:31 hololeap is actually using GHC 8.8.4, not the latest one
02:20:22 <dolio> Depends on the program.
02:20:42 berberman_ joins (~berberman@2408:8207:2560:ee60::a44)
02:20:46 solonarv joins (~solonarv@adijon-655-1-70-207.w90-13.abo.wanadoo.fr)
02:23:19 <hololeap> can you elaborate, dolio?
02:23:42 <dolio> Well, if I remove all the inline pragmas from vector-algorithms, it will be a lot slower.
02:23:57 <dolio> (Unless I compensate in other ways.)
02:24:07 × berberman quits (~berberman@2408:8207:2560:ee60:584e:a9ff:fe9b:d3fe) (Ping timeout: 244 seconds)
02:24:28 cosimone joins (~cosimone@2001:b07:ae5:db26:f68c:50ff:fe0b:b774)
02:24:34 × cosimone quits (~cosimone@2001:b07:ae5:db26:f68c:50ff:fe0b:b774) (Client Quit)
02:24:36 <dsal> If you need something inlined, or need it not inlined, you should say so.
02:25:26 cosimone joins (~cosimone@2001:b07:ae5:db26:f68c:50ff:fe0b:b774)
02:25:30 <dolio> That isn't the only significant factor, necessarily. But sometimes it enables important optimizations, and GHC will not automatically inline everything.
02:25:55 <dolio> Inlining everything isn't even really desirable.
02:25:58 jle` joins (~mstksg@cpe-23-240-75-236.socal.res.rr.com)
02:25:59 × jle` quits (~mstksg@cpe-23-240-75-236.socal.res.rr.com) (Changing host)
02:25:59 jle` joins (~mstksg@unaffiliated/mstksg)
02:26:10 × cosimone quits (~cosimone@2001:b07:ae5:db26:f68c:50ff:fe0b:b774) (Client Quit)
02:26:32 <hololeap> i don't understand what makes a function needing to be inlined, where GHC wouldn't already do it automatically. is there a good primer on all this?
02:26:33 <dsal> Does GHC ever automatically inline anything? I've had pretty big optimizations from telling it to inline things I thought would be obvious.
02:26:56 <dolio> Well, here's an example from vector-algorithms again.
02:27:11 <dolio> The algorithms need to be inlined so that the code can be specialized to the comparison function.
02:27:18 <dsal> If you have a tiny function you use in a lot of places, copying the instructions will be faster than making a function call.
02:27:33 <dolio> Because if that doesn't happen, the overhead of comparing integers will be massive.
02:28:01 brandly joins (~brandly@c-73-68-15-46.hsd1.ma.comcast.net)
02:28:06 <hololeap> dsal: what determines the size of a function?
02:28:09 <dolio> Like, a couple instructions on unboxed values vs. function calls on boxed values.
02:29:19 <dsal> hololeap: I mean like, you write the abstraction that makes sense, but if you have something that's called enough that the overhead of calling it makes a difference in your runtime, inlining might help.
02:29:57 <dolio> The actual size of the expression is the size.
02:30:05 <dolio> I'm not sure what exactly the threshold is.
02:30:39 <dsal> If it's a lot of code, and you use it in a lot of places, inlining while make your code a lot bigger and your cache less effective.
02:31:20 <dolio> I'm pretty sure `f x = x + x` is small enough for GHC to decide to inline it automatically. But if you're in doubt, and it matters, it's better to annotate it.
02:31:31 × jle` quits (~mstksg@unaffiliated/mstksg) (Ping timeout: 256 seconds)
02:31:36 user2 joins (~user@068-190-177-201.res.spectrum.com)
02:31:49 <hololeap> ok, it's becoming clearer
02:32:33 × user2 quits (~user@068-190-177-201.res.spectrum.com) (Client Quit)
02:33:40 <dolio> I've been experimenting with doing vector-algorithms with backpack, and that doesn't require inlining tons of code.
02:33:52 <hololeap> the problem is, i've been spending all my time learning haskell focusing on semantics and getting stuff to compile. i haven't looked into performance or tweaking GHC at all beyond using -O2 every time
02:33:55 <dolio> Because you can specialize the implementation to the comparson/types.
02:34:42 <dolio> Well, it might not matter a whole lot depending on what you're doing.
02:35:37 <dolio> If you're trying to beat C's qsort, though, it matters.
02:36:44 <hololeap> i'm using a lot of newtype wrappers around monad transformer stacks; packing and unpacking while using inherited typeclasses. and a lot of production code i've seen uses INLINE a lot for this type of thing. but i wonder how much of it is necessary.
02:37:18 zoom55AA joins (~zoom55aa@068-190-177-201.res.spectrum.com)
02:37:24 <dsal> Profiling is usually a good step before taking action.
02:37:45 <dsal> benchmarking helps both as well, but benchmarking as an effort can be pretty misleading.
02:38:27 <hololeap> i don't even understand the difference between profiling and benchmarking :/
02:39:18 <dsal> benchmarking is writing a tool that gives you a repeatable measurement.
02:39:25 <dsal> profiling is using a tool that tells you where time is spent.
02:39:41 × rusua_ quits (uid124537@gateway/web/irccloud.com/x-mpizelreyaaubxup) (Quit: Connection closed for inactivity)
02:40:03 <dsal> So profiling might tell you that a particular function is where you spend a lot of your time. So you write a benchmark for that function, and then do stuff to the implementation until the benchmark gives you consistently better results.
02:40:18 <dsal> It's a little tricky in haskell, but the tools are helpful.
02:40:30 <hololeap> what tools should i be looking into?
02:40:53 <dsal> criterion (or whatever that lighter version is people use, but I still use criterion, I think)
02:41:11 <dsal> And like, wherever "how to profile haskell" takes you.
02:42:02 <hololeap> cool, i will crawl the web for it, but i also appreciate specific advice from people who have done it.
02:42:24 <dsal> stack test --profile
02:42:37 <dsal> It's a report you read.
02:43:21 <dsal> Your test or application or whatever runs and then you look at it, stroke your bear, say "hmm... I see" and then your code is faster.
02:44:01 <dsal> In any case, you don't try to optimize anything you're not measuring.
02:44:13 nbloomf joins (~nbloomf@2600:1700:83e0:1f40:71a4:5e3f:3433:7ae1)
02:44:19 <dsal> I've seen every optimization you can think of slow code down.
02:44:41 abhixec joins (~abhixec@c-67-169-141-95.hsd1.ca.comcast.net)
02:44:41 <hololeap> is the species of bear a crucial variable in this equation?
02:45:02 × cr3 quits (~cr3@192-222-143-195.qc.cable.ebox.net) (Quit: leaving)
02:45:16 <dsal> Maybe. It's best to go in without assumptions.
02:45:17 ski . o O ( "Let's hug a bear." )
02:45:57 falafel joins (~falafel@2605:e000:1527:d491:99fe:5613:f0a7:56f0)
02:46:17 Stanley00 joins (~stanley00@unaffiliated/stanley00)
02:47:55 × ralejs_ quits (~ralejs@2620:10d:c093:400::5:2842) (Read error: Connection reset by peer)
02:48:23 ralejs joins (~ralejs@2620:10d:c093:400::5:2842)
02:49:31 vicfred joins (~vicfred@unaffiliated/vicfred)
02:50:51 zoom55AA parts (~zoom55aa@068-190-177-201.res.spectrum.com) ("WeeChat 2.9")
02:51:40 zoom84 joins (~zoom55aa@068-190-177-201.res.spectrum.com)
02:51:47 × lagothrix quits (~lagothrix@unaffiliated/lagothrix) (Killed (hitchcock.freenode.net (Nickname regained by services)))
02:51:55 lagothrix joins (~lagothrix@unaffiliated/lagothrix)
02:54:06 × falafel quits (~falafel@2605:e000:1527:d491:99fe:5613:f0a7:56f0) (Remote host closed the connection)
02:56:58 hackage reanimate-svg 0.12.0.0 - SVG file loader and serializer https://hackage.haskell.org/package/reanimate-svg-0.12.0.0 (DavidHimmelstrup)
02:58:35 jle` joins (~mstksg@unaffiliated/mstksg)
02:58:54 falafel joins (~falafel@2605:e000:1527:d491:99fe:5613:f0a7:56f0)
03:00:01 × rob01 quits (~rob0@178.162.204.214) ()
03:01:34 drbean joins (~drbean@TC210-63-209-99.static.apol.com.tw)
03:02:55 × berberman_ quits (~berberman@2408:8207:2560:ee60::a44) (Ping timeout: 240 seconds)
03:03:40 × jle` quits (~mstksg@unaffiliated/mstksg) (Ping timeout: 256 seconds)
03:04:09 berberman joins (~berberman@2408:8207:2563:5ae0:584e:a9ff:fe9b:d3fe)
03:06:25 × drbean quits (~drbean@TC210-63-209-99.static.apol.com.tw) (Client Quit)
03:16:08 notzmv` joins (~user@177.45.26.174)
03:17:23 × notzmv quits (~user@unaffiliated/zmv) (Ping timeout: 240 seconds)
03:17:27 elliott_ joins (~elliott@pool-108-51-141-12.washdc.fios.verizon.net)
03:17:38 × bloodstalker quits (~bloodstal@46.166.187.178) (Read error: Connection reset by peer)
03:18:04 <zoom84> when I load a module with a type error in a function, GHCI shows me the expected and actual types, and also shows me all the bindings. is there a way to display the bindings on command for a given function, outside of compile errors
03:18:51 <dsal> The bindings? Are you debugging?
03:18:58 <dsal> Or do you just want type annotations?
03:18:59 <dsal> :T fix
03:19:00 <dsal> :t fix
03:19:02 <lambdabot> (a -> a) -> a
03:19:21 <zoom84> more exploring than debugging
03:19:37 <zoom84> :t shows me the sig. i'm looking to the the sig and the bindings that resulted from it
03:19:39 <lambdabot> error:
03:19:39 <lambdabot> • Variable not in scope: me
03:19:39 <lambdabot> • Perhaps you meant one of these:
03:19:41 <dsal> There's :browse and :i and :t
03:19:51 <dsal> I'm not quite sure what you mean by bindings.
03:20:07 <zoom84> for example, here are the bindings displayed for a compile error:
03:20:07 <dsal> Local variables inside of functions? That's not normally a thing that you care about from the outside.
03:20:29 <zoom84> • Occurs check: cannot construct the infinite type: a ~ (a, a)
03:20:31 <zoom84> • In the first argument of ‘f’, namely ‘(x, y)’
03:20:32 <solonarv> you can add a typed hole somewhere in the function; that will produce a compile error telling you: the type of what should fill the hole; bindings in scope; and expressions that might be able to fill the hole
03:20:33 <zoom84> In the expression: f (x, y)
03:20:35 <zoom84> In an equation for ‘fmap’: fmap f (MyT (x, y)) = f (x, y)
03:20:37 <zoom84> • Relevant bindings include
03:20:39 <zoom84> y :: a (bound at learn.hs:806:20)
03:20:41 <zoom84> x :: a (bound at learn.hs:806:18)
03:20:43 <zoom84> f :: a -> b (bound at learn.hs:806:10)
03:20:45 <zoom84> fmap :: (a -> b) -> MyTT a -> MyTT b (bound at learn.hs:806:5)
03:20:47 <zoom84> i'm looking to display the "relevent bindings include" section on command
03:21:02 <dsal> Yeah, typed holes and pastebins
03:21:02 <solonarv> a typed hole looks like this: _ , or _someNameHere (has to start with an underscore)
03:21:46 toorevitimirp joins (~tooreviti@117.182.180.245)
03:22:16 <dsal> Once you get your function done, it's basically a sealed box. None of the insides matter to you. When you're writing something, typed holes induce that type of thing and help you understand what goes somewhere when you're confused.
03:22:49 × GyroW quits (~GyroW@unaffiliated/gyrow) (Quit: Someone ate my pie)
03:23:00 GyroW joins (~GyroW@d54C03E98.access.telenet.be)
03:23:00 × GyroW quits (~GyroW@d54C03E98.access.telenet.be) (Changing host)
03:23:00 GyroW joins (~GyroW@unaffiliated/gyrow)
03:23:15 conal joins (~conal@64.71.133.70)
03:23:43 <zoom84> not clear where I put the typehole. do I create a new pattern match line and just do a _ on it
03:24:01 <dsal> You put it anywhere you'd put a value, but you don't know what the value is that you need.
03:24:09 <dsal> % 1 + _
03:24:14 <yahb> dsal: [Timed out]
03:24:19 <dsal> heh. Thanks, yahb
03:24:50 <dsal> % maximum _
03:24:56 <yahb> dsal: ; <interactive>:1:9: error:; * Found hole: _ :: [a]; Where: `a' is a rigid type variable bound by; the inferred type of it :: Ord a => a; at <interactive>:1:1-9; * In the first argument of `maximum', namely `_'; In the expression: maximum _; In an equation for `it': it = maximum _; * Relevant bindings include it :: a (bound at <interactive>:1:1);
03:25:18 × slack1256 quits (~slack1256@181.203.50.26) (Ping timeout: 272 seconds)
03:25:23 <dsal> So, I need a list of things that have an Ord instance.
03:26:28 <zoom84> i put the type hole on both the left and right site of the pattern, right?
03:26:48 <dsal> % let x = 1 :: Int in 1 + _
03:26:52 <yahb> dsal: ; <interactive>:2:26: error:; * Found hole: _ :: a; Where: `a' is a rigid type variable bound by; the inferred type of it :: Num a => a; at <interactive>:2:1-26; * In the second argument of `(+)', namely `_'; In the expression: 1 + _; In the expression: let x = 1 :: Int in 1 + _; * Relevant bindings include; x :: Int (bound at <interactive>
03:27:03 <dsal> You can put them where you'd like. It will make suggestions for you. e.g., it suggests x here.
03:28:17 <zoom84> if I put it only on the destructuring side doesn't that just mean I'm not interested in the pattern-matched value and thus it's not an error
03:28:54 drbean joins (~drbean@TC210-63-209-213.static.apol.com.tw)
03:29:26 <dsal> % let x = 1 :: Int; y = 2 :: Int in _ x y + x -- contriving kind of hard, but run this in your ghci
03:29:28 <yahb> dsal: ; <interactive>:4:38: error:; * Found hole: _ :: Int -> Int -> Int; * In the expression: _; In the first argument of `(+)', namely `_ x y'; In the expression: _ x y + x; * Relevant bindings include; x :: Int (bound at <interactive>:4:7); y :: Int (bound at <interactive>:4:21); it :: Int (bound at <interactive>:4:1); Valid hole fits include; (-) ::
03:30:05 <dsal> Oh, yeah, if it's a parameter binding, it just means "don't care"
03:30:28 <zoom84> ok, it only works if I put it inside the function body
03:30:41 <zoom84> got it, thanks
03:31:20 slack1256 joins (~slack1256@181.203.50.26)
03:31:36 <dsal> Well, it works if you put it somewhere you want to try to find a possible match. This can't be a parameter, for example, because that's input. If you want to know possible parameter values, you _ the caller
03:32:57 <zoom84> the hole trick works great, thanks
03:37:05 × jedws quits (~jedws@121.209.186.103) (Quit: My MacBook has gone to sleep. ZZZzzz…)
03:38:36 × slack1256 quits (~slack1256@181.203.50.26) (Remote host closed the connection)
03:38:41 × vk3wtf quits (~doc@14-202-30-62.static.tpgi.com.au) (Quit: WeeChat 2.7.1)
03:39:04 vk3wtf joins (~doc@14-202-30-62.static.tpgi.com.au)
03:41:25 jwynn6 joins (~jwynn6@050-088-122-078.res.spectrum.com)
03:43:39 CMCDragonkai1 joins (~Thunderbi@120.17.228.7)
03:47:33 × polyrain quits (~polyrain@2001:8003:e501:6901:a41a:145a:3fce:c107) (Quit: My MacBook has gone to sleep. ZZZzzz…)
03:50:19 albert_91 joins (~Albert@p200300e5ff0b5b4248a33bded2872db1.dip0.t-ipconnect.de)
03:51:45 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 240 seconds)
03:51:59 × Unhammer quits (~Unhammer@gateway/tor-sasl/unhammer) (Remote host closed the connection)
03:52:09 × petersen quits (~petersen@redhat/juhp) (Quit: petersen)
03:52:25 × falafel quits (~falafel@2605:e000:1527:d491:99fe:5613:f0a7:56f0) (Ping timeout: 272 seconds)
03:52:36 Unhammer joins (~Unhammer@gateway/tor-sasl/unhammer)
03:54:26 × CMCDragonkai1 quits (~Thunderbi@120.17.228.7) (Ping timeout: 272 seconds)
03:55:35 × albert_91 quits (~Albert@p200300e5ff0b5b4248a33bded2872db1.dip0.t-ipconnect.de) (Ping timeout: 272 seconds)
03:55:52 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
03:59:09 × nbloomf quits (~nbloomf@2600:1700:83e0:1f40:71a4:5e3f:3433:7ae1) (Quit: My MacBook has gone to sleep. ZZZzzz…)
03:59:59 justsomeguy joins (~justsomeg@unaffiliated/--/x-3805311)
04:01:03 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 260 seconds)
04:01:15 falafel joins (~falafel@2605:e000:1527:d491:99fe:5613:f0a7:56f0)
04:01:59 × Saukk quits (~Saukk@2001:998:f1:3963:1c59:9bb5:b94c:2) (Remote host closed the connection)
04:03:23 × elliott_ quits (~elliott@pool-108-51-141-12.washdc.fios.verizon.net) (Ping timeout: 260 seconds)
04:03:57 hackage yesod-filter 0.1.0.0 - Automatic filter generator for Yesod https://hackage.haskell.org/package/yesod-filter-0.1.0.0 (KenzoYotsuya)
04:04:06 nbloomf joins (~nbloomf@2600:1700:83e0:1f40:71a4:5e3f:3433:7ae1)
04:07:20 × bbear quits (~dkremer@2a01:e34:ec2b:d430:cc93:67b2:c4ea:7463) (Remote host closed the connection)
04:10:24 angerman_ is now known as angerman
04:13:17 jedws joins (~jedws@121.209.186.103)
04:13:49 <gnumonik> Hello. I'm having some trouble with the lens library. I have a complicated data structure that consists of a product type that contains a record which is a list of a sum type. I would like to use the library to write a function that allows me to set/"over" a specific (indexed) element of the list (if it exists). I can't figure out if I can do that. Everything I try runs into "can't deduce As(sum type) (Product type)" (I'm using
04:13:49 <gnumonik> classy prisms). AFAIK I can't write a prism for a product type so I can't actually declare the instance and I'm wondering if there's another way to do this. Could someone point me in the right direction?
04:16:29 shafox joins (~shafox@106.51.234.111)
04:16:40 <c_wraith> You can certainly do it. You just need to ensure you actually have the necessary lenses available.
04:16:43 <hololeap> zoom84, _ has type `a` (e.g. anything, similar to `undefined`) and you can use it multiple times and get multiple error messages
04:17:31 <c_wraith> if you don't have a sum type, don't try to create a prism for it?
04:18:17 × Sheilong quits (uid293653@gateway/web/irccloud.com/x-wunoznsilndrshkm) ()
04:18:37 <hololeap> gnumonik: you might want to look at a data structure instead of lists, which supports something better than O(n) lookups with an index
04:19:23 <hololeap> like Seq (O(log(n))) or Vector (O(n))
04:19:34 <hololeap> oops... Vector (O(1))
04:19:37 <c_wraith> that seems like an entirely useless criticism
04:19:49 <c_wraith> also, if you're using over, Vector is also O(n)
04:19:57 <c_wraith> because it has to allocate an entire new one
04:21:01 <dsal> A nice thing about using lens is you can replace a list with a vector without changing code.
04:21:05 <hololeap> well, it would be more efficient when getter
04:21:18 <hololeap> *using a getter
04:22:13 <gnumonik> The lists are so short I doubt that'll make much of a difference. So actually I'm writing template haskell to generate setting/over functions, and the only case in which it doesn't work is where I have a product with one component that's a list of a sum type. And the only clue I have as to why it's not working is that can't deduce error :-(
04:23:35 <c_wraith> well, the nice thing about lens is composability. Break things down and figure out exactly which part is sketchy.
04:25:57 × massma quits (~user@dyn-160-39-62-152.dyn.columbia.edu) (Quit: rcirc on GNU Emacs 26.1)
04:29:12 MasterGruntR75 joins (~MasterGru@185.244.214.216)
04:35:00 kori joins (~kori@2804:14c:85a3:9105::1000)
04:35:00 × kori quits (~kori@2804:14c:85a3:9105::1000) (Changing host)
04:35:00 kori joins (~kori@arrowheads/kori)
04:35:36 × haritz quits (~hrtz@unaffiliated/haritz) (Ping timeout: 272 seconds)
04:36:31 <hololeap> :t \x y -> _ (x + y)
04:36:36 <lambdabot> error:
04:36:36 <lambdabot> • Found hole: _ :: t -> t1
04:36:36 <lambdabot> Where: ‘t’, ‘t1’ are rigid type variables bound by
04:37:13 haritz joins (~hrtz@62.3.70.206)
04:37:14 × haritz quits (~hrtz@62.3.70.206) (Changing host)
04:37:14 haritz joins (~hrtz@unaffiliated/haritz)
04:38:39 day_ joins (~Unknown@unaffiliated/day)
04:39:29 <gnumonik> I'm not even sure how to break this down. I've been at this for more than a week... This seems like it should work: myFunc adt val adtLens fieldPrism i = set' (adtLens . ix i . fieldPrism) val adt. But it doesn't for the list-of-sums-inside-a-product. The sketchy part, as far as I can tell, is that the product type doesn't have an instance of a class that it can't possibly have. Oh well.
04:39:53 takuan joins (~takuan@178-116-218-225.access.telenet.be)
04:40:29 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
04:41:02 × zoom84 quits (~zoom55aa@068-190-177-201.res.spectrum.com) (Quit: WeeChat 2.9)
04:41:18 zoom84 joins (~user@068-190-177-201.res.spectrum.com)
04:41:56 × day quits (~Unknown@unaffiliated/day) (Ping timeout: 272 seconds)
04:41:56 day_ is now known as day
04:42:21 <Axman6> gnumonik: can you share a more concrete example?
04:44:39 <Axman6> gnumonik: given that code it's difficult to tell what the types are, I can sort of infer them, but some type signatures and definitions of the sums and products would be good
04:45:44 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 272 seconds)
04:46:09 <Axman6> :t set'
04:46:11 <lambdabot> ASetter' s a -> a -> s -> s
04:46:16 <Axman6> :t set
04:46:18 <lambdabot> ASetter s t a b -> b -> s -> t
04:47:32 <hololeap> doesn't lens composition get reversed from the usual order, e.g. (fieldPrism . ix i . adtLens), assuming that the sum type is the "topmost" structure
04:47:56 × solonarv quits (~solonarv@adijon-655-1-70-207.w90-13.abo.wanadoo.fr) (Ping timeout: 256 seconds)
04:47:58 × zacts quits (~zacts@dragora/developer/zacts) (Quit: leaving)
04:48:11 × brandly quits (~brandly@c-73-68-15-46.hsd1.ma.comcast.net) (Ping timeout: 240 seconds)
04:48:32 <Axman6> yeah if it's a product containing a list containing a sum then it would be fieldLens . ix i . sumPrism
04:48:43 <hololeap> "topmost" isn't very descriptive. i mean the first structure you navigate
04:48:54 <hololeap> right
04:49:07 <Axman6> it looks to me like it is doing the right thing, assuming it is what I said it is
04:50:43 <hololeap> oh, so it would be the normal order of composition then (same as functions)? i remembered composing lens' to be the opposite of what you usually do
04:51:54 <gnumonik> It's actually a sum containing a product containing a list of sums. The actual context of this is pretty substantial. I'm writing a protocol analyzer that wraps different message types in one big sum type. The 'adtLens' thing is actually a composition of lenses and prisms but I dunno that that matters
04:52:28 <hololeap> sorry, i misread
04:52:35 hololeap edges away from the conversation
04:54:08 <dsal> > Right (1, [Right 2, Left 3, Right 4]) ^.. _Right . _2 . folded . _Right
04:54:11 <lambdabot> [2,4]
04:56:23 <dsal> > Right (1, [Right 2, Left 3, Right 4]) & _Right . _2 . traversed . _Right %~ (^2)
04:56:25 <lambdabot> Right (1,[Right 4,Left 3,Right 16])
04:56:32 <Axman6> :t (folded, each)
04:56:34 <lambdabot> (Indexable Int p, Contravariant f1, Each s t a1 b, Foldable f2, Applicative f1, Applicative f3) => (p a2 (f1 a2) -> f2 a2 -> f1 (f2 a2), (a1 -> f3 b) -> s -> f3 t)
04:56:44 × zoom84 quits (~user@068-190-177-201.res.spectrum.com) (Quit: WeeChat 2.9)
04:57:03 <dsal> Oh, I never think of each like that. That's pretty neat.
04:57:15 <dsal> Lens doesn't fit in my tiny headcache
04:58:55 × ixian quits (~mgold@2002:4a74:ba78:1701:0:ff:fe78:6269) (Ping timeout: 240 seconds)
05:00:37 ixian joins (~mgold@terra.bitplane.org)
05:01:26 <gnumonik> Ugh I can't even make this more concrete. If there's nothing wrong with that function then I think I just can't do what I want with lens. That's literally the function I use.
05:03:28 × dansho quits (~dansho@ip68-108-167-185.lv.lv.cox.net) (Remote host closed the connection)
05:04:12 <dsal> The above examples match your description. It's hard to guess what you're doing differently.
05:06:28 hackage reanimate-svg 0.12.1.0 - SVG file loader and serializer https://hackage.haskell.org/package/reanimate-svg-0.12.1.0 (DavidHimmelstrup)
05:09:44 × mathlover2 quits (~mathlover@2604:6000:1013:129e:755e:eccf:8735:da37) (Quit: Leaving)
05:09:55 × falafel quits (~falafel@2605:e000:1527:d491:99fe:5613:f0a7:56f0) (Ping timeout: 240 seconds)
05:10:35 xff0x joins (~fox@2001:1a81:5339:8000:bdc7:ef33:4985:5e4f)
05:10:44 GyroW_ joins (~GyroW@ptr-48ujrfd1ztq5fjywfw3.18120a2.ip6.access.telenet.be)
05:10:45 × GyroW_ quits (~GyroW@ptr-48ujrfd1ztq5fjywfw3.18120a2.ip6.access.telenet.be) (Changing host)
05:10:45 GyroW_ joins (~GyroW@unaffiliated/gyrow)
05:11:07 × GyroW quits (~GyroW@unaffiliated/gyrow) (Ping timeout: 260 seconds)
05:11:53 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
05:13:29 <gnumonik> Well, if I'm going to start over I have a question: My goal here is to find a way to expose lens functionality to the user without writing a bunch of boilerplate for every record field/constructor. I was trying to use TH to generate parsers for every valid combination of nested records/type constructors (i.e. the string "foo.bar" parses to the composition of lenses foo and bar). Is there an... obvious easier way to do that?
05:13:54 coot joins (~coot@37.30.49.218.nat.umts.dynamic.t-mobile.pl)
05:14:42 <dsal> the lens library does that for you.
05:16:42 <gnumonik> huh? how?
05:16:43 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 260 seconds)
05:18:27 snakemasterflex joins (~snakemast@213.100.206.23)
05:18:33 × Tritlo quits (sid58727@gateway/web/irccloud.com/x-vuffzyrxnybrguux) (Ping timeout: 272 seconds)
05:18:50 × howdoi quits (uid224@gateway/web/irccloud.com/x-bfkecngtkcukjezu) (Quit: Connection closed for inactivity)
05:19:55 ishutin_ joins (~Ishutin@193-110-63-54.cable-modem.hdsnet.hu)
05:20:10 Tritlo joins (sid58727@gateway/web/irccloud.com/x-gcmzpwtjgmfrhnky)
05:20:13 <gnumonik> Er maybe that wasn't clear. What I really need is a function :: String -> Lens, since I was hoping to use the functionality in a small DSL. When I say I'm trying to generate parsers, I mean functions that take strings and spit out lenses/prisms/traversals. (I'm sorry if this is stupid, Haskell's my first programming language and I've been teaching myself without much guidance)
05:22:45 × snakemasterflex quits (~snakemast@213.100.206.23) (Ping timeout: 240 seconds)
05:23:18 × ishutin quits (~Ishutin@92-249-150-146.static.digikabel.hu) (Ping timeout: 260 seconds)
05:24:41 petersen joins (~petersen@redhat/juhp)
05:26:45 snakemasterflex joins (~snakemast@213.100.206.23)
05:27:01 × kori quits (~kori@arrowheads/kori) (Ping timeout: 244 seconds)
05:27:27 × spew quits (uid195861@gateway/web/irccloud.com/x-zoqmilcrntqznxpj) (Quit: Connection closed for inactivity)
05:36:10 idhugo joins (~idhugo@563472ae.rev.stofanet.dk)
05:37:18 × snakemasterflex quits (~snakemast@213.100.206.23) (Ping timeout: 260 seconds)
05:37:43 falafel joins (~falafel@2605:e000:1527:d491:99fe:5613:f0a7:56f0)
05:37:47 × shailangsa quits (~shailangs@host165-120-169-97.range165-120.btcentralplus.com) (Ping timeout: 240 seconds)
05:37:48 snakemasterflex joins (~snakemast@213.100.206.23)
05:41:42 <jackdk> I think dsal's saying that the point of lens is that lenses themselves compose with `.`, so you shouldn't feel like you have to generate all the compositions yourself
05:43:50 kori joins (~kori@arrowheads/kori)
05:45:31 <dsal> Well, I mean you don't have to generate the boilerplate for every field. That's what makeLenses does. But doing this at runtime is a bit weird.
05:46:47 <[exa]> kindof guess that gnumonik only wants an autogenerated dictionary that does f "foo" = foo
05:47:10 <[exa]> the rest (like parsing out the dot and joining the results) can be easily done with the parser
05:47:57 hackage hoauth2 1.16.0 - Haskell OAuth2 authentication client https://hackage.haskell.org/package/hoauth2-1.16.0 (HaishengWu)
05:48:28 <gnumonik> yeah, ideally i'd not have to pre-generate the entire string, but that seemed to work (up to a point anyway) whereas storing a variety of differently-typed lenses in any kind of data structure did not
05:48:58 × idhugo quits (~idhugo@563472ae.rev.stofanet.dk) (Ping timeout: 260 seconds)
05:49:06 <dsal> How would a user use this mechanism?
05:49:43 <dsal> Is it just about making runtime errors out of lens expressions?
05:51:09 albert_91 joins (~Albert@p200300e5ff0b5b4248a33bded2872db1.dip0.t-ipconnect.de)
05:52:51 <gnumonik> Not really. I wanted to somehow leverage lens to allow a user to select fields in data types that represent network packets and filter or replace those fields. But given that there are... i dunno, a few thousand network protocols out there, I wanted some way of automating the construction of functions for doing those things.
05:53:01 bahamas joins (~lucian@unaffiliated/bahamas)
05:54:26 <dsal> I think that makes sense. The string is throwing me off, though. I think it's a confusing detail. If you didn't have the string, and someone were using your library, what would they have to do now in one example?
05:55:25 × albert_91 quits (~Albert@p200300e5ff0b5b4248a33bded2872db1.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
05:55:47 shatriff joins (~vitaliish@217.27.153.240)
05:56:55 thir joins (~thir@p200300f27f0fc60038c1b16891cbfa03.dip0.t-ipconnect.de)
05:57:23 <dsal> because, as jackdk says, you don't need to generate all the combinations, but you might be able to write some useful helpers that skip a few common steps.
06:00:01 × MasterGruntR75 quits (~MasterGru@185.244.214.216) ()
06:03:07 aplainze1akind joins (~johndoe@captainludd.powered.by.lunarbnc.net)
06:03:15 jcarpenter2 joins (~rofl@96.78.87.197)
06:04:21 <gnumonik> Well I wasn't exactly writing a library; the rest of the program (it's a packet stream generator/processor, for lack of a better term), is a small dsl for live packet modification/analysis that uses libpcap and the machines library
06:04:47 carldd10 joins (~carldd@90-224-49-113-no56.tbcn.telia.com)
06:05:00 brown121407_ joins (~brown1214@2001:19f0:6c01:2b9c:3c66:4201:22f3:3ebc)
06:05:01 × jtojnar quits (jtojnarmat@gateway/shell/matrix.org/x-gjvcckkmfrtqleyn) (*.net *.split)
06:05:01 × rawles quits (~r@unaffiliated/rawles) (*.net *.split)
06:05:01 × aplainzetakind quits (~johndoe@captainludd.powered.by.lunarbnc.net) (*.net *.split)
06:05:01 × sphalerite quits (~sphalerit@NixOS/user/lheckemann) (*.net *.split)
06:05:01 × ocharles quits (sid30093@musicbrainz/user/ocharles) (*.net *.split)
06:05:01 × metadave quits (sid28102@gateway/web/irccloud.com/x-saqsamxyttpjnhcp) (*.net *.split)
06:05:01 × ajmcmiddlin quits (sid284402@gateway/web/irccloud.com/x-ioikmsgxhbssuurt) (*.net *.split)
06:05:01 × cvlad- quits (sid203065@gateway/web/irccloud.com/x-ohozyplbhkhukaip) (*.net *.split)
06:05:01 × Cir0X quits (sid221743@gateway/web/irccloud.com/x-cpmvkyxaeuqbghtu) (*.net *.split)
06:05:01 × koankeeper quits (sid216950@gateway/web/irccloud.com/x-ccxungdzitxujqnk) (*.net *.split)
06:05:01 × rodlogic__ quits (sid214676@gateway/web/irccloud.com/x-baxtgbtrpgxheice) (*.net *.split)
06:05:01 × alehander92 quits (sid331460@gateway/web/irccloud.com/x-kyfpobayuduivyro) (*.net *.split)
06:05:01 × pasukon quits (sid49097@gateway/web/irccloud.com/x-uwiqcjpvkreobzhx) (*.net *.split)
06:05:01 × Firedancer quits (sid336191@gateway/web/irccloud.com/x-qvrclkltirfahdkn) (*.net *.split)
06:05:01 × aizen_s quits (sid462968@gateway/web/irccloud.com/x-tvunfsqxbrkdapxk) (*.net *.split)
06:05:01 × graingert quits (sid128301@gateway/web/irccloud.com/x-yubepytnnhokizvs) (*.net *.split)
06:05:01 × darthThorik quits (sid39589@gateway/web/irccloud.com/x-rxkyoafrogbhiwsr) (*.net *.split)
06:05:01 × lexi-lambda quits (sid92601@gateway/web/irccloud.com/x-domkjkegafyntpmw) (*.net *.split)
06:05:01 × FMJz____ quits (sid279245@gateway/web/irccloud.com/x-elbokqjeheccquxp) (*.net *.split)
06:05:01 × johs quits (sid246410@gateway/web/irccloud.com/x-muqxisckhdengjbz) (*.net *.split)
06:05:01 × brown121407 quits (~brown1214@fsf/member/brown121407) (*.net *.split)
06:05:01 × pepeiborra quits (sid443799@gateway/web/irccloud.com/x-srqetfybaannrdjz) (*.net *.split)
06:05:01 × themsay[m] quits (themsaymat@gateway/shell/matrix.org/x-rdynrutjzsdvufmx) (*.net *.split)
06:05:01 × chreekat[m]1 quits (chreekatma@gateway/shell/matrix.org/x-jpfnucpqjtwzgcaa) (*.net *.split)
06:05:01 × thi quits (sid97277@gateway/web/irccloud.com/x-dqtrzegkhhzyfxqr) (*.net *.split)
06:05:01 × ullbeking quits (sid5364@gateway/web/irccloud.com/x-usiikxzxacqmemve) (*.net *.split)
06:05:01 × zopsi quits (zopsi@2600:3c00::f03c:91ff:fe14:551f) (*.net *.split)
06:05:01 × ezzieyguywuf quits (~Unknown@unaffiliated/ezzieyguywuf) (*.net *.split)
06:05:01 × connrs- quits (~connrs@runciter.connrs.uk) (*.net *.split)
06:05:01 × thaumavorio quits (~thaumavor@thaumavor.io) (*.net *.split)
06:05:01 × SolarAquarion quits (SolarAquar@gateway/shell/panicbnc/x-oeudzyiyixftjdbl) (*.net *.split)
06:05:01 × alvinsj[m] quits (alvinsjmat@gateway/shell/matrix.org/x-zctlkjvmpqfdbdtm) (*.net *.split)
06:05:01 × hololeap quits (~hololeap@unaffiliated/hololeap) (*.net *.split)
06:05:01 × Xnuk quits (~xnuk@vultr.xnu.kr) (*.net *.split)
06:05:01 × eyenx quits (~eyenxeyen@unaffiliated/eye/x-1653358) (*.net *.split)
06:05:01 × Cerise quits (~jerry@unaffiliated/cerise) (*.net *.split)
06:05:01 × jrqc quits (~rofl@96.78.87.197) (*.net *.split)
06:05:01 × operand quits (~operand@is.altijd.moe) (*.net *.split)
06:05:01 × carldd1 quits (~carldd@90-224-49-113-no56.tbcn.telia.com) (*.net *.split)
06:05:01 × CitizenSnips quits (~CitizenSn@irc.refl.club) (*.net *.split)
06:05:01 × rslima_____ quits (sid26145@gateway/web/irccloud.com/x-vbogpauczgzfxuev) (*.net *.split)
06:05:01 × mudri quits (sid317655@gateway/web/irccloud.com/x-wgciiciclurklmio) (*.net *.split)
06:05:01 × dopplergange quits (~dop@titan.pathogen.is) (*.net *.split)
06:05:01 × andi- quits (~andi-@NixOS/user/andi-) (*.net *.split)
06:05:01 × hyiltiz-M quits (hyiltizkde@gateway/shell/kde/matrix/x-gsazjbgdfcbtdfre) (*.net *.split)
06:05:01 × joshmeredith quits (sid387798@gateway/web/irccloud.com/x-lhhtwrcyukiolswv) (*.net *.split)
06:05:01 × pong quits (chiya@2406:3003:2077:2341::babe) (*.net *.split)
06:05:01 × coeus quits (~coeus@p200300d02724ef00d20f0ecf5ac74df4.dip0.t-ipconnect.de) (*.net *.split)
06:05:01 × nopf quits (~frosch@static.179.17.76.144.clients.your-server.de) (*.net *.split)
06:05:01 × M2tias quits (m2@seri.fi) (*.net *.split)
06:05:06 polyrain joins (~polyrain@130.102.13.177)
06:05:10 CitizenS- joins (~CitizenSn@irc.refl.club)
06:05:10 aplainze1akind is now known as aplainzetakind
06:05:12 <gnumonik> If it were possible (maybe it is? couldn't figure out) to just package ghci in a binary I suppose I could just do that and skip the parsing.
06:05:13 dopplerg- joins (~dop@titan.pathogen.is)
06:05:15 ocharles joins (sid30093@musicbrainz/user/ocharles)
06:05:16 lexi-lambda joins (sid92601@gateway/web/irccloud.com/x-tjxetnhmsaedwtsv)
06:05:16 mudri joins (sid317655@gateway/web/irccloud.com/x-ewrkkkqbsfrqlwpo)
06:05:17 pasukon joins (sid49097@gateway/web/irccloud.com/x-zvjflytzjcvxxkxp)
06:05:18 rodlogic__ joins (sid214676@gateway/web/irccloud.com/x-mpkvpqnfqcxewmmv)
06:05:18 koankeeper joins (sid216950@gateway/web/irccloud.com/x-bkecwwfkbfgjodrp)
06:05:19 Cir0X joins (sid221743@gateway/web/irccloud.com/x-qlritdmlnfgwpmoo)
06:05:19 cvlad- joins (sid203065@gateway/web/irccloud.com/x-efqqsgkcshqvhkds)
06:05:20 thi joins (sid97277@gateway/web/irccloud.com/x-vjszalnbbkcfzara)
06:05:20 Firedancer joins (sid336191@gateway/web/irccloud.com/x-lxrtxgmxxnrqvfvu)
06:05:21 ajmcmiddlin joins (sid284402@gateway/web/irccloud.com/x-uarbdiezmlsauejy)
06:05:22 rawles joins (~r@unaffiliated/rawles)
06:05:22 operand joins (~operand@is.altijd.moe)
06:05:25 Xnuk joins (~xnuk@vultr.xnu.kr)
06:05:26 zopsi joins (~zopsi@irc.dir.ac)
06:05:26 thaumavorio joins (~thaumavor@thaumavor.io)
06:05:30 connrs joins (~connrs@runciter.connrs.uk)
06:05:30 alehander92 joins (sid331460@gateway/web/irccloud.com/x-ialhrufekwqdevrg)
06:05:30 hololeap joins (~hololeap@unaffiliated/hololeap)
06:05:31 hyiltiz-M joins (hyiltizkde@gateway/shell/kde/matrix/x-szzrzvhizldgudqq)
06:05:32 eyenx joins (~eyenxeyen@unaffiliated/eye/x-1653358)
06:05:32 pepeiborra joins (sid443799@gateway/web/irccloud.com/x-oyxipiqtflckullf)
06:05:33 FMJz____ joins (sid279245@gateway/web/irccloud.com/x-vztbmrxtdakgkjkm)
06:05:33 rslima_____ joins (sid26145@gateway/web/irccloud.com/x-umtfqvjespivtrcw)
06:05:35 metadave joins (sid28102@gateway/web/irccloud.com/x-homnjybqfevkpyxd)
06:05:36 johs joins (sid246410@gateway/web/irccloud.com/x-jrsdwkwqkuyhnhvg)
06:05:37 sphalerite joins (~sphalerit@NixOS/user/lheckemann)
06:05:41 aizen_s joins (sid462968@gateway/web/irccloud.com/x-gdqrmywyttbvydrx)
06:05:41 darthThorik joins (sid39589@gateway/web/irccloud.com/x-sosblkkrlevwimaq)
06:06:00 Cerise joins (~jerry@natsumi.devzero.info)
06:06:00 × Cerise quits (~jerry@natsumi.devzero.info) (Changing host)
06:06:00 Cerise joins (~jerry@unaffiliated/cerise)
06:06:01 nyd joins (~nyd@unaffiliated/elysian)
06:06:05 ullbeking joins (sid5364@gateway/web/irccloud.com/x-lkffkwwaixuaercd)
06:06:08 chreekat[m]1 joins (chreekatma@gateway/shell/matrix.org/x-ibewbadsrcqnctfw)
06:06:11 jtojnar joins (jtojnarmat@gateway/shell/matrix.org/x-dytikvjqsilohedp)
06:06:32 graingert joins (sid128301@gateway/web/irccloud.com/x-yfujwzpliujjotpd)
06:06:44 × mozzarella quits (~sam@unaffiliated/sam113101) (Remote host closed the connection)
06:06:53 <dsal> Oh. Well, I think it'd be far easier to get something parsing haskell to operate on lenses than to build a language that has some of lenses to do a subset of the same thing. After all, we have two bots here that do that. :)
06:07:41 andi- joins (~andi-@NixOS/user/andi-)
06:08:06 × GyroW_ quits (~GyroW@unaffiliated/gyrow) (Quit: Someone ate my pie)
06:08:23 GyroW joins (~GyroW@ptr-48ujrfd1ztq5fjywfw3.18120a2.ip6.access.telenet.be)
06:08:24 × GyroW quits (~GyroW@ptr-48ujrfd1ztq5fjywfw3.18120a2.ip6.access.telenet.be) (Changing host)
06:08:24 GyroW joins (~GyroW@unaffiliated/gyrow)
06:09:37 <gnumonik> The sort of people who might actually use the thing probably aren't going to do so if they have to deal with stack/cabal/etc though. My intended audience wasn't exactly coextensive with haskell users. Bleh.
06:10:11 themsay[m] joins (themsaymat@gateway/shell/matrix.org/session)
06:10:11 alvinsj[m] joins (alvinsjmat@gateway/shell/matrix.org/session)
06:10:11 ezzieyguywuf joins (~Unknown@unaffiliated/ezzieyguywuf)
06:10:11 joshmeredith joins (sid387798@gateway/web/irccloud.com/x-lhhtwrcyukiolswv)
06:10:11 pong joins (chiya@2406:3003:2077:2341::babe)
06:10:11 coeus joins (~coeus@p200300d02724ef00d20f0ecf5ac74df4.dip0.t-ipconnect.de)
06:10:11 nopf joins (~frosch@static.179.17.76.144.clients.your-server.de)
06:10:11 M2tias joins (m2@seri.fi)
06:10:11 × alvinsj[m] quits (alvinsjmat@gateway/shell/matrix.org/session) (Changing host)
06:10:11 alvinsj[m] joins (alvinsjmat@gateway/shell/matrix.org/x-iedunhycfauwrdat)
06:10:11 × themsay[m] quits (themsaymat@gateway/shell/matrix.org/session) (Changing host)
06:10:11 themsay[m] joins (themsaymat@gateway/shell/matrix.org/x-gldycjibrackcnzk)
06:10:18 <dsal> Sure, sure. But I don't install stack to interact with lambdabot :)
06:10:23 × themsay[m] quits (themsaymat@gateway/shell/matrix.org/x-gldycjibrackcnzk) (Max SendQ exceeded)
06:10:39 danvet_ joins (~Daniel@2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa)
06:11:05 themsay[m] joins (themsaymat@gateway/shell/matrix.org/x-nqzuuncfdzjshmrp)
06:11:21 <dsal> > let halt = halt in halt
06:11:24 <lambdabot> *Exception: <<loop>>
06:11:41 <dsal> Look at that thing solving the halting problem.
06:12:05 <dsal> I wonder if I named it something else if it'd still figure out what I was doing. It's pretty clever...
06:14:55 × pierrot quits (~pi@unaffiliated/pierrot) (Ping timeout: 272 seconds)
06:19:38 ym555 joins (~ym@156.199.113.15)
06:19:38 seanvert joins (~user@177.84.244.242)
06:22:53 × cole-h quits (~cole-h@c-73-48-197-220.hsd1.ca.comcast.net) (Ping timeout: 258 seconds)
06:24:17 × polyrain quits (~polyrain@130.102.13.177) (Quit: My MacBook has gone to sleep. ZZZzzz…)
06:24:35 <gnumonik> Wait is lambdabot actually parsing and evaluating this stuff? Like it's not just echoing to and from a ghci terminal somewhere?
06:25:59 × nbloomf quits (~nbloomf@2600:1700:83e0:1f40:71a4:5e3f:3433:7ae1) (Quit: My MacBook has gone to sleep. ZZZzzz…)
06:26:55 × snakemasterflex quits (~snakemast@213.100.206.23) (Ping timeout: 240 seconds)
06:27:07 <gnumonik> > foldr (+) [1..]
06:27:10 <lambdabot> error:
06:27:10 <lambdabot> • No instance for (Num [Integer]) arising from a use of ‘e_11’
06:27:10 <lambdabot> • In the expression: e_11
06:27:28 <gnumonik> Hm it does not work how I thought it did.
06:28:51 yoeljacobsen joins (~yoel.jaco@5.28.167.89)
06:29:02 <dsal> yahb is more of just a ghci
06:30:57 <gnumonik> Well I think lambdabot actually solved my problem. Some combination of mueval and hint should allow me to not have to parse an infinite number of lenses. Yay.
06:32:04 <dsal> Yeah, that sounds pretty great.
06:33:45 × justsomeguy quits (~justsomeg@unaffiliated/--/x-3805311) ()
06:35:20 × vicfred quits (~vicfred@unaffiliated/vicfred) (Remote host closed the connection)
06:35:42 vicfred joins (~vicfred@unaffiliated/vicfred)
06:36:40 polyrain joins (~polyrain@130.102.13.177)
06:36:47 dhouthoo joins (~dhouthoo@ptr-eiv6509pb4ifhdr9lsd.18120a2.ip6.access.telenet.be)
06:39:35 snakemasterflex joins (~snakemast@213.100.206.23)
06:45:23 × falafel quits (~falafel@2605:e000:1527:d491:99fe:5613:f0a7:56f0) (Remote host closed the connection)
06:46:43 pierrot joins (~pi@unaffiliated/pierrot)
06:52:35 idhugo joins (~idhugo@eduroam06.au.dk)
06:52:48 × Kaiepi quits (~Kaiepi@nwcsnbsc03w-47-55-225-82.dhcp-dynamic.fibreop.nb.bellaliant.net) (Remote host closed the connection)
06:53:10 Kaiepi joins (~Kaiepi@nwcsnbsc03w-47-55-225-82.dhcp-dynamic.fibreop.nb.bellaliant.net)
06:54:36 falafel joins (~falafel@2605:e000:1527:d491:99fe:5613:f0a7:56f0)
06:55:42 jden joins (~jden@185.244.214.216)
06:57:17 × idhugo quits (~idhugo@eduroam06.au.dk) (Ping timeout: 256 seconds)
06:59:24 × snakemasterflex quits (~snakemast@213.100.206.23) (Ping timeout: 260 seconds)
06:59:24 albert_91 joins (~Albert@p200300e5ff0b5b4248a33bded2872db1.dip0.t-ipconnect.de)
06:59:35 idhugo joins (~idhugo@users-1190.st.net.au.dk)
07:00:29 alp joins (~alp@2a01:e0a:58b:4920:cc00:82e3:fd5:ee39)
07:00:37 tbreslein joins (~tbreslein@2a02:8108:140:44f8::3cc4)
07:01:25 × bahamas quits (~lucian@unaffiliated/bahamas) (Ping timeout: 264 seconds)
07:01:30 entropygain joins (levitate@unaffiliated/entropygain)
07:02:12 mananamenos joins (~mananamen@84.122.202.215.dyn.user.ono.com)
07:02:32 chele joins (~chele@ip5b416ea2.dynamic.kabel-deutschland.de)
07:02:50 John20 joins (~John@82.46.59.122)
07:03:00 snakemasterflex joins (~snakemast@213.100.206.23)
07:04:09 × thir quits (~thir@p200300f27f0fc60038c1b16891cbfa03.dip0.t-ipconnect.de) (Ping timeout: 244 seconds)
07:04:29 danvet joins (~danvet@2a02:168:57f4:0:5f80:650d:c6e6:3453)
07:04:33 × danvet quits (~danvet@2a02:168:57f4:0:5f80:650d:c6e6:3453) (Client Quit)
07:06:32 × tzh quits (~tzh@2601:448:c500:5300::143b) (Quit: zzz)
07:06:49 × shafox quits (~shafox@106.51.234.111) (Remote host closed the connection)
07:07:34 mananamenos_ joins (~mananamen@84.122.202.215.dyn.user.ono.com)
07:07:41 × mananamenos_ quits (~mananamen@84.122.202.215.dyn.user.ono.com) (Read error: Connection reset by peer)
07:08:01 shafox joins (~shafox@106.51.234.111)
07:08:04 × shatriff quits (~vitaliish@217.27.153.240) (Remote host closed the connection)
07:10:21 × Rudd0 quits (~Rudd0@185.189.115.103) (Read error: Connection reset by peer)
07:10:45 × mananamenos quits (~mananamen@84.122.202.215.dyn.user.ono.com) (Ping timeout: 240 seconds)
07:14:54 oxide joins (~lambda@unaffiliated/mclaren)
07:15:49 kritzefitz joins (~kritzefit@fw-front.credativ.com)
07:16:07 SolarAquarion joins (SolarAquar@gateway/shell/panicbnc/x-wdutgpsghohoucfq)
07:16:52 × JohnTalent quits (~john@unaffiliated/johntalent) (Quit: leaving)
07:18:12 × albert_91 quits (~Albert@p200300e5ff0b5b4248a33bded2872db1.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
07:18:13 bahamas joins (~lucian@unaffiliated/bahamas)
07:18:18 zacts joins (~zacts@dragora/developer/zacts)
07:19:47 albert_91 joins (~Albert@p200300e5ff0b5b421cd7bb50d39404b6.dip0.t-ipconnect.de)
07:22:11 ralejs_ joins (~ralejs@2620:10d:c093:400::5:2842)
07:22:11 × ralejs quits (~ralejs@2620:10d:c093:400::5:2842) (Read error: Connection reset by peer)
07:28:27 hackage serverless-haskell 0.12.4 - Deploying Haskell code onto AWS Lambda using Serverless https://hackage.haskell.org/package/serverless-haskell-0.12.4 (AlexeyKotlyarov)
07:29:42 × GyroW quits (~GyroW@unaffiliated/gyrow) (Quit: Someone ate my pie)
07:30:00 GyroW joins (~GyroW@ptr-48ujrfd1ztq5fjywfw3.18120a2.ip6.access.telenet.be)
07:30:00 × GyroW quits (~GyroW@ptr-48ujrfd1ztq5fjywfw3.18120a2.ip6.access.telenet.be) (Changing host)
07:30:00 GyroW joins (~GyroW@unaffiliated/gyrow)
07:31:35 Sanchayan joins (~Sanchayan@136.185.184.11)
07:33:12 oisdk joins (~oisdk@2001:bb6:3329:d100:4f8:7c72:bd88:6c6a)
07:33:34 × zacts quits (~zacts@dragora/developer/zacts) (Quit: leaving)
07:35:19 × murphy_ quits (~murphy_@2604:2000:1281:8a9e:c24e:de35:eb75:8dab) (Remote host closed the connection)
07:35:37 murphy_ joins (~murphy_@2604:2000:1281:8a9e:5be4:8f01:b36d:6549)
07:36:05 __monty__ joins (~toonn@unaffiliated/toonn)
07:38:03 × abhixec quits (~abhixec@c-67-169-141-95.hsd1.ca.comcast.net) (Ping timeout: 260 seconds)
07:38:37 m0rphism joins (~m0rphism@HSI-KBW-046-005-177-122.hsi8.kabel-badenwuerttemberg.de)
07:43:54 Tuplanolla joins (~Tuplanoll@91-159-68-239.elisa-laajakaista.fi)
07:45:07 × polyrain quits (~polyrain@130.102.13.177) (Quit: My MacBook has gone to sleep. ZZZzzz…)
07:46:29 mpereira joins (~mpereira@2a02:810d:f40:d96:1c35:7f2e:59ff:953)
07:51:55 × amiri quits (~amiri@cpe-76-91-154-9.socal.res.rr.com) (Ping timeout: 240 seconds)
07:51:59 idhugo_ joins (~idhugo@users-1190.st.net.au.dk)
07:52:03 amiri joins (~amiri@cpe-76-91-154-9.socal.res.rr.com)
07:53:41 polyrain joins (~polyrain@130.102.13.170)
07:55:23 × idhugo quits (~idhugo@users-1190.st.net.au.dk) (Ping timeout: 240 seconds)
07:55:54 × Sgeo_ quits (~Sgeo@ool-18b982ad.dyn.optonline.net) (Read error: Connection reset by peer)
07:57:51 Buntspecht_ joins (~user@unaffiliated/siracusa)
07:57:52 × Buntspecht quits (~user@unaffiliated/siracusa) (Read error: Connection reset by peer)
07:58:17 Buntspecht_ is now known as Buntspecht
07:59:53 borne joins (~fritjof@2001:638:708:30da:1afd:4599:bd4b:9f4b)
08:03:25 × falafel quits (~falafel@2605:e000:1527:d491:99fe:5613:f0a7:56f0) (Ping timeout: 240 seconds)
08:08:07 × idhugo_ quits (~idhugo@users-1190.st.net.au.dk) (Ping timeout: 240 seconds)
08:08:27 hackage servant-auth-client 0.4.1.0 - servant-client/servant-auth compatibility https://hackage.haskell.org/package/servant-auth-client-0.4.1.0 (domenkozar)
08:11:37 × toorevitimirp quits (~tooreviti@117.182.180.245) (Ping timeout: 264 seconds)
08:12:41 toorevitimirp joins (~tooreviti@117.182.180.245)
08:12:58 hackage polysemy-zoo 0.7.0.1 - Experimental, user-contributed effects and interpreters for polysemy https://hackage.haskell.org/package/polysemy-zoo-0.7.0.1 (KingoftheHomeless)
08:17:57 hackage servant-auth-server 0.4.6.0 - servant-server/servant-auth compatibility https://hackage.haskell.org/package/servant-auth-server-0.4.6.0 (domenkozar)
08:19:58 fendor joins (~fendor@e237-037.eduroam.tuwien.ac.at)
08:22:11 × jedws quits (~jedws@121.209.186.103) (Quit: My MacBook has gone to sleep. ZZZzzz…)
08:22:31 ramon_ joins (~ramon@2001:1c01:3c01:2300:f093:b478:1b8f:4797)
08:22:51 × mirrorbird quits (~psutcliff@2a00:801:2d5:9d73:ff00:6553:d451:a276) (Ping timeout: 272 seconds)
08:24:00 cpressey joins (~cpressey@88.144.95.3)
08:24:29 chaosmasttter joins (~chaosmast@p200300c4a73b2e01d0131264df465fff.dip0.t-ipconnect.de)
08:24:58 hackage servant-auth-swagger 0.2.10.1 - servant-swagger/servant-auth compatibility https://hackage.haskell.org/package/servant-auth-swagger-0.2.10.1 (domenkozar)
08:25:14 cfricke joins (~cfricke@unaffiliated/cfricke)
08:27:12 falafel joins (~falafel@2605:e000:1527:d491:99fe:5613:f0a7:56f0)
08:27:14 × bahamas quits (~lucian@unaffiliated/bahamas) (Ping timeout: 256 seconds)
08:27:20 × hnOsmium0001 quits (uid453710@gateway/web/irccloud.com/x-lsiqjycknfirtsck) (Quit: Connection closed for inactivity)
08:27:56 Amras joins (~Amras@unaffiliated/amras0000)
08:28:22 × taurux quits (~taurux@net-188-152-143-169.cust.dsl.teletu.it) (Ping timeout: 244 seconds)
08:28:47 taurux joins (~taurux@net-93-144-148-40.cust.dsl.teletu.it)
08:30:31 jedws joins (~jedws@121.209.186.103)
08:31:13 × jedws quits (~jedws@121.209.186.103) (Client Quit)
08:31:19 × da39a3ee5e6b4b0d quits (~textual@n11211935170.netvigator.com) (Quit: My MacBook has gone to sleep. ZZZzzz…)
08:35:18 Ariakenom joins (~Ariakenom@193.254.193.1)
08:35:25 × falafel quits (~falafel@2605:e000:1527:d491:99fe:5613:f0a7:56f0) (Ping timeout: 240 seconds)
08:37:31 shatriff joins (~vitaliish@88.155.115.165)
08:38:17 thc202 joins (~thc202@unaffiliated/thc202)
08:38:20 × taurux quits (~taurux@net-93-144-148-40.cust.dsl.teletu.it) (Ping timeout: 260 seconds)
08:38:49 × Amras quits (~Amras@unaffiliated/amras0000) (Remote host closed the connection)
08:38:55 jle` joins (~mstksg@cpe-23-240-75-236.socal.res.rr.com)
08:38:55 × jle` quits (~mstksg@cpe-23-240-75-236.socal.res.rr.com) (Changing host)
08:38:55 jle` joins (~mstksg@unaffiliated/mstksg)
08:39:25 × ramon_ quits (~ramon@2001:1c01:3c01:2300:f093:b478:1b8f:4797) ()
08:40:02 taurux joins (~taurux@net-93-146-7-28.cust.vodafonedsl.it)
08:40:07 ramon_ joins (~ramon@2001:1c01:3c01:2300:f093:b478:1b8f:4797)
08:42:33 × ramon_ quits (~ramon@2001:1c01:3c01:2300:f093:b478:1b8f:4797) (Client Quit)
08:43:31 albert_99 joins (~Albert@p200300e5ff0b5b39340e476afbaec452.dip0.t-ipconnect.de)
08:45:55 × albert_91 quits (~Albert@p200300e5ff0b5b421cd7bb50d39404b6.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
08:48:35 shaman_king joins (b94186b1@185.65.134.177)
08:48:37 <shaman_king> hi all
08:48:49 <shaman_king> i want to learn more about haskell and beyond
08:49:26 livvy joins (~livvy@gateway/tor-sasl/livvy)
08:51:21 DavidEichmann joins (~david@43.240.198.146.dyn.plus.net)
08:54:09 Amras joins (~Amras@unaffiliated/amras0000)
08:55:53 <shaman_king> hi
09:00:01 × jden quits (~jden@185.244.214.216) ()
09:00:18 × notzmv` quits (~user@177.45.26.174) (Ping timeout: 260 seconds)
09:04:11 × shatriff quits (~vitaliish@88.155.115.165) (Remote host closed the connection)
09:04:58 hackage aterm 0.1.0.2 - serialisation for Haskell values with sharing support https://hackage.haskell.org/package/aterm-0.1.0.2 (ChristianMaeder)
09:06:11 × todda7 quits (~torstein@athedsl-4367507.home.otenet.gr) (Ping timeout: 258 seconds)
09:07:30 shatriff joins (~vitaliish@88.155.115.165)
09:07:35 fendor_ joins (~fendor@212095005149.public.telering.at)
09:10:32 × drbean quits (~drbean@TC210-63-209-213.static.apol.com.tw) (Ping timeout: 260 seconds)
09:10:38 × Buntspecht quits (~user@unaffiliated/siracusa) (Quit: Bye!)
09:10:48 × fendor quits (~fendor@e237-037.eduroam.tuwien.ac.at) (Ping timeout: 256 seconds)
09:12:40 raichoo joins (~raichoo@dslb-088-077-027-113.088.077.pools.vodafone-ip.de)
09:13:50 × polyrain quits (~polyrain@130.102.13.170) (Quit: My MacBook has gone to sleep. ZZZzzz…)
09:14:55 × phaul quits (~phaul@ruby/staff/phaul) (Ping timeout: 246 seconds)
09:18:32 <tomsmeding> If I have a type class 'C s a' with an associated type 'type T a', how can I promise that for every instance 'C s a', the type 'T a' will be an instance of class 'D' (i.e. we will have 'D (T a)')?
09:19:14 <tomsmeding> alternatively, can I promise that for a particular instance
09:19:22 <shaman_king> i think thats wrong.
09:19:28 × heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
09:20:24 <tomsmeding> how so?
09:22:18 × Sanchayan quits (~Sanchayan@136.185.184.11) (Quit: leaving)
09:22:35 bahamas joins (~lucian@unaffiliated/bahamas)
09:25:04 × yoeljacobsen quits (~yoel.jaco@5.28.167.89) (Ping timeout: 246 seconds)
09:26:28 hackage attoparsec-data 1.0.5 - Parsers for the standard Haskell data types https://hackage.haskell.org/package/attoparsec-data-1.0.5 (NikitaVolkov)
09:27:17 <cpressey> tomsmeding: I would be surprised if you could say that directly, but maybe you could constraints on 'a' in both C and D? Or perhaps a smart constructor for D's?
09:27:31 <shaman_king> its wrong
09:27:34 <dminuoso> tomsmeding: MPTC+fundeps instead of associated types, then you could make it a superclass constraints
09:27:59 <tomsmeding> problem is that I don't control D, though I do control C
09:27:59 <dminuoso> Or.. is the superclass constraint possible perhaps?
09:28:24 <tomsmeding> basically, this is a "shim" for D
09:29:07 <tomsmeding> ah yes putting T as a type argument to C and using fundeps might work...
09:29:09 shaman_king parts (b94186b1@185.65.134.177) ()
09:29:15 <tomsmeding> interesting visit
09:29:39 <dminuoso> % class D (T a) => C s a where type T a
09:29:40 <yahb> dminuoso:
09:29:43 <dminuoso> tomsmeding: ^- this seems to work fine
09:29:52 <tomsmeding> oooooooh
09:30:07 tomsmeding is off to the editor
09:30:48 Saukk joins (~Saukk@2001:998:f1:3963:1c59:9bb5:b94c:2)
09:30:58 ubert joins (~Thunderbi@2a02:8109:9880:303c:ca5b:76ff:fe29:f233)
09:33:29 × jonathanx quits (~jonathan@dyn-8-sc.cdg.chalmers.se) (Remote host closed the connection)
09:34:29 jonathanx joins (~jonathan@dyn-8-sc.cdg.chalmers.se)
09:35:47 × shatriff quits (~vitaliish@88.155.115.165) (Remote host closed the connection)
09:36:00 da39a3ee5e6b4b0d joins (~textual@n11211935170.netvigator.com)
09:36:23 × seanvert quits (~user@177.84.244.242) (Read error: Connection reset by peer)
09:40:14 thir joins (~thir@p200300f27f0fc60038c1b16891cbfa03.dip0.t-ipconnect.de)
09:41:25 × nyd quits (~nyd@unaffiliated/elysian) (Ping timeout: 240 seconds)
09:44:10 nyd joins (~nyd@unaffiliated/elysian)
09:44:25 × thir quits (~thir@p200300f27f0fc60038c1b16891cbfa03.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
09:45:00 <tomsmeding> putting 'T a' as an extra type argument to C works very well :)
09:47:43 kuribas joins (~user@ptr-25vy0i9yx55ffflw5e3.18120a2.ip6.access.telenet.be)
09:51:11 <tomsmeding> and the fundep is indeed necessary
09:51:55 × Lord_of_Life quits (~Lord@unaffiliated/lord-of-life/x-0885362) (Ping timeout: 240 seconds)
09:51:59 yoeljacobsen joins (~yoel.jaco@5.28.167.89)
09:52:02 Lord_of_Life_ joins (~Lord@unaffiliated/lord-of-life/x-0885362)
09:53:16 Lord_of_Life_ is now known as Lord_of_Life
09:55:05 Implant1 joins (~Implant@178.162.212.214)
09:56:37 × aurieeeh quits (~aurieh@static.91.102.243.136.clients.your-server.de) (Ping timeout: 260 seconds)
09:57:01 × ArsenArsen quits (~Arsen@kshare/developer/ArsenArsen) (Ping timeout: 265 seconds)
09:58:29 × auri_ quits (~auri_@fsf/memeber/auri-) (Ping timeout: 272 seconds)
09:59:13 × GyroW quits (~GyroW@unaffiliated/gyrow) (Quit: Someone ate my pie)
09:59:15 gekh joins (~gkh@thor.kevinhill.nl)
09:59:23 GyroW joins (~GyroW@d54c03e98.access.telenet.be)
09:59:23 × GyroW quits (~GyroW@d54c03e98.access.telenet.be) (Changing host)
09:59:23 GyroW joins (~GyroW@unaffiliated/gyrow)
10:00:31 Rudd0 joins (~Rudd0@185.189.115.108)
10:01:39 × petersen quits (~petersen@redhat/juhp) (Quit: petersen)
10:01:49 <kuribas> is there a typeclass to say, type "a" is a record with field "f"?
10:02:02 ArsenArsen joins (~Arsen@kshare/developer/ArsenArsen)
10:02:30 auri_ joins (~auri_@fsf/memeber/auri-)
10:02:54 aurieeeh joins (~aurieh@static.91.102.243.136.clients.your-server.de)
10:03:40 todda7 joins (~torstein@2a02:587:d32:8d00:e12b:ad32:29e:9021)
10:07:22 <jiribenes> kuribas: There's a 'HasField' typeclass in GHC https://downloads.haskell.org/ghc/latest/docs/html/libraries/base-4.14.0.0/GHC-Records.html
10:07:23 × fendor_ quits (~fendor@212095005149.public.telering.at) (Read error: Connection reset by peer)
10:07:23 × xerox_ quits (~xerox@unaffiliated/xerox) (Ping timeout: 260 seconds)
10:07:47 <kuribas> jiribenes: right, thanks!
10:09:04 fendor_ joins (~fendor@e237-037.eduroam.tuwien.ac.at)
10:09:37 × coot quits (~coot@37.30.49.218.nat.umts.dynamic.t-mobile.pl) (Quit: coot)
10:09:57 polyrain joins (~polyrain@130.102.13.170)
10:10:05 × polyrain quits (~polyrain@130.102.13.170) (Client Quit)
10:13:25 × olligobber quits (olligobber@gateway/vpn/privateinternetaccess/olligobber) (Ping timeout: 240 seconds)
10:14:40 zariuq joins (~zar@fw4.ciirc.cvut.cz)
10:15:25 × GyroW quits (~GyroW@unaffiliated/gyrow) (Ping timeout: 240 seconds)
10:15:27 GyroW_ joins (~GyroW@ptr-48ujrfd1ztq5fjywfw3.18120a2.ip6.access.telenet.be)
10:15:27 × GyroW_ quits (~GyroW@ptr-48ujrfd1ztq5fjywfw3.18120a2.ip6.access.telenet.be) (Changing host)
10:15:27 GyroW_ joins (~GyroW@unaffiliated/gyrow)
10:15:56 × plutoniix quits (~q@175.176.222.7) (Quit: Leaving)
10:17:36 × zargoertzel quits (~zar@fw5.ciirc.cvut.cz) (Ping timeout: 272 seconds)
10:18:04 akegalj joins (~akegalj@93-138-123-17.adsl.net.t-com.hr)
10:19:58 heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
10:21:37 ralejs joins (~ralejs@2620:10d:c093:400::5:2842)
10:21:37 × ralejs_ quits (~ralejs@2620:10d:c093:400::5:2842) (Read error: Connection reset by peer)
10:24:49 × heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 264 seconds)
10:25:46 × todda7 quits (~torstein@2a02:587:d32:8d00:e12b:ad32:29e:9021) (Quit: Konversation terminated!)
10:25:58 todda7 joins (~torstein@athedsl-217541.home.otenet.gr)
10:26:26 olligobber joins (olligobber@gateway/vpn/privateinternetaccess/olligobber)
10:27:13 notzmv joins (~user@unaffiliated/zmv)
10:27:33 phaul joins (~phaul@ruby/staff/phaul)
10:30:10 × jle` quits (~mstksg@unaffiliated/mstksg) (Ping timeout: 246 seconds)
10:32:17 aarvar joins (~foewfoiew@50.35.43.33)
10:33:13 × hyiltiz-M quits (hyiltizkde@gateway/shell/kde/matrix/x-szzrzvhizldgudqq) (*.net *.split)
10:33:13 × ralejs quits (~ralejs@2620:10d:c093:400::5:2842) (*.net *.split)
10:33:13 × GyroW_ quits (~GyroW@unaffiliated/gyrow) (*.net *.split)
10:33:13 × sphalerite quits (~sphalerit@NixOS/user/lheckemann) (*.net *.split)
10:33:13 × pasukon quits (sid49097@gateway/web/irccloud.com/x-zvjflytzjcvxxkxp) (*.net *.split)
10:33:13 × lexi-lambda quits (sid92601@gateway/web/irccloud.com/x-tjxetnhmsaedwtsv) (*.net *.split)
10:33:13 × mudri quits (sid317655@gateway/web/irccloud.com/x-ewrkkkqbsfrqlwpo) (*.net *.split)
10:33:13 × rodlogic__ quits (sid214676@gateway/web/irccloud.com/x-mpkvpqnfqcxewmmv) (*.net *.split)
10:33:14 × rawles quits (~r@unaffiliated/rawles) (*.net *.split)
10:33:14 × kori quits (~kori@arrowheads/kori) (*.net *.split)
10:33:14 × xff0x quits (~fox@2001:1a81:5339:8000:bdc7:ef33:4985:5e4f) (*.net *.split)
10:33:14 × berberman quits (~berberman@2408:8207:2563:5ae0:584e:a9ff:fe9b:d3fe) (*.net *.split)
10:33:14 × ghuntley quits (sid16877@gateway/web/irccloud.com/x-hazckpioupzucowz) (*.net *.split)
10:33:14 × carter quits (sid14827@gateway/web/irccloud.com/x-sizpssbboxwjlzfn) (*.net *.split)
10:33:14 × elvishjerricco quits (sid237756@NixOS/user/ElvishJerricco) (*.net *.split)
10:33:14 × conjunctive quits (sid433686@gateway/web/irccloud.com/x-svszloomofjzwqrv) (*.net *.split)
10:33:14 × adius quits (sid321344@gateway/web/irccloud.com/x-fevubjfnjnczxgiy) (*.net *.split)
10:33:14 × tchar quits (sid301738@gateway/web/irccloud.com/x-rgpmjtqqbhrmcohe) (*.net *.split)
10:33:14 × liszt_ quits (sid336875@gateway/web/irccloud.com/x-uuxepiucxpvvjuow) (*.net *.split)
10:33:14 × Ericson2314 quits (ericson231@gateway/shell/matrix.org/x-tddshmiwufwouryw) (*.net *.split)
10:33:14 × iinuwa1 quits (iinuwamatr@gateway/shell/matrix.org/x-vozqawbtzhuizygn) (*.net *.split)
10:33:14 × _flow_ quits (~none@salem.informatik.uni-erlangen.de) (*.net *.split)
10:33:14 × jokester_ quits (~mono@2001:19f0:5:1e1d:5400:1ff:fe45:5877) (*.net *.split)
10:33:14 × recon_- quits (~quassel@2602:febc:0:b6::6ca2) (*.net *.split)
10:33:14 × noCheese quits (~nocheese@unaffiliated/nocheese) (*.net *.split)
10:33:14 × angerman quits (sid209936@gateway/web/irccloud.com/x-oahfetnahbdvwgfo) (*.net *.split)
10:33:14 × verlet64_ quits (sid261276@gateway/web/irccloud.com/x-xjfovybibszlojpl) (*.net *.split)
10:33:14 × nick_h quits (sid319833@gateway/web/irccloud.com/x-omwgtsberokhnnup) (*.net *.split)
10:33:14 × joeyh_ quits (joeyh@kitenet.net) (*.net *.split)
10:33:14 × bitmapper quits (uid464869@gateway/web/irccloud.com/x-tfzdjxpokcsicuwj) (*.net *.split)
10:33:14 × balbirs quits (~balbirs__@bilbo.ozlabs.org) (*.net *.split)
10:33:14 × topos quits (uid467876@gateway/web/irccloud.com/x-twpqbqvekrcsozee) (*.net *.split)
10:33:14 × polyphem quits (~p0lyph3m@2a02:810d:640:776c:76d7:55f6:f85b:c889) (*.net *.split)
10:33:14 × parisienne quits (sid383587@gateway/web/irccloud.com/x-wkbgoesgrpfdelps) (*.net *.split)
10:33:14 × strugglingming quits (sid10571@gateway/web/irccloud.com/x-pwoyzccowxbiqivf) (*.net *.split)
10:33:14 × stree quits (~stree@50-108-75-26.adr01.mskg.mi.frontiernet.net) (*.net *.split)
10:33:14 × seanparsons quits (~sean@cpc145088-gill21-2-0-cust281.20-1.cable.virginm.net) (*.net *.split)
10:33:14 × dcoutts quits (~duncan@unaffiliated/dcoutts) (*.net *.split)
10:33:14 × thonkpod quits (~thonkpod@2001:19f0:ac01:b46:5400:1ff:fec7:d73d) (*.net *.split)
10:33:14 × liff quits (liff@kapsi.fi) (*.net *.split)
10:33:14 × PotatoHatsue quits (berbermanp@gateway/shell/matrix.org/x-lcuapfbpkatzswxh) (*.net *.split)
10:33:14 × dequbed quits (~dequbed@yanduxian.paranoidlabs.org) (*.net *.split)
10:33:14 × miklcct quits (quasselcor@2001:19f0:7001:5ad:5400:2ff:feb6:50d7) (*.net *.split)
10:33:14 × ThaEwat quits (thaewraptm@gateway/shell/matrix.org/x-mopjnwlxyxbzydyc) (*.net *.split)
10:33:14 × srid quits (sridmatrix@gateway/shell/matrix.org/x-zqttickmrfyduksr) (*.net *.split)
10:33:14 × michaelpj1 quits (michaelpjm@gateway/shell/matrix.org/x-bmrqrkqdmdnabvkc) (*.net *.split)
10:33:14 × johnnyboy[m] quits (gifumatrix@gateway/shell/matrix.org/x-xczqbcixpmjhwvre) (*.net *.split)
10:33:14 × lambdaclan quits (lambdaclan@gateway/shell/matrix.org/x-rosqvrjyauthsfym) (*.net *.split)
10:33:14 × io_r_us[m] quits (commandlin@gateway/shell/matrix.org/x-kjrwesnzoyenqgzx) (*.net *.split)
10:33:14 × fl0_id quits (~fl0_id@2a01:4f8:171:4de::40:2) (*.net *.split)
10:33:14 × barrucadu quits (~barrucadu@fsf/member/barrucadu) (*.net *.split)
10:33:14 × bcoppens quits (~bartcopp@kde/coppens) (*.net *.split)
10:33:14 × noteness quits (~noteness@unaffiliated/nessessary129) (*.net *.split)
10:33:14 × opqdonut quits (opqdonut@pseudo.fixme.fi) (*.net *.split)
10:33:14 × Velpoman quits (~Velpoman@159.65.76.124) (*.net *.split)
10:33:14 × dixie quits (~dixie@real.wilbury.sk) (*.net *.split)
10:33:14 × uwap quits (~uwap@genja.uwap.name) (*.net *.split)
10:33:25 × carlomagno quits (~cararell@inet-hqmc01-o.oracle.com) (Write error: Broken pipe)
10:33:29 stree joins (~stree@50-108-75-26.adr01.mskg.mi.frontiernet.net)
10:33:37 carlomagno joins (~cararell@inet-hqmc01-o.oracle.com)
10:34:41 ralejs joins (~ralejs@2620:10d:c093:400::5:2842)
10:34:41 GyroW_ joins (~GyroW@unaffiliated/gyrow)
10:34:41 sphalerite joins (~sphalerit@NixOS/user/lheckemann)
10:34:41 rawles joins (~r@unaffiliated/rawles)
10:34:41 rodlogic__ joins (sid214676@gateway/web/irccloud.com/x-mpkvpqnfqcxewmmv)
10:34:41 pasukon joins (sid49097@gateway/web/irccloud.com/x-zvjflytzjcvxxkxp)
10:34:41 mudri joins (sid317655@gateway/web/irccloud.com/x-ewrkkkqbsfrqlwpo)
10:34:41 lexi-lambda joins (sid92601@gateway/web/irccloud.com/x-tjxetnhmsaedwtsv)
10:34:41 kori joins (~kori@arrowheads/kori)
10:34:41 xff0x joins (~fox@2001:1a81:5339:8000:bdc7:ef33:4985:5e4f)
10:34:41 berberman joins (~berberman@2408:8207:2563:5ae0:584e:a9ff:fe9b:d3fe)
10:34:41 ghuntley joins (sid16877@gateway/web/irccloud.com/x-hazckpioupzucowz)
10:34:41 carter joins (sid14827@gateway/web/irccloud.com/x-sizpssbboxwjlzfn)
10:34:41 elvishjerricco joins (sid237756@NixOS/user/ElvishJerricco)
10:34:41 conjunctive joins (sid433686@gateway/web/irccloud.com/x-svszloomofjzwqrv)
10:34:41 adius joins (sid321344@gateway/web/irccloud.com/x-fevubjfnjnczxgiy)
10:34:41 tchar joins (sid301738@gateway/web/irccloud.com/x-rgpmjtqqbhrmcohe)
10:34:41 liszt_ joins (sid336875@gateway/web/irccloud.com/x-uuxepiucxpvvjuow)
10:34:41 Ericson2314 joins (ericson231@gateway/shell/matrix.org/x-tddshmiwufwouryw)
10:34:41 iinuwa1 joins (iinuwamatr@gateway/shell/matrix.org/x-vozqawbtzhuizygn)
10:34:41 _flow_ joins (~none@salem.informatik.uni-erlangen.de)
10:34:41 jokester_ joins (~mono@2001:19f0:5:1e1d:5400:1ff:fe45:5877)
10:34:41 recon_- joins (~quassel@2602:febc:0:b6::6ca2)
10:34:41 noCheese joins (~nocheese@unaffiliated/nocheese)
10:34:41 angerman joins (sid209936@gateway/web/irccloud.com/x-oahfetnahbdvwgfo)
10:34:41 verlet64_ joins (sid261276@gateway/web/irccloud.com/x-xjfovybibszlojpl)
10:34:41 nick_h joins (sid319833@gateway/web/irccloud.com/x-omwgtsberokhnnup)
10:34:41 joeyh_ joins (joeyh@kitenet.net)
10:34:41 bitmapper joins (uid464869@gateway/web/irccloud.com/x-tfzdjxpokcsicuwj)
10:34:41 balbirs joins (~balbirs__@bilbo.ozlabs.org)
10:34:41 topos joins (uid467876@gateway/web/irccloud.com/x-twpqbqvekrcsozee)
10:34:41 polyphem joins (~p0lyph3m@2a02:810d:640:776c:76d7:55f6:f85b:c889)
10:34:41 parisienne joins (sid383587@gateway/web/irccloud.com/x-wkbgoesgrpfdelps)
10:34:41 strugglingming joins (sid10571@gateway/web/irccloud.com/x-pwoyzccowxbiqivf)
10:34:41 seanparsons joins (~sean@cpc145088-gill21-2-0-cust281.20-1.cable.virginm.net)
10:34:41 dcoutts joins (~duncan@unaffiliated/dcoutts)
10:34:41 fl0_id joins (~fl0_id@2a01:4f8:171:4de::40:2)
10:34:41 ThaEwat joins (thaewraptm@gateway/shell/matrix.org/x-mopjnwlxyxbzydyc)
10:34:41 thonkpod joins (~thonkpod@2001:19f0:ac01:b46:5400:1ff:fec7:d73d)
10:34:41 liff joins (liff@kapsi.fi)
10:34:41 PotatoHatsue joins (berbermanp@gateway/shell/matrix.org/x-lcuapfbpkatzswxh)
10:34:41 dequbed joins (~dequbed@yanduxian.paranoidlabs.org)
10:34:41 miklcct joins (quasselcor@2001:19f0:7001:5ad:5400:2ff:feb6:50d7)
10:34:41 srid joins (sridmatrix@gateway/shell/matrix.org/x-zqttickmrfyduksr)
10:34:41 michaelpj1 joins (michaelpjm@gateway/shell/matrix.org/x-bmrqrkqdmdnabvkc)
10:34:41 johnnyboy[m] joins (gifumatrix@gateway/shell/matrix.org/x-xczqbcixpmjhwvre)
10:34:41 lambdaclan joins (lambdaclan@gateway/shell/matrix.org/x-rosqvrjyauthsfym)
10:34:41 io_r_us[m] joins (commandlin@gateway/shell/matrix.org/x-kjrwesnzoyenqgzx)
10:34:41 barrucadu joins (~barrucadu@fsf/member/barrucadu)
10:34:41 bcoppens joins (~bartcopp@kde/coppens)
10:34:41 noteness joins (~noteness@unaffiliated/nessessary129)
10:34:41 opqdonut joins (opqdonut@pseudo.fixme.fi)
10:34:41 Velpoman joins (~Velpoman@159.65.76.124)
10:34:41 dixie joins (~dixie@real.wilbury.sk)
10:34:41 uwap joins (~uwap@genja.uwap.name)
10:34:44 × bahamas quits (~lucian@unaffiliated/bahamas) (Ping timeout: 256 seconds)
10:34:48 × d34df00d quits (~d34df00d@104-14-27-213.lightspeed.austtx.sbcglobal.net) (Excess Flood)
10:35:45 xerox_ joins (~xerox@unaffiliated/xerox)
10:35:46 × PatrickRobotham_ quits (sid18270@gateway/web/irccloud.com/x-szkuaevozzmraacs) (Ping timeout: 246 seconds)
10:36:48 × Saukk quits (~Saukk@2001:998:f1:3963:1c59:9bb5:b94c:2) (Remote host closed the connection)
10:37:10 ynota joins (~Thunderbi@d49-191-192-139.mrk2.qld.optusnet.com.au)
10:37:30 PatrickRobotham_ joins (sid18270@gateway/web/irccloud.com/x-rwsbokiyuenqgdjm)
10:39:40 ynota parts (~Thunderbi@d49-191-192-139.mrk2.qld.optusnet.com.au) ()
10:39:52 hyiltiz-M joins (hyiltizkde@gateway/shell/kde/matrix/x-zvgetfbstubrdqzf)
10:39:55 × alp quits (~alp@2a01:e0a:58b:4920:cc00:82e3:fd5:ee39) (Ping timeout: 240 seconds)
10:42:56 × LarryTheCow quits (~user@cpe-104-34-71-94.socal.res.rr.com) (Ping timeout: 272 seconds)
10:42:58 × da39a3ee5e6b4b0d quits (~textual@n11211935170.netvigator.com) (Quit: My MacBook has gone to sleep. ZZZzzz…)
10:48:23 mathlover2 joins (~mathlover@2604:6000:1013:129e:755e:eccf:8735:da37)
10:49:04 × mathlover2 quits (~mathlover@2604:6000:1013:129e:755e:eccf:8735:da37) (Remote host closed the connection)
10:49:48 × Amras quits (~Amras@unaffiliated/amras0000) (Remote host closed the connection)
10:51:33 alp joins (~alp@2a01:e0a:58b:4920:41af:3872:fb2a:8dae)
10:53:11 coot joins (~coot@37.30.49.218.nat.umts.dynamic.t-mobile.pl)
10:55:07 × GyroW_ quits (~GyroW@unaffiliated/gyrow) (Quit: Someone ate my pie)
10:55:17 GyroW joins (~GyroW@d54C03E98.access.telenet.be)
10:55:18 × GyroW quits (~GyroW@d54C03E98.access.telenet.be) (Changing host)
10:55:18 GyroW joins (~GyroW@unaffiliated/gyrow)
10:55:48 × yoeljacobsen quits (~yoel.jaco@5.28.167.89) (Ping timeout: 260 seconds)
10:56:00 × olligobber quits (olligobber@gateway/vpn/privateinternetaccess/olligobber) (Ping timeout: 260 seconds)
10:59:19 jchia__ joins (~jchia@45.32.62.73)
10:59:32 × jchia__ quits (~jchia@45.32.62.73) (Client Quit)
11:00:15 GyroW_ joins (~GyroW@ptr-48ujrfd1ztq5fjywfw3.18120a2.ip6.access.telenet.be)
11:00:15 × GyroW_ quits (~GyroW@ptr-48ujrfd1ztq5fjywfw3.18120a2.ip6.access.telenet.be) (Changing host)
11:00:15 GyroW_ joins (~GyroW@unaffiliated/gyrow)
11:00:50 Amras joins (~Amras@unaffiliated/amras0000)
11:01:03 × GyroW quits (~GyroW@unaffiliated/gyrow) (Ping timeout: 260 seconds)
11:02:08 tito_04 joins (~taurux@net-93-146-7-28.cust.vodafonedsl.it)
11:02:13 × taurux quits (~taurux@net-93-146-7-28.cust.vodafonedsl.it) (Ping timeout: 260 seconds)
11:02:31 LKoen joins (~LKoen@81.255.219.130)
11:05:43 × todda7 quits (~torstein@athedsl-217541.home.otenet.gr) (Ping timeout: 260 seconds)
11:06:16 olligobber joins (olligobber@gateway/vpn/privateinternetaccess/olligobber)
11:06:27 × GyroW_ quits (~GyroW@unaffiliated/gyrow) (Quit: Someone ate my pie)
11:06:44 GyroW joins (~GyroW@ptr-48ujrfd1ztq5fjywfw3.18120a2.ip6.access.telenet.be)
11:06:44 × GyroW quits (~GyroW@ptr-48ujrfd1ztq5fjywfw3.18120a2.ip6.access.telenet.be) (Changing host)
11:06:44 GyroW joins (~GyroW@unaffiliated/gyrow)
11:07:40 zargoertzel joins (~zar@fw1.ciirc.cvut.cz)
11:08:27 × mpereira quits (~mpereira@2a02:810d:f40:d96:1c35:7f2e:59ff:953) (Ping timeout: 240 seconds)
11:10:28 × zariuq quits (~zar@fw4.ciirc.cvut.cz) (Ping timeout: 260 seconds)
11:11:13 seanvert joins (~user@177.84.244.242)
11:11:38 Gurkenglas joins (~Gurkengla@unaffiliated/gurkenglas)
11:17:52 × cpressey quits (~cpressey@88.144.95.3) (Quit: WeeChat 1.9.1)
11:18:58 hackage reanimate-svg 0.12.2.0 - SVG file loader and serializer https://hackage.haskell.org/package/reanimate-svg-0.12.2.0 (DavidHimmelstrup)
11:19:40 todda7 joins (~torstein@athedsl-217541.home.otenet.gr)
11:21:01 heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
11:21:21 shailangsa joins (~shailangs@host165-120-169-97.range165-120.btcentralplus.com)
11:21:28 hackage uniqueness-periods-vector-examples 0.9.0.0 - Usage examples for the uniqueness-periods-vector series of packages https://hackage.haskell.org/package/uniqueness-periods-vector-examples-0.9.0.0 (OleksandrZhabenko)
11:21:35 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Read error: Connection reset by peer)
11:24:12 takuan joins (~takuan@178-116-218-225.access.telenet.be)
11:24:53 mpereira joins (~mpereira@2a02:810d:f40:d96:1c35:7f2e:59ff:953)
11:25:28 × heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 246 seconds)
11:28:56 × frdg quits (60e94035@pool-96-233-64-53.bstnma.fios.verizon.net) (Remote host closed the connection)
11:30:25 × snakemasterflex quits (~snakemast@213.100.206.23) (Ping timeout: 256 seconds)
11:32:09 × oisdk quits (~oisdk@2001:bb6:3329:d100:4f8:7c72:bd88:6c6a) (Quit: oisdk)
11:32:39 yoeljacobsen joins (~yoel.jaco@5.28.167.89)
11:34:51 Guest_91 joins (bcfa50ec@188.250.80.236)
11:36:07 Guest_91 parts (bcfa50ec@188.250.80.236) ()
11:37:13 hekkaidekapus{ joins (~tchouri@gateway/tor-sasl/hekkaidekapus)
11:38:43 × hekkaidekapus_ quits (~tchouri@gateway/tor-sasl/hekkaidekapus) (Ping timeout: 240 seconds)
11:39:18 bahamas joins (~lucian@unaffiliated/bahamas)
11:40:24 Habib joins (~Habib@194.35.233.138)
11:42:07 × todda7 quits (~torstein@athedsl-217541.home.otenet.gr) (Ping timeout: 240 seconds)
11:42:25 × gekh quits (~gkh@thor.kevinhill.nl) (Quit: Goodbye!)
11:43:20 gekh joins (~gkh@thor.kevinhill.nl)
11:43:47 cosimone joins (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6)
11:44:37 × fendor_ quits (~fendor@e237-037.eduroam.tuwien.ac.at) (Ping timeout: 264 seconds)
11:46:10 × pacak quits (~pacak@bb116-14-220-91.singnet.com.sg) (Read error: Connection reset by peer)
11:46:55 fendor joins (~fendor@e237-037.eduroam.tuwien.ac.at)
11:47:59 da39a3ee5e6b4b0d joins (~textual@n11211935170.netvigator.com)
11:49:25 × cosimone quits (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6) (Ping timeout: 240 seconds)
11:49:40 × alx741 quits (~alx741@186.178.110.22) (Ping timeout: 260 seconds)
11:52:35 todda7 joins (~torstein@athedsl-217541.home.otenet.gr)
11:55:22 pacak joins (~pacak@bb116-14-220-91.singnet.com.sg)
11:55:38 zariuq joins (~zar@fw1.ciirc.cvut.cz)
11:57:20 <quazimod1> so I was playing around with ocaml and found some things quite disappointing
11:57:26 frdg joins (60e94035@pool-96-233-64-53.bstnma.fios.verizon.net)
11:57:53 <quazimod1> it took forever to spin up a working code base... and i still have no idea how to split nested submodules into their own files... doesn't appear to be possible
11:58:05 × zargoertzel quits (~zar@fw1.ciirc.cvut.cz) (Ping timeout: 240 seconds)
11:58:39 <quazimod1> anyway I'm writing quantitative finance code and am evaluating languages, when reading about ocaml's strictness vs haskell's laziness I found that GHC has a 'strict' option
11:59:04 <quazimod1> i had no idea that this existed, is it commonly used, or compatible with existing libraries
12:00:01 × Implant1 quits (~Implant@178.162.212.214) ()
12:00:04 Wuzzy joins (~Wuzzy@p5790e6f5.dip0.t-ipconnect.de)
12:00:05 × bahamas quits (~lucian@unaffiliated/bahamas) (Ping timeout: 240 seconds)
12:00:18 <dminuoso> quazimod1: Not very commonly used.
12:00:31 <quazimod1> i cant wrap my head around it being a drop in option that 'just works'
12:01:00 <dminuoso> Well, ultimately I dont think lazyness is a real issue. Overall lazy by default seems far more preferrable to strict by default.
12:01:16 <quazimod1> dminuoso: far more preferrable?
12:01:19 <dminuoso> Yes.
12:01:28 hackage futhark 0.17.3 - An optimising compiler for a functional, array-oriented language. https://hackage.haskell.org/package/futhark-0.17.3 (TroelsHenriksen)
12:01:28 <dminuoso> Code becomes far more modular
12:01:43 <dminuoso> And the downsides are just matters of having to debug a space leak in the odd case.
12:02:06 <dminuoso> But equivalently, if you're too strict, you can have performance issues as well.
12:02:07 <quazimod1> i'm not experience enough with haskell to really understand 'code becomes far more modular'
12:02:22 <quazimod1> i'll take your word for it though
12:02:24 snakemasterflex joins (~snakemast@213.100.206.23)
12:03:05 <dminuoso> Don't take my word for it.
12:03:47 × Stanley00 quits (~stanley00@unaffiliated/stanley00) (Remote host closed the connection)
12:03:55 alx741 joins (~alx741@186.178.110.191)
12:04:53 <frdg> I am having trouble understanding this error. Can I accumulate values with only Foldable and Monoid instances? https://dpaste.org/ekMY
12:05:19 <dminuoso> quazimod1: The topic has been discussed at ends on reddit or stackoverflow, so Ill just redirect you there.
12:05:21 <dminuoso> https://www.reddit.com/r/haskell/comments/5xge0v/today_i_used_laziness_for/deia53t/?utm_source=reddit&utm_medium=web2x&context=3
12:06:17 <quazimod1> ah nice
12:09:38 machinedgod joins (~machinedg@24.105.81.50)
12:10:35 <dminuoso> frdg: True -> x <> acc
12:10:54 <dminuoso> frdg: This is where the accident happens. Consider what the type of `x` is
12:12:05 <dminuoso> % :t foldr
12:12:05 <yahb> dminuoso: Foldable t => (a -> b -> b) -> b -> t a -> b
12:12:12 <frdg> x :: a. So I need a function that is `a -> t a -> t a`
12:12:25 <dminuoso> Sure, but that's not possible with t being just Foldable
12:12:56 <frdg> that is what I feared
12:13:35 cosimone joins (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6)
12:13:36 <dminuoso> Im pondering about this currently, I feel there might be something close
12:14:06 × mpereira quits (~mpereira@2a02:810d:f40:d96:1c35:7f2e:59ff:953) (Read error: Connection reset by peer)
12:14:17 × yoeljacobsen quits (~yoel.jaco@5.28.167.89) (Ping timeout: 265 seconds)
12:14:31 <dminuoso> From the looks of it, Set is the best you have.
12:14:35 mpereira joins (~mpereira@2a02:810d:f40:d96:693e:4333:5b77:9e8f)
12:15:14 <dminuoso> Ah I found it
12:15:17 <dminuoso> So what you're asking for is
12:15:57 <L29Ah> % minimum(1,2)
12:15:58 <dminuoso> intersect :: (Unfoldable t, Foldable t, Eq a) => t a -> t a -> t a
12:15:58 <yahb> L29Ah: 2
12:16:06 <dminuoso> Where Unfoldable is from the package `unfoldable`
12:16:28 <dminuoso> Then, the most efficient way would be to roundtrip through a set, do the intersection, and then unfold it back
12:16:45 <frdg> ok thanks Ill try this.
12:16:47 <ski> @where whyfp
12:16:47 <lambdabot> "Why Functional Programming Matters" by John Hughes in 1984 at <http://www.cse.chalmers.se/~rjmh/Papers/whyfp.html>
12:17:23 <ski> quazimod1 : iirc that ^ has an example of the modularity (with separating generating a search-tree for games, from traversing (and pruning) it)
12:19:11 <ski> quazimod1 : "it being a drop in option that 'just works'" -- i don't think that's the case. i think that for many modules/libraries, turning on `Strict' (or even just `StrictData', depending), will make them not work
12:19:31 <quazimod1> yeah that makes more sense
12:19:32 __skn joins (~sunil@sec.nimmagadda.net)
12:20:10 <dminuoso> quazimod1: Note that there's limits to lazyness being useful though. Just being able to use lazyness doesn't make all occurences of it useful.
12:20:12 <ski> (if you turn it on, when you're compiling them, that is)
12:20:20 <maerwald> ski: I enabled Strict and StrictData for large projects and nothing happened :)
12:20:20 <dminuoso> For instance, lazy bytestrings are very debatable. They are very non-composable.
12:20:44 <maerwald> Strict is only problematic when you write monadic combinators
12:20:58 st8less joins (~st8less@2603:a060:11fd:0:101c:4882:6a23:1c57)
12:21:28 <quazimod1> yeah i'm too dumb to understand
12:21:29 <ski> i think `Strict' (and `StrictData') are more useful for when you know you'll be working "in a strict way", where you won't really be helped much by non-strictness anyway. and possibly also for converting some preexisting code/library that mostly satisfy those constraints
12:21:55 × st8less quits (~st8less@2603:a060:11fd:0:101c:4882:6a23:1c57) (Client Quit)
12:21:58 <dminuoso> If I look back, ever since I started writing Haskell, I haven't been bitten by a space leak yet, but have had numerous occasions where lazyness let me write code far more modular, and more expressive.
12:22:06 <dminuoso> It's even small things like being able to write `zip [1..]`
12:22:08 heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
12:22:16 <ski> maerwald : yea, i'm not saying you'll get bottom directly :) but some things may be way less efficient than one's expecting. it obviously depends on the style of the code, what kind of things it's doing
12:22:28 <maerwald> ski: kazu yamamoto seems to disagree with you https://github.com/yesodweb/wai/pull/752#issuecomment-501531386
12:23:52 <quazimod1> even though i'm dumb it feells to me like selective laziness is better than always lazy
12:24:00 <maerwald> I agree
12:25:25 <ski> maerwald : interesting :) perhaps the kind of things they's doing (or the way they tend to do them) more easily lends itself to strict semantics then. and perhaps that being the case is a bit more common than one'd thing
12:26:32 × jespada quits (~jespada@90.254.246.48) (Ping timeout: 260 seconds)
12:26:43 <ski> yea, i think having a reasonable way to get both worlds, would be good. but it's hard to know how to mix them, being able to succinctly and clearly choose which you want, when, not clear how to design such a language
12:26:52 × heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 256 seconds)
12:27:02 <quazimod1> doesn't the strict mode do that
12:27:09 <dminuoso> quazimod1: It's debatable at the end. The thing with lazyness, is that its value doesn't kick in until you actually have lazyness by default.
12:27:10 <quazimod1> give you the ability to whitelist lazy
12:28:02 jespada joins (~jespada@90.254.246.48)
12:28:50 <quazimod1> this may again be more dumb thinking but i get the strong impression that commercial decision makers will avoid laziness
12:29:27 <dminuoso> quazimod1: The best summary is that adding a selective strictness annotation always works, but selective lazyness annotations dont.
12:29:40 <ski> quazimod1 : "doesn't the strict mode do that" -- no, because it turns it on for the whole module
12:29:42 <dminuoso> Lazyness needs to be pervasive to work
12:29:50 <ski> yea, that too
12:30:10 <maerwald> There are some arguments pro composition and compiler optimisations due to non-strict semantics, but in the end: lazyness is a poor streaming method, which is why we go away from lazy bytestring and lazy IO and towards actual streaming libraries, that guarantee proper streaming. Otherwise there's too much cleverness in your code you don't understand yourself
12:30:28 <dminuoso> Lazyness is not just for streaming.
12:30:34 <Habib> can someone help me out w/ understanding prettyprinter?
12:30:34 <maerwald> I didn't say that
12:30:46 <dminuoso> Habib: Just ask!
12:30:52 <ski> what i had in mind was to have a fine-grained selection of strictness and non-strictness. possibly, in some way, reflected in the types (but how to do that, in a not too obtrusive and code-duplicating way, isn't clear)
12:31:01 × cosimone quits (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6) (Read error: Connection reset by peer)
12:31:21 <ski> i'd like to experiment with a language with call-by-coneed :)
12:31:34 cosimone joins (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6)
12:31:35 <maerwald> ski: http://docs.idris-lang.org/en/latest/tutorial/typesfuns.html#laziness
12:32:23 Habib_ joins (~Habib@185.134.23.120)
12:32:25 <quazimod1> I've done a lot of stream programming in javascript
12:32:35 <Habib_> is prettyprinter really a prettyprinter, or is it just a prettyprinting engine?
12:32:44 <dminuoso> quazimod1: So the realization that selective/surgical annotations only work with strictness annotations makes it obvious, that StrictData needs *far* more work if you want to use lazyness at all, as opposed to default with some strictness.
12:32:46 <quazimod1> i dont know how comfy i'd be with implicit streaming vs actual streaming constructs
12:32:50 <dminuoso> Habib_: Yes.
12:32:56 <dminuoso> Habib_: What's the difference?
12:33:28 <maerwald> dminuoso: there aren't many instances where you don't want StrictData
12:33:37 <quazimod1> dminuoso: so the Strict and StrictData options appear to allow optional laziness using ~, so you'd have 'lazy modules' littered with ~ in a strict by default apporach, is what you're saying?
12:33:43 <dminuoso> maerwald: I dont think that's true. I've had very few places where I needed a bang.
12:33:51 <dminuoso> *far* less instances where I *wanted* lazyness
12:34:06 <Habib_> pretty-simple just prints data types in a nicely formatted way so i can see largely nested values, but prettyprinter seems to be more of a bunch of primitives to let me control everything in a very precise way, but no way to just… print something.
12:34:07 <quazimod1> to be fair i think the vast majority of the time you don't really care which way
12:34:11 <maerwald> You need it very quickly if you store a lot of data in memory
12:34:28 <quazimod1> still, it appears to me that having optional & deliberate laziness makes more sense
12:34:35 × akegalj quits (~akegalj@93-138-123-17.adsl.net.t-com.hr) (Ping timeout: 240 seconds)
12:34:36 <quazimod1> dumb dumb opinions
12:34:44 <ski> maerwald : yea, having explicit suspensions (that `Lazy'), is good to have in a strict language, but are a bit awkward to use (also really needs to be combined with something like <https://srfi.schemers.org/srfi-45/srfi-45.html>. also see <http://homepages.inf.ed.ac.uk/wadler/topics/language-design.html#lazyinstrict>). there's the pervasiveness argument that dminuoso mentioned
12:35:00 <Habib_> dminuoso: i don't get how anyone is supposed to be able to use prettyprinter in the console for just looking at values without getting lost
12:35:05 × Habib quits (~Habib@194.35.233.138) (Ping timeout: 240 seconds)
12:35:05 Habib_ is now known as Habib
12:35:15 <maerwald> quazimod1: also: laziness is harder to reason about. And ppl get it wrong all the time. It's just less intuitive and some of the rules aren't that obvious
12:35:17 shatriff joins (~vitaliish@217.27.153.240)
12:35:23 <dminuoso> Habib: prettyprinter is not for "just looking at values"
12:35:27 <dminuoso> It's for generating pretty output.
12:35:33 <quazimod1> i guess the other question that I have is, what happens when you have zero laziness... don't you just solve the same problems slightly differently
12:35:37 <Habib> yeah, this is what i mean by pretty printer vs. pretty printing engine
12:35:39 <dminuoso> Think of generating error/warning messages for your prorgram.
12:35:43 <ski> maerwald : "Otherwise there's too much cleverness in your code you don't understand yourself" -- i agree that this is not that good, yea. (but it's not just streams)
12:35:48 <Habib> a pretty printer prints… prettily
12:36:00 <quazimod1> ocaml, despite it's hateful tooling, seems to be a reasonable FP without laziness
12:36:11 <maerwald> but it isn't pure either
12:36:19 <dminuoso> Habib: I see. prettyprinter is a pretty printing engine.
12:36:21 <Habib> dminuoso: error/warning messages, go on…
12:36:28 <quazimod1> that's true, do you need laziness to have purity?
12:36:38 <dminuoso> Habib: https://github.com/quchen/prettyprinter read the README down below :)
12:36:48 <dminuoso> It covers the motivation and uses for this library
12:37:06 <maerwald> quazimod1: you need to be able to make your language non-strict without it overthrowing the entire semantics (modulo bottom)
12:37:13 <dminuoso> (One important aspect is that prettyprinter makes a strict separation between the document that you prettyprint and the layouting
12:37:13 <maerwald> otherwise it's not pure
12:37:18 <Habib> i don't understand why it's recommended in the aelve guide alongside options like pretty-simple and then made out to be the best option (subjectively); they do completely different things
12:37:28 <maerwald> whether the language is actually strict or not doesn't matter for it to be pure
12:37:54 jassy joins (~jassy@60-242-83-81.tpgi.com.au)
12:38:12 <Habib> dminuoso: can you say more about the separation between the document and the layouting? it seems all its primitives are about layouting.
12:38:16 <quazimod1> maerwald: is there an example that could illustrate that concept?
12:38:25 <dminuoso> Habib: Well, think of pretty-simple as giving an adhoc "prettificiation". Sort of a generic.
12:38:28 <quazimod1> i cant wrap my head around it
12:38:35 <dminuoso> Habib: No they are not! That's the beauty :)
12:38:49 <maerwald> quazimod1: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.27.7800&rep=rep1&type=pdf
12:38:59 <dminuoso> Habib: https://hackage.haskell.org/package/prettyprinter-1.7.0/docs/Prettyprinter.html
12:39:04 <dminuoso> Scroll down to "General workflow"
12:39:10 <ski> quazimod1 : "what happens when you have zero laziness... don't you just solve the same problems slightly differently" -- yes. or you don't solve them at all (give up, or work around them, in a more clumsy, less modular/composable way) (or you simulate laziness, with suspensions like the one maerwald linked to)
12:39:22 <dminuoso> So you write up a document, you layout it, and then you render it
12:39:30 motherfs1 joins (~motherfsc@unaffiliated/motherfsck)
12:39:33 <dminuoso> And there's different layout algorithms (you can also write your own)
12:39:53 <Habib> so i could write a layout algorithm that lays out the document in the same way that pretty-simple does?
12:40:03 <ski> quazimod1 : OCaml is quite nice. and SML too. F# is not bad, either, although it lacks the good module system, alas
12:40:04 <maerwald> quazimod1: informally you could say: if your language is pure, the evaulation strategy shouldn't define its semantics
12:40:16 <dminuoso> Habib: pretty-simple is rather a sort of "generic" implementation for anything that has a show instance
12:40:34 <sm[m]> oh wow that's some great docs
12:40:37 × cosimone quits (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6) (Quit: Quit.)
12:40:40 <dminuoso> think of it as a "parser" that reads the Haskell Report compliant deriving based Show instances, and then emits some prettyprinter code, layouts it, and renders it to string.
12:40:50 <quazimod1> ski: ocaml's killing me
12:40:51 <Habib> dminuoso: afaiu, pretty-simple just takes what show produces and goes through the string and aligns things based on braces and such
12:40:59 <dminuoso> Habib: right, its very rigid
12:41:02 <dminuoso> but your assessment is right
12:41:06 <dminuoso> they are somewhat orthogonal
12:41:08 <dminuoso> but not entirely unrelated
12:41:15 <quazimod1> > informally you could say: if your language is pure, the evaulation strategy shouldn't define its semantics
12:41:17 <lambdabot> <hint>:1:51: error: <hint>:1:51: error: parse error on input ‘,’
12:41:19 <quazimod1> gonna have to do more reading
12:41:22 <quazimod1> because i don't fully get that
12:42:00 × todda7 quits (~torstein@athedsl-217541.home.otenet.gr) (Ping timeout: 272 seconds)
12:42:11 × motherfsck quits (~motherfsc@unaffiliated/motherfsck) (Ping timeout: 240 seconds)
12:42:28 <quazimod1> "Finally, we observe that call-by-name reasoning principles are unsound in compilers for monadic Haskell"
12:42:29 <dminuoso> Habib: If you just want some ad-hoc "make show instances more readable" with no effort, use pretty-simple. If you want to generate user-facing output (regardless of whether thats html, markdown, text, whatever), prettyprinter is a great option. :)
12:42:35 <ski> a pretty-printer is a case where laziness can be useful. in a strict language, you can make multiple passes through the data, passing back the top-level outputs from last pass as inputs. (this is basically what attribute-grammars do). with non-strictness, you can just "do a single pass" (syntactically, so less clutter), but you have to be a bit careful to make sure you don't access a late input prematurely
12:42:39 <quazimod1> doesn't that mean that they found that strict is kinda unworkable for monadic haskell
12:43:28 <Habib> dminuoso: okay, i understand that now, i think i was just expecting something more like pretty-simple as that was the comparison being made on the aelve guide
12:44:05 <Habib> i still don't quite understand prettyprinter, but i don't want to dwell on that when it's not what i need anyway
12:44:12 <maerwald> quazimod1: it bottoms out :p
12:44:19 jonatanb joins (~jonatanb@79.184.190.239.ipv4.supernova.orange.pl)
12:44:20 <quazimod1> i don't know what that means!!
12:44:23 <dminuoso> Habib: prettyprinter is one of the finer libraries out there :)
12:44:25 <quazimod1> lol
12:44:31 <quazimod1> FP world is >so weird<
12:44:38 <dminuoso> It has really good ergonomics, and makes writing output fun.
12:44:49 <Habib> i get that impression, but for now, it's just gonna stay over my head i guess
12:45:00 <dminuoso> Fair enough. Just dont be scared, it's very easy to use.
12:45:03 × LKoen quits (~LKoen@81.255.219.130) (Quit: “It’s only logical. First you learn to talk, then you learn to think. Too bad it’s not the other way round.”)
12:45:15 <ski> quazimod1 : where was that quote from ?
12:45:18 <maerwald> quazimod1: the paper explicitly says that semantics for different eval strategies are only equivalent if you ignore error/non-termination etc
12:45:33 <maerwald> bc these will never be equivalent
12:45:38 <quazimod1> ski: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.27.7800&rep=rep1&type=pdf
12:45:41 <quazimod1> in the blurb
12:46:01 <quazimod1> maerwald: that makes intuitive sense to me
12:46:16 <quazimod1> wow haskell really is a research language isn't it
12:46:26 <quazimod1> it's purpose is not commercial in the slightest
12:46:57 <sm[m]> prettyprinter docs always are a bit opaque, even these; they sssume certain knowledge and jargon
12:47:29 <lortabac> quazimod1: it's a research language that is also used commercially
12:47:29 <maerwald> quazimod1: that's how it began... like your first date is exciting, but the truth settles soon enough
12:47:38 <dminuoso> sm[m]: Doesn't any library?
12:47:44 nbloomf joins (~nbloomf@2600:1700:83e0:1f40:f500:dc4c:283a:a1a5)
12:47:47 <dminuoso> I mean it's much worse with most of eds libraries.
12:48:10 <maerwald> it's already too widely used to make drastic backwards-incompatible changes
12:48:14 <dminuoso> Can't even use the damn thing without getting confused by half a dozen ncatlab articles.
12:48:18 <maerwald> we can't even get rid of String :)
12:48:35 <sm[m]> many docs are better at defining their terms for a non CS student eg
12:48:50 <Habib> dminuoso: let me try one last time for today :). the question in my mind about the way prettyprinter works is, i don't quite understand the separation between functions like vsep, pretty, <+>, nest, align - which all seem to suggest stuff to do layouting - and the layoutSimple, layoutPretty, etc. functions
12:48:51 <dminuoso> lortabac: That surely can't be a bad thing. PHP was a *toy* language that is also used commercially now.
12:49:01 <quazimod1> maerwald: seen unison language?
12:49:02 <lortabac> dminuoso: :D
12:49:05 <quazimod1> that thing gives me hope
12:49:14 <sm[m]> it wouldn't be hard to give a better intro to pretty printing in plain English. It's probably out there somewhere
12:49:30 <maerwald> quazimod1: never seen it
12:49:43 <dminuoso> Habib: https://homepages.inf.ed.ac.uk/wadler/papers/prettier/prettier.pdf is a very nice read that might be easier than to dive into the implementation.
12:49:47 <quazimod1> it's pretty schmick
12:50:08 <quazimod1> some things in it are non strict
12:50:23 <quazimod1> such as boolean expressions
12:50:27 <Habib> dminuoso: cheers, i'll take a look at this tonight :_
12:50:29 <Habib> :)
12:50:31 <quazimod1> but then again i'm sure that's the case for many languages
12:50:35 <quazimod1> ... all languages?
12:50:46 <dminuoso> Habib: for me, it was just two bindings that instantly explained the entirety of prettyprinter to me
12:51:26 <sm[m]> (Maybe that General workflow section is it ? I'll have to read on a big screen)
12:51:27 <ski> quazimod1 : ah (looked at page 20, which talks about that). that quote is about intermediate representation, in conjunction with generating code to do update-in-place, inside a compiler. it doesn't apply at the user-level of the language
12:51:39 <dminuoso> Habib: Staring at hardline and softline for just a minute made me understand what Doc was about. :)
12:51:45 <kuribas> dminuoso: same for me, I have heared a lot of scary stories about lazyness causing, spaceleaks, but I never experienced it...
12:52:12 <ski> maerwald : "only equivalent if you ignore error/non-termination etc" -- yes, because partiality and non-termination are effects :)
12:52:16 <chreekat[m]1> I also bounced pretty hard off the division of paradigms in that pretty printer lineage
12:52:18 <ski> (side-effects, in Haskell)
12:52:18 <quazimod1> so what i'm getting is that I should use python for my quantitative finance program
12:52:36 <dminuoso> quazimod1: If you feel more comfortable with that, go for it.
12:52:44 <quazimod1> dminuoso: i want to burn python
12:52:53 <quazimod1> the quintessential 'im not a programmer' language
12:53:08 <quazimod1> fuck me the amount of garbage python code i've had to wade through
12:53:09 <dminuoso> quazimod1: All Im saying is, dont let the lazyness distract you from picking the language. It shouldn't matter at all.
12:53:15 <ski> dminuoso : "without getting confused by half a dozen ncatlab articles" -- haha :)
12:53:47 <maerwald> quazimod1: is this about an actual business or some toy program
12:54:39 <dminuoso> quazimod1: If you're not comfortable with Haskell, your main concerns should be "how long until you become comfortable enough to become productive" or "do you have good library support for what you intend to do", or "do you have the ability to hire/train people in the desired language if needed"
12:54:54 <quazimod1> maerwald: it's a project that i'm starting but professionally i work as a consulting tech lead for startups & corporate innovation ventures, i've taken a lot of things into production and this will be no different
12:55:11 <quazimod1> the only difference is that nothing i've done before was purely my choice, my team, or time sensitive
12:55:27 <quazimod1> so we settled with the RoR/Djangos, the typescripts, etc
12:55:33 cpressey joins (~cpressey@88.144.95.3)
12:55:37 noirin joins (~noirin@185.103.96.135)
12:55:47 <maerwald> quazimod1: doing a startup haskell project is very dangerous with little knowledge about the language imo and I'd advise against it
12:55:58 <sm[m]> Haskell may not be the quickest or cheapest to production but it will be the cheapest over the long haul
12:55:58 <quazimod1> and any time any data science/computation was needed someone would appear who wanted to do it in python, which everyone else was familiar with
12:56:07 <dminuoso> I second what maerwald just said. :)
12:56:28 <maerwald> Haskell is something you pick if you know what you're doing.
12:56:34 × oxide quits (~lambda@unaffiliated/mclaren) (Ping timeout: 258 seconds)
12:56:55 <kuribas> clojure when you don't...
12:56:59 <maerwald> lel
12:57:04 <quazimod1> i'm not worried about picking up and learning something, im' worried about having to fix another man's mistakes
12:57:18 <sm[m]> bah that has never been my approach :)
12:57:19 <kuribas> at least if you're confused about types
12:57:21 <quazimod1> django & it's 'rest framework' are full of mistakes that you have to fix
12:57:37 oxide joins (~lambda@unaffiliated/mclaren)
12:57:47 <dminuoso> quazimod1: It might take 6 months before you can write solid code though, if you're completely new to Haskell.
12:57:55 <sm[m]> Haskell is the language you can be sure you can refactor yourself way out of wrong decisions
12:58:05 <dminuoso> The curve is difference, you can't just "simply switch". Overall Id say its worth learning
12:58:10 <quazimod1> rails was good to me, to be honest. in fact ruby is the easiest language i've ever used and they're adding static typing to it so it'll be waaay more scalable soon. Shame it's so slow
12:58:12 <sm[m]> s/way//
12:58:24 <maerwald> sm[m]: also depends
12:58:29 <kuribas> yeah, I never understood the argument why clojure would be more "organic", as if it automatically grows with your problems...
12:58:40 <dminuoso> quazimod1: The type system is absolute rubbish. :)
12:58:47 <quazimod1> dminuoso: it's a type system at least
12:58:50 <dminuoso> It's not really
12:58:59 <quazimod1> i don't need it to be brilliant, i need it to stop devs making type mistakes
12:59:03 <maerwald> sm[m]: vertical refactoring isn't much easier (as in: change the way you express effects, exceptions etc)
12:59:14 <dminuoso> The main problem is, Ruby by design and ecosystem promotes reflection techniques and monkey patching so hard
12:59:16 <maerwald> horizontal yes
12:59:18 <quazimod1> dminuoso: have you inspected the rails 3 type system?
12:59:18 <dminuoso> The type system cant keep track of it
12:59:27 × albert_99 quits (~Albert@p200300e5ff0b5b39340e476afbaec452.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
12:59:32 <dminuoso> quazimod1: Ive stopped with Ruby 2 years ago in favor of Haskell
12:59:34 <quazimod1> yeah the monkey patching isn't great
12:59:42 <sm[m]> quazimod1: yesod is a good industrial strength "rails" worth looking at - not as easy to use but faster
12:59:44 <kuribas> quazimod1: ruby (and python/perl/clojure/php...) are easy tot get started with, but hard to maintain.
13:00:02 <quazimod1> sm[m]: in 10 years i've never had speed issues with rails tbh
13:00:04 <sm[m]> you might also like to chat out the new IHP
13:00:04 <dminuoso> There's very few popular languages that I consider to have respectable type systems. Rust is one of them.
13:00:16 <kuribas> thanks to monkey patching, you never know what your standard library functions are doing.
13:00:18 mirrorbird joins (~psutcliff@2a00:801:2d5:9d73:ff00:6553:d451:a276)
13:00:21 <sm[m]> quazimod1: ok, I thought you just said it was slow
13:00:24 × ryansmccoy quits (~ryansmcco@193.37.254.27) (Ping timeout: 258 seconds)
13:00:33 <quazimod1> sm[m]: for computation & the like, web server is fine
13:00:46 ryansmccoy joins (~ryansmcco@193.37.254.27)
13:01:12 <quazimod1> dminuoso: i'm 90% settled on writing this thing in rust actually
13:01:19 <quazimod1> that language does not appear to fuck around
13:01:27 <quazimod1> the tooling is easy to use too, as far as i've used it
13:01:45 <maerwald> kuribas: what does ("/foo" </> "/bar") (from System.FilePath) return?
13:02:02 <quazimod1> but it was in reading about stuff that i stumbled on the lazy v strict thing... such a shame ocaml is surrounded by very ... non commercial thinking contributors
13:02:05 <kuribas> maerwald: "/foo/bar"?
13:02:07 <maerwald> no
13:02:23 urodna joins (~urodna@unaffiliated/urodna)
13:02:31 <kuribas> "/foo//bar" then? :-)
13:02:39 <quazimod1> sm[m]: i don't think i would do any financial computation stuff in ruby, even ruby 3 with the JIT
13:02:44 <maerwald> kuribas: "/bar"
13:02:47 rihards joins (~rihards@balticom-142-78-50.balticom.lv)
13:02:51 <kuribas> ??
13:02:54 <maerwald> :)
13:02:59 albert_99 joins (~Albert@p200300e5ff0b5b39340e476afbaec452.dip0.t-ipconnect.de)
13:03:25 <kuribas> FilePath is a historical smell
13:03:26 Tops2 joins (~Tobias@dyndsl-095-033-093-242.ewe-ip-backbone.de)
13:03:26 <dminuoso> quazimod1: The one thing that Haskell is just pretty good at, reasoning about code like equational reasoning.
13:03:27 <sm[m]> quazimod1: I build a financial app in Haskell, its great
13:03:36 <maerwald> kuribas: https://github.com/haskell/filepath/issues/49
13:03:42 <quazimod1> sm[m]: tell me more
13:03:44 <dminuoso> For financial code, Haskell would be at the top of my list probably :)
13:03:51 <quazimod1> dminuoso: it appears to me that that's the case too
13:03:53 <maerwald> kuribas: just saying... are you *sure* we are doing better wrt sdlib :p
13:04:14 <dminuoso> The better you can reason about code, the more likely your code is correct, the easier you can maintain your code, and it makes refactoring that much easier.
13:04:24 <quazimod1> dminuoso: yeah i guess i got spooked by the lazy thing. It doesn't help that the jane street nerds specifically didn't use haskell because it would make their high speed trading less predictable... which spooked me again
13:04:28 <quazimod1> even though i'm nothing near high speed
13:04:30 <sm[m]> smooth evolution from "I have no idea what I'm doing" to "pretty decent architecture that gets the job done"
13:04:34 <kuribas> maerwald: at least it's consistently wrong :)
13:04:39 <sm[m]> over 13 years..
13:04:45 <Uniaika> sm[m]: :D
13:04:48 <dminuoso> quazimod1: One of Haskell's primary use is actually in financial institutions.
13:05:10 <dminuoso> It's not as if Haskell was "made for it" or that its "particularly well suited", but it *is* used there.
13:05:19 <sm[m]> quazimod1: (hledger.org)
13:05:32 <quazimod1> i can understand why, if i was going to analyse existing data it'd be different
13:05:44 <quazimod1> i'm sure lazy or not the throughput would be fantastic & the code very very reliable
13:05:50 <dminuoso> It felt like every third person I met in London as Haskell eXchange was working for some financial institution
13:05:51 <sm[m]> but yes look at cards I for a much more significant financial app
13:06:13 <quazimod1> also whoever mentioned clojure before: i do not need a language that encourages deveolpers to dump their brain thoughts into files thank you
13:06:18 <sm[m]> Cardano. Dangit, phone..
13:06:31 drbean joins (~drbean@TC210-63-209-203.static.apol.com.tw)
13:06:33 <quazimod1> i will never implement another thing in lisp again
13:06:36 <quazimod1> except emacs
13:06:53 <quazimod1> sm[m]: hey that's cool
13:07:08 × notzmv quits (~user@unaffiliated/zmv) (Ping timeout: 260 seconds)
13:07:29 <dminuoso> quazimod1: But yeah, dont be spooked by lazyness. Overally I think it makes writing code easier, and the rare space leaks it brings with it can be debugged - for some reason some people trip into space leaks more often than others.
13:07:33 <frdg> now that I think about it, Haskell isn't good for talking about sets because sets should be able to hold different types of elements.
13:07:38 cosimone joins (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6)
13:07:47 <dminuoso> frdg: Why should it?
13:08:03 <quazimod1> dminuoso: so what do i do, use rust, python, ocaml or haskell for the quant app
13:08:28 berberman_ joins (~berberman@123.118.97.97)
13:08:32 <dminuoso> quazimod1: Why are you asking #haskell what you should do?
13:08:38 <dminuoso> That seems like the wrong question
13:08:42 <quazimod1> you're all pretty smart
13:08:50 <frdg> dminuoso: [1,2,foo] is valid mathematically but in haskell this is a type error.
13:08:51 <sm[m]> prototype in all until you see a winner!
13:08:52 <ski> Scheme is cool. CL seems a bit less principled, more focused on getting things done, now. haven't looked at Clojure
13:08:53 <dminuoso> Im not very smart
13:08:55 × berberman quits (~berberman@2408:8207:2563:5ae0:584e:a9ff:fe9b:d3fe) (Ping timeout: 244 seconds)
13:08:58 <dminuoso> Which is why Im using Haskell
13:08:59 <quazimod1> never had any jackassery here that i can remember
13:09:14 <dminuoso> It allows me to write good code *despite* being only average.
13:09:28 <sm[m]> heh same :)
13:09:32 <quazimod1> ski: CL is an abomination
13:09:35 <dminuoso> Of course people here will tell you how good Haskell is
13:09:41 <dminuoso> So Im not quite sure what you hope to hear.
13:09:43 <ski> frdg : "[1,2,foo] is valid mathematically" -- in actual mathematical practice, that doesn't happen (or only very rarely)
13:09:43 <quazimod1> lol
13:09:52 <quazimod1> i'm honestly thinking rust
13:09:55 <kuribas> ski: clojure is trying to be the cool kid, but adopting part of the new developments (purity), and completly trashing the rest (static types).
13:10:32 <dminuoso> frdg: In fact, completely unlimited sets lead to Russels Paradox!
13:10:39 <kuribas> ski: it's also a rather inefficient and clumsy approach to leverage the JVM.
13:11:30 <ski> frdg : the problem is that (due to the influence of Zermelo-Fraenkel set theory), math literature tends to not talk about the distinction between subsets (aka material sets), and sets/types (aka structural sets) .. even though, imho, it's a distinction that's implicitly present, very often
13:11:48 <quazimod1> ski: CL is like a perfect vision of beauty has had that 'the fly' thing done to it
13:12:11 <ski> quazimod1 : .. yea, i tend to lean more to the Scheme side
13:12:20 <quazimod1> ever seen CLOS
13:12:25 <quazimod1> you _never_ need CLOS
13:12:29 <frdg> ski: ok this is nice to know
13:12:33 <dminuoso> My opinion is, if I wanted to drive a startup, I wouldn't pick a language that I had to learn first, especially if that language was so exotic, that I couldn't reasonably start to become productive in 2 weeks.
13:12:40 <quazimod1> it's okay, great to read about it just to see how else you could do OOP
13:12:59 <quazimod1> instrumented multiple inheritance. Yes please, sign me up. I'll take some flagellation too
13:13:22 <quazimod1> dminuoso: i'm not worried about that, i'm a consulting tech lead, that's all i do
13:13:28 ski . o O ( "Interface-passing style" by Fare (François-René Rideau) in 2010-02-17 at <https://fare.livejournal.com/155094.html> )
13:13:28 <kuribas> CL was made to bring order in the chaos of all the different lisps, but without rewriting the language. Scheme was made to rewrite the language, and make it small, elegant and consistent.
13:13:34 <dminuoso> Consulting on a language youd ont even know.
13:13:38 <dminuoso> Not sure whether that its better.
13:13:40 <dminuoso> :)
13:13:45 <quazimod1> dminuoso: getting paid a goddamn lot to do it too :P
13:13:53 <quazimod1> hey man all my customers are happy i make shit happen
13:13:57 <dminuoso> Maybe I should switch jobs
13:14:09 <dminuoso> I could do COBOL consulting perhaps.
13:14:17 <quazimod1> could probably make good money there too
13:14:22 <quazimod1> i know that the banks are having a hard time
13:14:23 <kuribas> quazimod1: cool, then you can start consulting on haskell?
13:14:35 <quazimod1> kuribas: if I took it seriously, yeah
13:14:40 <dminuoso> Didn't Facebook just kick off some artificial intelligence project aimed to rewrite cobol in traditional languages?
13:14:42 <ski> that "Interface-passing style" is more or less using type classes (sans the uniqueness of instance), or rather, the explicit dictionary-passing implementation of it. (in a Lisp context)
13:14:43 <quazimod1> i wouldn't shy away from it
13:14:53 <dminuoso> frdg: Also, consider that `Set a` has an additional limitation in that it needs to satisfy a `Ord a` constraint (well not the type, but almost all its functions)
13:15:14 <quazimod1> i know i'd be studying my ass off to learn & understand it, and I don't lie to my clients about my understanding of something
13:16:21 <ski> kuribas : how does Clojure fare with STM ? i think i've heard they mentioned at the same time. and do you have any mutability (not counting if they're separated from the rest of the code like with `IORef' in Haskell. yes, that can be done, without static types) ?
13:16:36 <dminuoso> frdg: So that alone mandates the set be uniform, so comparisons even work.
13:16:41 <quazimod1> man 99% of my income is because, outside of IRC tomfoolery, I communicate pretty well and expect my staff to communicate pretty well too, you'd be surprised how well a venture can go with pretty meh commodity devs who are communicating with each other & the stake holders
13:16:44 <dminuoso> Without this, we couldn't have a performant (and thus useful) implementation
13:17:04 <kuribas> ski: I haven't done anything with concurrency in clojure...
13:17:43 <frdg> dminuoso: So what we have in haskell is `uniform sets`?
13:18:24 <dminuoso> or "homogenous" rather. yeah
13:18:30 <kuribas> ski: and yes, clojure has mutability, as it can access java objects. But most clojure datatypes are immutable.
13:18:35 <ski> frdg : it doesn't happen, for the same reason as in programming. you need to know how to use the data as well. for a list in Haskell, if you have no idea whether an element is an integer, or a string, or another list, you can't do much useful, except passing them on to someone who knows. and even if you can query (like with dynamic typing), this tends to be clumsy, not lead to well-structured developments
13:19:07 <frdg> ok I understand
13:19:09 cr3 joins (~cr3@192-222-143-195.qc.cable.ebox.net)
13:20:08 × toorevitimirp quits (~tooreviti@117.182.180.245) (Ping timeout: 256 seconds)
13:20:51 <sm[m]> quazimod1: do you hire only good communicators, or do you channel client communications through a few senior people ?
13:21:03 <ski> kuribas : ok. i take that the mutability isn't "warded off / contained", or explicitly marked, with some kind of effect stuff ("tainting" ?), then
13:21:11 <kuribas> ski: nope
13:21:25 <quazimod1> sm[m]: my rule of thumb is to hire good natured & helpful seniors
13:22:01 <maerwald> quazimod1: many ppl hire for "IQ" in tech and then get confused why their team is an unmanagable mess :)
13:22:04 <quazimod1> client comms are tricky sometimes, ofc, especially when you've got arrogant fuckheads on the other side, frequntly happens
13:22:29 <quazimod1> maerwald: dont get me started on 'smart' people
13:22:33 <quazimod1> fucking worthless
13:22:36 <ski> frdg : of course, you can have more exotic things, like a list where the first element is a number, the next is a pair of numbers, the next is a pair of pair of numbers, &c. .. to express many such, you need dependent types (although sometimes one can encode them without)
13:22:52 heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
13:23:13 <sm[m]> yes please don't maerwald :)
13:23:18 <maerwald> :p
13:23:22 <dminuoso> ski: Well, we can still have such things with intermediate data types in Haskell.
13:23:36 <quazimod1> too late i'm starting
13:23:40 <ski> frdg : but generally, you do have some kind of "order" that allows you to know what kind of value you're dealing with, without having to query (at least if you do express some amount of "querying" in terms of "tags", that is sum types)
13:23:52 <sm[m]> quazimod1: interesting but probably
13:23:52 <quazimod1> i have a guy doing ML for us... when he gets "bored" he "starts new projects"
13:24:00 <sm[m]> OT here
13:24:15 <maerwald> yeah, we have OT channels for that
13:24:26 <quazimod1> he's a vestigial remnant of a company that we work with. Soon to be snipped off
13:24:34 <quazimod1> what's OT
13:24:35 <ski> dminuoso : hm, elaborate on what you mean ?
13:24:52 <maerwald> and make sure you don't disclose names :p
13:24:57 <quazimod1> oh right, yeah n/p i'll let it go. Back to haskell. This white paper is hard to read :/
13:25:00 <sm[m]> off topic , at least at this busy time.
13:25:21 <sm[m]> especially if it's a rant :)
13:25:29 <ski> quazimod1 : ML as in SML,OCaml or F# ? or Machine Language ? or Machine Learning ?
13:25:37 <quazimod1> ski: machine learning
13:25:40 <maerwald> sm[m]: we barely rant here, do we? :angelface:
13:25:51 toorevitimirp joins (~tooreviti@117.182.180.245)
13:26:01 <dminuoso> ski: Well the particular example you named could just be encoded by `data P = S Int | P P P deriving (Eq, Ord)`, and then you can have `Set P` just fine.
13:26:14 <dminuoso> Oh wait
13:26:17 <dminuoso> I see what you mean
13:26:32 × GyroW quits (~GyroW@unaffiliated/gyrow) (Remote host closed the connection)
13:26:44 <sm[m]> maerwald not too much really :)
13:26:51 GyroW joins (~GyroW@ptr-48ujrfd1ztq5fjywfw3.18120a2.ip6.access.telenet.be)
13:26:51 × GyroW quits (~GyroW@ptr-48ujrfd1ztq5fjywfw3.18120a2.ip6.access.telenet.be) (Changing host)
13:26:51 GyroW joins (~GyroW@unaffiliated/gyrow)
13:27:09 × conal quits (~conal@64.71.133.70) (Ping timeout: 256 seconds)
13:27:15 <ski> dminuoso : no, the example i had was more like `data DoublingList a = Nil | Cons a (DoublingList (a,a))' (a "non-regular data type", since it's not passing the same type parameters in the recursive call)
13:27:20 AlterEgo- joins (~ladew@124-198-158-163.dynamic.caiway.nl)
13:27:22 <dminuoso> Right
13:27:37 × heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 258 seconds)
13:28:38 <quazimod1> , where 7!
13:28:47 <quazimod1> ignore
13:29:19 <ski> then, you can throw a `Maybe', like `data BinNumeral a = Nil | Cons (Maybe a) (BinNumeral (a,a))' and now you have a collection of arbitrary (finite) number of elements of `a', represented as a "binary numeral" "sequence of `1's and `0's". each `1' being a perfectly-balanced binary tree of size `2^n', where `n' is the index of the bit
13:29:22 <quazimod1> oh man so out of my depth, ->* is the reflexive transitive closure of ->
13:29:25 <quazimod1> what the hell does that mean
13:29:31 conal joins (~conal@66.115.157.135)
13:29:41 <ski> quazimod1 : it means that `->*' is zero or more `->' steps
13:29:50 × jonatanb quits (~jonatanb@79.184.190.239.ipv4.supernova.orange.pl) (Read error: Connection reset by peer)
13:30:15 <quazimod1> lol
13:30:17 <quazimod1> nice
13:30:23 jonatanb joins (~jonatanb@79.184.190.239.ipv4.supernova.orange.pl)
13:30:33 <ski> quazimod1 : so, for all `x', you have `x ->* x' (zero steps). and if you have `x -> y' and `y ->* z', then you have `x ->* z' (you can "add in" one more step)
13:30:41 <sm[m]> quazimod1: tip: easy to get lost in CS when learning haskell, common mistake is thinking it's the only way to get productive - it's not
13:31:03 <quazimod1> sm[m]: its the best way to not be productive, in fact you need none of this to ever be productive :P
13:31:24 <quazimod1> i don't know how i'm gonna build a stripe wrapper when my mind's caught up in this mess
13:31:26 <kuribas> the best way is to start of with really crude haskell
13:31:26 <sm[m]> over the long term I think that's not true :)
13:31:35 <kuribas> then as you learn more to refine it.
13:31:37 <ski> (you could also express the latter rule by saying that if you have `x -> y', then you have `x ->* y' (one step). and if you have `x ->* y' and `y ->* z', then you have `x ->* z' (combine multiple steps with multiple steps. this is transitivity.) (the "zero steps" is reflexivity)'
13:32:13 ski nods to sm[m]
13:32:14 <sm[m]> kuribas: that's my approach also
13:32:20 × berberman_ quits (~berberman@123.118.97.97) (Ping timeout: 260 seconds)
13:32:26 <quazimod1> by zero steps are we talking about intermediate transformations, or computations?
13:32:31 <quazimod1> what is a step, here?
13:32:54 <kuribas> in fact, I find that often when I am stuck in to much refinement, it helps to start of with something dumb and basic, then gradualy rewriting it.
13:33:04 <ski> a "step" is the relation `->' you started with. could be any binary relation on a set. in your case, i presume it's some kind of reduction or transition step
13:33:09 berberman joins (~berberman@123.118.96.247)
13:33:35 <quazimod1> ski: it's actually page 4 of http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.27.7800&rep=rep1&type=pdf
13:34:20 <ski> from any binary relation `R' on a set, we can construct a binary relation `R*' that includes `R', and is both reflexive and transitive (so is a "partial order"). in fact, `R*' is the "smallest" such relation (doesn't include extra irrelevant cruft). that's why it's called the "reflexive-transitive closure"
13:35:28 <ski> quazimod1 : it's standard to talk about reflexive-transitive closure, when speaking more formally about the (small-step) operational/procedural semantics of programming languages
13:36:39 <ski> yea, in this situation, `x -> y' means that the expression `x' can reduce to the expression `y' "in one step". then `x ->* y' means that it can reduce, in zero or more steps
13:36:45 <quazimod1> i dont have a background in this maths
13:36:55 <quazimod1> does this fall into set or category theory?
13:36:55 <ski> yea, that's why i'm explaining
13:37:15 <ski> it's semantics of programming languages
13:37:15 <quazimod1> so the 'zero' in the zero or more steps is important
13:37:31 <quazimod1> why do we think abouth the zero, rather than 1 or more?
13:37:36 plutoniix joins (~q@ppp-223-24-166-134.revip6.asianet.co.th)
13:37:43 <ski> yea, sometimes you see `->+' for "one or more steps". that's "transitive closure" (without the reflexive part)
13:37:54 <ski> but i think it's more common to want to include the possibility of zero steps
13:37:56 zoom84 joins (~user@068-190-177-201.res.spectrum.com)
13:38:02 zoom84 parts (~user@068-190-177-201.res.spectrum.com) ()
13:38:11 <ski> well, one common use of this is to talk about confluence
13:38:22 × ym555 quits (~ym@156.199.113.15) (Quit: leaving...)
13:38:32 <ski> say you have an expression `(2 + 3) * (1 + 4)'. you can imagine doing the additions in either order
13:38:35 <ski> so, you can go
13:38:51 <ski> (2 + 3) * (1 + 4) |-> 5 * (1 + 4)
13:38:55 <ski> or else you can go
13:39:01 <ski> (2 + 3) * (1 + 4) |-> (2 + 3) * 5
13:39:04 <quazimod1> sure
13:39:23 <ski> but regardless of which path we take, we will eventually "converge" again, get back to the same spot
13:39:30 <ski> (2 + 3) * (1 + 4) |-> 5 * (1 + 4) |-> 5 * 5
13:39:31 <ski> vs.
13:39:32 <quazimod1> skrj
13:39:36 <ski> (2 + 3) * (1 + 4) |-> (2 + 3) * 5 |-> 5 * 5
13:39:39 <quazimod1> sorry, dvorak, sure
13:39:47 × Ariakenom quits (~Ariakenom@193.254.193.1) (Ping timeout: 240 seconds)
13:40:17 <ski> so, one way to express this is that if you have `x |-> y0' and also have `x |-> y1', then there should exist some `z' such that `y0 |->* z' and `y1 |->* z'
13:40:47 <ski> so, regardless of whether we go left or right, we'll eventually come to a common spot on the path, again
13:41:18 <ski> however, it could be that from `y0' you can get (in some steps) to `y1' itself
13:41:25 <quazimod1> ah sure, and the zero being the case that the y0 was the same as whe z anyway
13:42:36 <ski> so, then we want `z' to be `y1'. so the last part then becomes `y0 |->* y1' and `y1 |->* y1'. the last thing here wouldn't work, if we didn't include "zero steps" as a possibility. we'd have to try to add one step to both (and that's not always possible, depending on how one sets things up. and setting it up so it's always possible is an extra hassle)
13:42:41 <ski> yes
13:42:56 <ski> anyway, this is not category theory
13:43:34 <ski> (not really set theory, either, although it could use some set theory terminology)
13:44:10 <carter> Algebraic combinatorics! ;)
13:44:39 fendor_ joins (~fendor@t204-126.demo.tuwien.ac.at)
13:45:18 <quazimod1> yeah it didn't feel like category theory but its been a few years since i looked at that, and I never got particularly far into it so idno
13:45:48 <ski> quazimod1 : anyway, if you're interested, you can look at papers like this. and some of the insights or conclusions can be good to know about, from a more practical programming standpoint. but i wouldn't worry too much about not understanding things in such papers, if you're mainly interested in practical programming (e.g. in Haskell, or some other language)
13:46:01 fm_ joins (~fm@p2e5335ae.dip0.t-ipconnect.de)
13:46:39 × fm_ quits (~fm@p2e5335ae.dip0.t-ipconnect.de) (Client Quit)
13:47:09 <quazimod1> yeah certainly agree with you, i just get interested
13:47:14 × fendor quits (~fendor@e237-037.eduroam.tuwien.ac.at) (Ping timeout: 272 seconds)
13:47:22 <ski> (btw, that property with `x',`y0',`y1',`z' above, confluence, is sometimes called "diamond property", since if you draw it in a diagram, it looks like a rhombus)
13:48:48 × Lord_of_Life quits (~Lord@unaffiliated/lord-of-life/x-0885362) (Quit: Laa shay'a waqi'un moutlaq bale kouloun moumkine)
13:48:57 <ski> one way to think about `R*' is that its like a "list of `R's". so `a R* z' means `a R b /\ b R c /\ c R d /\ ... /\ w R x /\ x R y /\ y R z', for some (possibly zero) number of `R' steps (some "list" of `R's)
13:49:35 <ski> (`A*' is also a common notation for a (possibly empty) list of elements of `A'. in Haskell, this is `[A]'. and `A+' for non-empty lists)
13:49:51 fmeyer joins (~fmeyer@p2e5335ae.dip0.t-ipconnect.de)
13:51:02 × drbean quits (~drbean@TC210-63-209-203.static.apol.com.tw) (Ping timeout: 272 seconds)
13:51:04 <quazimod1> the binary relation in our case can be anything right?
13:51:21 <ski> yes
13:51:24 × fmeyer quits (~fmeyer@p2e5335ae.dip0.t-ipconnect.de) (Client Quit)
13:51:36 <ski> as long as it's relating two elements from the same set
13:51:55 Sgeo joins (~Sgeo@ool-18b982ad.dyn.optonline.net)
13:52:02 fmeyer joins (uid257539@gateway/web/irccloud.com/x-yvvsemtlqrvsuvhi)
13:52:04 <quazimod1> sure but we're free to choose a suitably diverse set right?
13:52:11 <ski> yes
13:52:19 <quazimod1> may i ask why it has to be the same set
13:52:40 <quazimod1> if they're different sets, do we need to draw a ring around the 2 different sets & make a new set
13:53:08 Lord_of_Life joins (~Lord@unaffiliated/lord-of-life/x-0885362)
13:53:33 <ski> the "reflexive-transitive closure" and the "transitive closure" are ways to "make" such binary relations transitive, or both reflexive and transitive, by "adding in more related pairs" (as few as possible), until we get a relation that satisfies the desired property
13:53:49 <frdg> \join #prolog
13:54:25 son0p joins (~son0p@181.136.122.143)
13:54:38 Super_Feeling joins (~Super_Fee@103.108.4.50)
13:54:43 <ski> quazimod1 : you can do that, if you want to. you'd take the "disjoint/discriminated union" (same things as variant/sum type, and part of "algebraic data type") of the two sets/types, to get one that "includes the elements of both"
13:54:44 Super_Feeling1 joins (~Super_Fee@103.108.4.50)
13:54:44 × Super_Feeling1 quits (~Super_Fee@103.108.4.50) (Client Quit)
13:55:01 <ski> this is what a "bipartite graph" does, for the nodes/vertices, e.g.
13:55:09 <ski> frdg : haha :)
13:55:18 <ski> (it's actually ##prolog)
13:55:50 <frdg> heh thanks
13:56:30 <Super_Feeling> hey guys, is haskell is the right way to start learning about fp? the syntax is so hard, that i get confused all the time and concepts don't make sense
13:56:47 <ski> quazimod1 : usually, people would say that you take a "union" of the two sets. but more commonly, that's not what you want. in case there's no common element to the two sets, it makes no difference, but if there might be common elements, then usually you'd want the "sum type" version. in math, people often (clumsily) express this as saying you union a set with "a copy" of another set
13:57:15 × tbreslein quits (~tbreslein@2a02:8108:140:44f8::3cc4) (Remote host closed the connection)
13:57:33 <maerwald> Super_Feeling: yes
13:57:49 <ski> (this is another example of people in mathematics usually conflating subsets (/ material sets) with sets/types/sorts (/ structural sets))
13:58:19 justan0theruser is now known as justanotheruser
13:58:23 <ski> Super_Feeling : is Haskell your first programming language ?
13:59:22 × cfricke quits (~cfricke@unaffiliated/cfricke) (Quit: WeeChat 2.9)
13:59:32 <quazimod1> Super_Feeling: are you me?
13:59:35 <quazimod1> from back in time
13:59:57 hackage hills 0.1.2.7 - Generate STL models from SRTM elevation data. https://hackage.haskell.org/package/hills-0.1.2.7 (djf)
14:00:31 <quazimod1> ski: my brain farted when you said that a bartite graph does this
14:00:39 <ski> heh, why ? :)
14:01:51 <quazimod1> if you have u0 -> u1 and u1 -> v1 then i'd get it
14:01:58 <quazimod1> but bipartite graphs don't do this
14:02:39 <ski> (note that the edges in an (undirected, non-multi) graph is just a binary relation on the set/type of vertices/nodes)
14:02:39 <quazimod1> so then i dont understand the modelling of the 'includes the elements of both' in a bipartite graph
14:03:18 <ski> for a graph, `->*' would describe paths in the graph
14:03:42 <quazimod1> mmm i can maybe understand
14:03:47 <quazimod1> if we have nodes in groups U & V
14:03:58 <quazimod1> then you could get from v1 to v2 by going into U
14:04:04 seanvert` joins (~user@177.84.244.242)
14:04:11 <quazimod1> i dont see any bipartite graphs with an edge from a node in V to another node in V
14:04:14 <quazimod1> is that what you mean?
14:04:28 <ski> (well, i suppose i should just say directed. for undirected, you add the requirement that the relation is symmetric. another way to express it is that instead of having edges be ordered pairs, you have them be unordered pairs)
14:05:11 <quazimod1> symmetric meaning goes in both directions?
14:05:15 <ski> yes
14:05:27 <ski> if `x -> y', then also `y -> x'
14:05:32 <quazimod1> yeah ok
14:05:36 × seanvert quits (~user@177.84.244.242) (Ping timeout: 272 seconds)
14:05:47 <Super_Feeling> ski, no i've done a lot of python, js, go and c++.
14:05:50 <quazimod1> but referring to my earlier qusetion
14:05:59 <Super_Feeling> But i've no clue about fp, since i'm self taught
14:06:13 × blasius quits (~blasius@4e69b241.skybroadband.com) (Ping timeout: 264 seconds)
14:06:15 <ski> yea, for a bipartite graph, we'd have the additional requirement that there's no edges "inside" the two parts of the partition of the vertices
14:07:11 <ski> so it's not that you get exactly a bipartite graph, if you divide your nodes into two kinds/sorts/types/sets. but it's a nice way to think about it, although you still need that extra condition about no "internal edges"
14:07:33 <quazimod1> yeah see that completely threw me off
14:07:56 <quazimod1> otherwise, discounting that that additional rule in bipartite graphs I can understand what you mean now
14:08:12 <ski> Super_Feeling : well, learning another programming paradigm (like functional programming, or logic programming) will be a bit like learning to program all over from scratch again. it's not quite like that, but it's a good mindset to assume, when learning. you will need to unlearn things you're taking for granted
14:08:12 <quazimod1> also graphs are hard & weird
14:08:41 <ski> Super_Feeling : there are of course things that carry over. but it's better to set that aside, for the time being, until you got the basics under your belt
14:08:42 <quazimod1> Super_Feeling: i had a huge chip on my shoulder when it came to my inadequacies re. trying to understand monads
14:09:01 <quazimod1> step 1: pick up haskell & try to build something simple with it
14:09:13 <quazimod1> step 2: read & watch a lot of youtube videos about FP & haskell
14:09:16 <ski> Super_Feeling : do you remember how confused you were, when you learned programming initially, how the concepts didn't make sense ?
14:09:23 <Super_Feeling> exactly, it's like everything we do in oop has no place here in haskell
14:09:25 <quazimod1> the maths theory is an indulgence, you don't need to do it
14:09:27 <Super_Feeling> yes, makes sense
14:09:43 <quazimod1> Super_Feeling: everything you do in oop has no place here
14:09:55 <quazimod1> lol, i guess thats true?
14:10:26 <ski> yea .. for monads, i think most "monad tutorials" out there doesn't help that much (there are a few exceptions), possibly even making it harder to understand
14:10:57 <quazimod1> ski: you know functor is a craaaaazy intimidating name for something that's pretty freaking simple
14:11:30 <ski> the best practice, i think, is to first learn properly how the basic type system works, with type signatures, `data' types, polymorphism, parameterized `data' types, type classes .. before trying to tackle monads. also, start by learning particular monads, not by trying to grasp the general concept
14:11:38 <Super_Feeling> i guess i will continue with "real world haskell"
14:11:51 × mpereira quits (~mpereira@2a02:810d:f40:d96:693e:4333:5b77:9e8f) (Remote host closed the connection)
14:11:59 <quazimod1> Super_Feeling: i'm not really a haskell developer, ski's forgotten more about haskell than I ever knew. But I'd say everything we do in oop kinda sucks anyway
14:12:06 <maerwald> quazimod1: I have the unpopular opinion that monads give way to OOP style programming in haskell
14:12:07 <quazimod1> it's post modernism for programming
14:12:52 <maerwald> The main (informal) property about OOP is, imo, that it clouds control flow
14:12:53 <quazimod1> Super_Feeling: just build basic stuff & work yoru way up
14:13:00 <maerwald> Monads can do the same (especially transformers)
14:13:01 <ski> quazimod1 : well, there are some good modularity things in OOP. but they're not exclusive to OOP. also, "objects are a poor man's closures" (there's also the reverse saying, in OOP circles, "closures are a poor man's objects" ;)
14:13:36 × fendor_ quits (~fendor@t204-126.demo.tuwien.ac.at) (Remote host closed the connection)
14:13:43 tzh joins (~tzh@2601:448:c500:5300::143b)
14:13:56 <quazimod1> i dno man
14:14:24 <ski> quazimod1 : yea. perhaps one could have called it `Container' (or something like that) instead of `Functor'. however, that term already have lots of (subtly) different connotations. sometimes it's just better to use a "new" word, that's not encumbered with lots of associations which may be inappropriate
14:14:28 <Super_Feeling> okay so basically start building calculators in haskell, and work your way up lol (that's how i learned cpp)
14:14:39 <quazimod1> oop feels like a group of dudes got together, started echoing each other's anthropomorphisations (or should i say objectomorphisations) and then now por Super_Feeling needs to know 'oop patters' and it still sucks to write complex or big programs
14:14:45 × John20 quits (~John@82.46.59.122) (Ping timeout: 256 seconds)
14:15:08 <ski> quazimod1 : furthermore, by using the established (in math) term "functor", we can (more easily) make use of existing theory and insights regarding functors
14:15:22 <quazimod1> ski: not saying it's something to change, not even hinting at that
14:15:23 <quazimod1> just saying
14:15:27 John20 joins (~John@82.46.59.122)
14:15:31 <quazimod1> how hilariously scary that word is vs what is actually happening
14:16:27 <ski> but yes, i understand it can feel intimidating, to see some apparently alien jargon, that one hasn't a clue (based on commonly used terminology) what it might mean. especially if one's not used to doing that
14:17:00 <quazimod1> mostly since it's not even a type of function
14:17:06 <quazimod1> i hear functor i'm like
14:17:09 <quazimod1> scary function
14:17:12 <quazimod1> scary happenings, run
14:17:30 <quazimod1> then you say 'oh yeah that data type is a functor'
14:17:32 <quazimod1> lol wtf?
14:17:37 Habib parts (~Habib@185.134.23.120) ()
14:18:40 × nbloomf quits (~nbloomf@2600:1700:83e0:1f40:f500:dc4c:283a:a1a5) (Quit: My MacBook has gone to sleep. ZZZzzz…)
14:18:46 danso joins (~dan@107-190-41-58.cpe.teksavvy.com)
14:18:47 × alp quits (~alp@2a01:e0a:58b:4920:41af:3872:fb2a:8dae) (Ping timeout: 272 seconds)
14:18:56 × Super_Feeling quits (~Super_Fee@103.108.4.50) (Quit: Leaving)
14:18:57 <ski> maerwald : i'm not sure about the "OOP" part, but i'd agree that sometimes we seem to reach to easily for a monad (which is basically doing imperative programming, although sometimes a very powerful form of imperative programming, and neatly separated from the rest of the language, in Haskell), rather than seek a more "declarative" (or "denotative" as conal prefers to call it) style
14:19:01 <quazimod1> hey here's aweird one, suppose that you have a type that's like a ternary maybe, like Just x, Kinda x, None
14:19:09 <quazimod1> that can't really be a functor can it
14:19:17 <sm[m]> Super_Feeling: you may find https://code.world or
14:19:17 <sm[m]> @where haskell-via-sokoban good
14:19:18 <lambdabot> https://haskell-via-sokoban.nomeata.de
14:19:25 × shatriff quits (~vitaliish@217.27.153.240) (Remote host closed the connection)
14:20:51 <quazimod1> dumb question i guess, isuppose it could be a functor depending on semantics
14:21:05 <maerwald> ski: monads are the most expressive tool and must be avoided most, as such
14:21:12 <ski> quazimod1 : well, thing is, it is "a type of function" .. only, a function on the type level
14:21:16 <maerwald> and for pretty practical reasons: they're slow
14:21:18 <sm[m]> ack, missed them
14:21:30 <quazimod1> ski: you talking about fmap?
14:21:33 <ski> no
14:21:36 <quazimod1> or `functor`
14:21:42 <quazimod1> oh, ok new brain fart
14:21:54 <ski> take `Tree'. this is a function that, given a type, produces another type
14:22:02 <quazimod1> the data type maybe is a function at the type level, let me think
14:22:11 <quazimod1> Yeah that's fair
14:22:15 <ski> so, if we pass `Int' to `Tree', we get `Tree Int', the type of trees of `Int' (trees with elements of type `Int')
14:22:17 <quazimod1> hey look at that you made me smarter
14:22:27 Tops21 joins (~Tobias@dyndsl-095-033-093-242.ewe-ip-backbone.de)
14:22:45 <ski> `Tree' could also be said to be a parameterized type, a "type template", an "incomplete/unsaturated type"
14:22:48 <quazimod1> i hadn't really thought about it like that but yeah that's fair
14:22:50 × mirrorbird quits (~psutcliff@2a00:801:2d5:9d73:ff00:6553:d451:a276) (Quit: Leaving)
14:22:58 Tops22 joins (~Tobias@dyndsl-095-033-093-242.ewe-ip-backbone.de)
14:23:08 spew joins (uid195861@gateway/web/irccloud.com/x-srtpfsrzrguwlscu)
14:23:26 <John20> Hi All, is it correct to say that Haskell language extensions increase the space of valid 'haskell' programs? e.g. if a program is valid in core haskell, it will also be valid with extension A switched on?
14:23:26 <quazimod1> im trying to imagine a type that's a functor but not a type function
14:23:36 × jonatanb quits (~jonatanb@79.184.190.239.ipv4.supernova.orange.pl) (Quit: Leaving...)
14:23:39 <ski> quazimod1 : if you define `data TernaryMaybe a = None | Kinda a | Just a', then `TernaryMaybe' is a functor
14:23:40 heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
14:23:53 <ski> but perhaps you wanted `Kinda' and `Just' to hold items of different types ?
14:24:13 <quazimod1> TernaryMaybe is weird
14:24:26 <sm[m]> broadly but not 100% true I think, John20
14:24:32 <ski> maerwald : yea, there's something to be said for that. <https://en.wikipedia.org/wiki/Rule_of_least_power>
14:24:40 <quazimod1> i wonder if you could throw in an fmap that takes more than 1 function
14:25:04 <maerwald> ski: that rule isn't popular in here :p
14:25:25 × Tops2 quits (~Tobias@dyndsl-095-033-093-242.ewe-ip-backbone.de) (Ping timeout: 240 seconds)
14:25:27 × frdg quits (60e94035@pool-96-233-64-53.bstnma.fios.verizon.net) (Remote host closed the connection)
14:25:29 <ski> John20 : mostly. some extensions introduce new keywords, though, which can't be used as identifiers then
14:25:47 × Gurkenglas quits (~Gurkengla@unaffiliated/gurkenglas) (Ping timeout: 240 seconds)
14:26:14 frdg joins (60e94035@pool-96-233-64-53.bstnma.fios.verizon.net)
14:26:24 <quazimod1> ok it's 1am in sleepy sydney
14:26:26 acarrico joins (~acarrico@dhcp-68-142-39-249.greenmountainaccess.net)
14:26:36 <quazimod1> time for me to hit the hay, have to wrestle a kangaroo tomorrow
14:26:37 <ski> maerwald : it's about the tradeoff between expressiveness / expressive power (/ "cavalier power") and "reasonability" / reasoning (including refactoring) power (/ "predictive power")
14:27:04 × Tops21 quits (~Tobias@dyndsl-095-033-093-242.ewe-ip-backbone.de) (Ping timeout: 256 seconds)
14:27:26 <ski> quazimod1 : "i wonder if you could throw in an fmap that takes more than 1 function" -- see `Bifunctor',`Difunctor' (hrm, `Profunctor' ..)
14:27:30 <ski> @type bimap
14:27:32 <lambdabot> Bifunctor p => (a -> b) -> (c -> d) -> p a c -> p b d
14:27:40 <ski> @type dimap
14:27:41 <lambdabot> Profunctor p => (a -> b) -> (c -> d) -> p b c -> p a d
14:27:45 <John20> Thanks sm[m] and ski. That answers my question
14:27:57 <ski> > bimap (* 2) show (3,4)
14:27:57 nbloomf joins (~nbloomf@2600:1700:83e0:1f40:1da1:2732:bb9f:da76)
14:28:00 <lambdabot> (6,"4")
14:28:12 × heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 256 seconds)
14:29:08 voyons_osti joins (~dan@107-190-41-58.cpe.teksavvy.com)
14:29:20 × xerox_ quits (~xerox@unaffiliated/xerox) (Ping timeout: 258 seconds)
14:29:22 <ski> > dimap (+ 2) (+ 2) (^ 2) 3
14:29:25 <lambdabot> 27
14:30:20 <quazimod1> that's cool
14:30:38 <ski> quazimod1 : "im trying to imagine a type that's a functor but not a type function" -- all functors are type functions. but not necessarily vice versa. e.g. `Endo',`IORef',`Comparision' (with `type Comparision a = a -> a -> Ordering')
14:30:40 bahamas joins (~lucian@unaffiliated/bahamas)
14:31:13 <ski> quazimod1 : anyway, good night, and have fun with programming, whether in Haskell or otherwhere :)
14:31:32 <quazimod1> btw profunctor is cool
14:31:39 <quazimod1> i hadn't considered that
14:31:55 <ski> note how it goes in "opposite direction" in one type parameter
14:32:03 <quazimod1> i cant imagine a specific use but i'm sure ive come across that
14:32:05 <quazimod1> yeah
14:32:16 <quazimod1> that's neat
14:32:18 <ski> that's known as being "contravariant". there's `Contrafunctor' for contravariant functors (ordinary ones are covariant)
14:32:30 <quazimod1> and like i said, i'm sure there are places where this abstraction could have been a neat solution
14:32:37 <ski> contravariant functors are "consumers". covariant ones are producers
14:32:44 snakemas1 joins (~snakemast@213.100.206.23)
14:32:49 × ralejs quits (~ralejs@2620:10d:c093:400::5:2842) (Read error: Connection reset by peer)
14:33:01 <quazimod1> i dont understand the consumer/producer thing
14:33:01 <ski> a bifunctor is covariant in both parameters. a difunctor (cough, "profunctor") is contravariant in one parameter, and covariant in the other
14:33:15 ralejs joins (~ralejs@2620:10d:c093:400::5:2842)
14:33:23 <ski> (covariance and contravariance also crops up, with subtyping in OOP)
14:33:46 <ski> consider `Tree a', this "produces `a's" in the sense that you can get `a' elements from it
14:33:58 hackage libfuse3 0.1.1.1 - A Haskell binding for libfuse-3.x https://hackage.haskell.org/package/libfuse3-0.1.1.1 (yohashi)
14:34:00 <quazimod1> sure
14:34:06 × snakemasterflex quits (~snakemast@213.100.206.23) (Ping timeout: 272 seconds)
14:34:12 <ski> `Maybe a' is similar, and so is `IO a' (although you can't "escape" from `IO'). you can still `fmap' over `IO', though
14:34:27 × toorevitimirp quits (~tooreviti@117.182.180.245) (Ping timeout: 240 seconds)
14:34:31 <quazimod1> sure
14:34:41 <ski> but if you have `type Predicate a = a -> Bool', then a `Predicate a' is a consumer of `a's, not a producer (same for `Comparision' above)
14:34:46 <quazimod1> also, for another time, i do not understand why you cant 'escape' from IO
14:35:02 toorevitimirp joins (~tooreviti@117.182.180.245)
14:35:11 jle` joins (~mstksg@cpe-23-240-75-236.socal.res.rr.com)
14:35:12 × jle` quits (~mstksg@cpe-23-240-75-236.socal.res.rr.com) (Changing host)
14:35:12 jle` joins (~mstksg@unaffiliated/mstksg)
14:35:22 <ski> another example is something like `newtype Sink a = MkSink (a -> IO ())', that's used to throw `a' values to somewhere else, perhaps in another concurrently executing thread. that's also contravariant
14:35:41 <quazimod1> oh i see what you mean
14:35:43 ddellacosta joins (~dd@86.106.121.168)
14:36:06 <ski> if you have a `Chan a', that's a concurrent channel that you can both write to, and read from, from different threads
14:36:31 <ski> sometimes it may be good to "separate" the read and the write ends, so that you have `ReadChan a' to read `a's from, and `WriteChan a' to write `a's to
14:36:59 <ski> `ReadChan' can be made into a (covariant) functor (so `Functor'), while `WriteChan' can be made into a contravariant functor (`Contrafunctor')
14:37:32 <ski> you can do the same thing with references to mutable cells, like `IORef',`IOArray',`MVar', have separate read and write interfaces to them
14:37:55 <ski> the point of doing this, is if you want to ensure that one part of the program can only read from it, and another part of the program can only write to it
14:38:17 <quazimod1> I think that I understand
14:38:36 × phaul quits (~phaul@ruby/staff/phaul) (Ping timeout: 260 seconds)
14:39:09 <ski> (i think people doesn't do this, that commonly, but it could be done. being able to `fmap' or `contramap' (for contravariant functors) over them could be handy, in some cases. `Chan',`IORef',`IOArray i' are not functors at all, neither covariant nor contravariant, you can't "map" over them)
14:42:19 <quazimod1> this all makes sense
14:42:21 <quazimod1> also i really should seep!
14:42:31 × lorozic quits (~lorozic@wks-41-812.mpi-sws.org) (Quit: Leaving)
14:42:32 <quazimod1> peace, tomorrow!
14:42:33 <ski> have fun !
14:42:37 × datajerk quits (~datajerk@sense.net) (Quit: ZNC 1.7.3 - https://znc.in)
14:42:40 × jle` quits (~mstksg@unaffiliated/mstksg) (Ping timeout: 265 seconds)
14:42:52 phaul joins (~phaul@ruby/staff/phaul)
14:42:56 datajerk joins (~datajerk@sense.net)
14:43:03 × pta2002 quits (~quassel@104.248.23.110) (Remote host closed the connection)
14:44:11 pta2002 joins (~quassel@104.248.23.110)
14:45:21 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
14:46:38 Gurkenglas joins (~Gurkengla@unaffiliated/gurkenglas)
14:50:28 <hololeap> @unmtl StateT s (ErrorT e (ReaderT r m)) a
14:50:28 <lambdabot> s -> r -> m (Either e (a, s))
14:50:44 <hololeap> @unmtl ReaderT r (StateT s (ErrorT e m)) a
14:50:44 <lambdabot> r -> s -> m (Either e (a, s))
14:51:19 mmynsted[m] joins (mmynstedtc@gateway/shell/matrix.org/x-zaildyuiusfkwsag)
14:52:44 <hololeap> so, where you place a ReaderT doesn't change anything except the order of input arguments?
14:53:21 oisdk joins (~oisdk@2001:bb6:3329:d100:c982:e387:7052:58be)
14:53:59 Guest18 joins (567e8866@gateway/web/cgi-irc/kiwiirc.com/ip.86.126.136.102)
14:54:56 <ski> @unmtl ReaderT r (ContT o m) a
14:54:56 <lambdabot> r -> (a -> m o) -> m o
14:54:57 <ski> @unmtl ContT o (ReaderT r m) a
14:54:57 <lambdabot> (a -> r -> m o) -> r -> m o
14:55:06 <ski> @unmtl StateT s (ContT o m) a
14:55:06 <lambdabot> s -> (a -> s -> m o) -> m o
14:55:27 <ski> @unmtl ContT o (StateT s m) a
14:55:28 <lambdabot> (a -> s -> m (o, s)) -> s -> m (o, s)
14:55:35 <ski> hololeap : "depends"
14:55:37 alp joins (~alp@2a01:e0a:58b:4920:3117:a7c5:eaf1:360f)
14:56:57 <ski> also, `ReaderT r (LogicT m) a' is not the same as `LogicT (ReaderT r m) a'
14:57:08 akegalj joins (~akegalj@93-138-123-17.adsl.net.t-com.hr)
14:57:13 <ski> (where `LogicT' is more or less "`ListT' done right")
14:57:13 × snakemas1 quits (~snakemast@213.100.206.23) (Ping timeout: 264 seconds)
14:57:17 <ski> @wiki ListT done right
14:57:17 <lambdabot> https://wiki.haskell.org/ListT_done_right
14:57:23 jneira[m] joins (~jneira@227.red-176-87-45.dynamicip.rima-tde.net)
14:58:23 <ski> @hackage logict
14:58:23 <lambdabot> https://hackage.haskell.org/package/logict
14:58:42 martin02 joins (silas@hund.fs.lmu.de)
15:00:01 × noirin quits (~noirin@185.103.96.135) ()
15:04:35 × plutoniix quits (~q@ppp-223-24-166-134.revip6.asianet.co.th) (Quit: Leaving)
15:05:46 × toorevitimirp quits (~tooreviti@117.182.180.245) (Remote host closed the connection)
15:08:51 jle` joins (~mstksg@unaffiliated/mstksg)
15:12:42 nand_ joins (~nand@haasn.xyz)
15:12:47 × nand_ quits (~nand@haasn.xyz) (Remote host closed the connection)
15:14:10 × cpressey quits (~cpressey@88.144.95.3) (Quit: WeeChat 1.9.1)
15:17:48 × jle` quits (~mstksg@unaffiliated/mstksg) (Ping timeout: 272 seconds)
15:18:06 cpressey joins (~cpressey@88.144.95.3)
15:19:47 <AWizzArd> Using the `req` http client – is there a way to get the request as a String? The headers and body? The data that it will send over the wire?
15:20:19 fendor joins (~fendor@178.115.129.46.wireless.dyn.drei.com)
15:20:29 Salt1 joins (~Salt@s91904426.blix.com)
15:22:11 × seanvert` quits (~user@177.84.244.242) (Remote host closed the connection)
15:23:00 bloodstalker joins (~bloodstal@46.166.187.154)
15:24:20 heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
15:24:27 × Gurkenglas quits (~Gurkengla@unaffiliated/gurkenglas) (Ping timeout: 240 seconds)
15:25:37 × rihards quits (~rihards@balticom-142-78-50.balticom.lv) (Quit: rihards)
15:29:00 × heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 260 seconds)
15:29:58 × acarrico quits (~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) (Ping timeout: 256 seconds)
15:30:42 shatriff joins (~vitaliish@88.155.146.251)
15:30:52 jle` joins (~mstksg@unaffiliated/mstksg)
15:31:08 × PragCypher_ quits (~cypher@li1507-98.members.linode.com) (Quit: ZNC 1.7.5 - https://znc.in)
15:31:19 heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
15:31:20 × bahamas quits (~lucian@unaffiliated/bahamas) (Ping timeout: 260 seconds)
15:31:53 snakemas1 joins (~snakemast@213.100.206.23)
15:32:30 × shatriff quits (~vitaliish@88.155.146.251) (Remote host closed the connection)
15:34:23 × Lord_of_Life quits (~Lord@unaffiliated/lord-of-life/x-0885362) (Quit: Laa shay'a waqi'un moutlaq bale kouloun moumkine)
15:34:52 justsomeguy joins (~justsomeg@unaffiliated/--/x-3805311)
15:36:07 × ryansmccoy quits (~ryansmcco@193.37.254.27) (Ping timeout: 240 seconds)
15:36:30 × voyons_osti quits (~dan@107-190-41-58.cpe.teksavvy.com) (Read error: Connection reset by peer)
15:36:31 × danso quits (~dan@107-190-41-58.cpe.teksavvy.com) (Read error: Connection reset by peer)
15:36:31 ryansmccoy joins (~ryansmcco@156.96.151.132)
15:36:45 × kav quits (~kari@dsl-hkibng42-56733f-225.dhcp.inet.fi) (Ping timeout: 240 seconds)
15:36:46 shatriff joins (~vitaliish@88.155.146.251)
15:36:46 avdb joins (~avdb@ip-213-49-61-90.dsl.scarlet.be)
15:37:02 danso joins (~dan@107-190-41-58.cpe.teksavvy.com)
15:37:18 voyons_osti joins (~dan@107-190-41-58.cpe.teksavvy.com)
15:37:26 × snakemas1 quits (~snakemast@213.100.206.23) (Ping timeout: 272 seconds)
15:37:32 <dminuoso> AWizzArd: To what end?
15:38:04 dyeplexer joins (~lol@unaffiliated/terpin)
15:38:30 × dhouthoo quits (~dhouthoo@ptr-eiv6509pb4ifhdr9lsd.18120a2.ip6.access.telenet.be) (Quit: WeeChat 2.8)
15:39:05 PragCypher joins (~cypher@li1507-98.members.linode.com)
15:39:24 × PragCypher quits (~cypher@li1507-98.members.linode.com) (Client Quit)
15:40:02 xerox_ joins (~xerox@unaffiliated/xerox)
15:40:05 knupfer joins (~Thunderbi@dynamic-046-114-150-131.46.114.pool.telefonica.de)
15:41:29 <dminuoso> At any rate, judging from the API, you could use req' to do that.
15:41:41 PragCypher joins (~cypher@li1507-98.members.linode.com)
15:44:35 kav joins (~kari@dsl-hkibng42-56733f-225.dhcp.inet.fi)
15:44:41 × nbloomf quits (~nbloomf@2600:1700:83e0:1f40:1da1:2732:bb9f:da76) (Quit: My MacBook has gone to sleep. ZZZzzz…)
15:45:15 × kritzefitz quits (~kritzefit@fw-front.credativ.com) (Remote host closed the connection)
15:45:36 <dminuoso> You dont get any access to the primitives that generate the raw string though.
15:45:41 <dminuoso> That's hidden deep inside https://hackage.haskell.org/package/http-client-0.7.2.1/docs/src/Network.HTTP.Client.Request.html#requestBuilder
15:46:12 snakemas1 joins (~snakemast@213.100.206.23)
15:46:40 hnOsmium0001 joins (uid453710@gateway/web/irccloud.com/x-wkoagvlxhlhmtgti)
15:47:58 <AWizzArd> dminuoso: okay I see, thx. I saw that there *are* tools to analyze the response (but not the request).
15:48:07 × borne quits (~fritjof@2001:638:708:30da:1afd:4599:bd4b:9f4b) (Ping timeout: 240 seconds)
15:48:20 <dminuoso> There's also several steps in between that do modifications to the request.
15:48:33 × conal quits (~conal@66.115.157.135) (Quit: Computer has gone to sleep.)
15:48:43 nbloomf joins (~nbloomf@2600:1700:83e0:1f40:1da1:2732:bb9f:da76)
15:48:46 <dminuoso> So req' only gives you access to an early less-modified version of it
15:50:05 × jle` quits (~mstksg@unaffiliated/mstksg) (Ping timeout: 240 seconds)
15:50:39 bahamas joins (~lucian@unaffiliated/bahamas)
15:52:00 <AWizzArd> I found a QQ that lets me write multiline strings: http://hackage.haskell.org/package/raw-strings-qq-1.1/docs/Text-RawString-QQ.html
15:52:14 <AWizzArd> Is there something that outputs Text or ByteString?
15:53:06 <dminuoso> AWizzArd: there's string-qq
15:53:34 <dminuoso> You could trivially make your own QQ around the one from raw-strings-qq as well)
15:53:44 × xff0x quits (~fox@2001:1a81:5339:8000:bdc7:ef33:4985:5e4f) (Ping timeout: 244 seconds)
15:53:50 <dminuoso> It's just a matter of `fmap fromString`
15:54:09 <AWizzArd> dminuoso: perfect, I wasn’t brave enough to ask even for this.
15:54:28 kritzefitz joins (~kritzefit@fw-front.credativ.com)
15:54:50 xff0x joins (~fox@2001:1a81:5339:8000:d49f:ac74:3895:c1cd)
15:54:50 conal joins (~conal@66.115.157.135)
15:54:53 × kritzefitz quits (~kritzefit@fw-front.credativ.com) (Remote host closed the connection)
15:54:58 × ubert quits (~Thunderbi@2a02:8109:9880:303c:ca5b:76ff:fe29:f233) (Remote host closed the connection)
15:55:18 × avdb quits (~avdb@ip-213-49-61-90.dsl.scarlet.be) (Quit: WeeChat 2.9)
15:56:27 × albert_99 quits (~Albert@p200300e5ff0b5b39340e476afbaec452.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
15:57:06 × PragCypher quits (~cypher@li1507-98.members.linode.com) (Quit: ZNC 1.7.5 - https://znc.in)
15:57:13 thir joins (~thir@p200300f27f0fc60038c1b16891cbfa03.dip0.t-ipconnect.de)
15:57:20 × conal quits (~conal@66.115.157.135) (Client Quit)
15:58:22 cfricke joins (~cfricke@unaffiliated/cfricke)
15:58:57 PragCypher joins (~cypher@li1507-98.members.linode.com)
15:59:06 tttom[m] joins (tttommatri@gateway/shell/matrix.org/x-adhyifuyanfymgvo)
15:59:34 × cfricke quits (~cfricke@unaffiliated/cfricke) (Client Quit)
15:59:43 lordcirth_ parts (~lordcirth@2607:f2c0:95a8:ef00:b128:6022:758c:dbc) ("Leaving")
15:59:44 kritzefitz joins (~kritzefit@fw-front.credativ.com)
15:59:59 × nbloomf quits (~nbloomf@2600:1700:83e0:1f40:1da1:2732:bb9f:da76) (Quit: Textual IRC Client: www.textualapp.com)
16:00:15 × cpressey quits (~cpressey@88.144.95.3) (Quit: WeeChat 1.9.1)
16:01:11 × kuribas quits (~user@ptr-25vy0i9yx55ffflw5e3.18120a2.ip6.access.telenet.be) (Quit: ERC (IRC client for Emacs 26.3))
16:01:47 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 240 seconds)
16:02:02 × kritzefitz quits (~kritzefit@fw-front.credativ.com) (Client Quit)
16:02:25 × thir quits (~thir@p200300f27f0fc60038c1b16891cbfa03.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
16:05:55 × jchia_ quits (~jchia@58.32.35.239) (Ping timeout: 240 seconds)
16:07:53 × bahamas quits (~lucian@unaffiliated/bahamas) (Ping timeout: 260 seconds)
16:09:30 aenesidemus joins (~aenesidem@c-73-53-247-25.hsd1.fl.comcast.net)
16:09:36 × snakemas1 quits (~snakemast@213.100.206.23) (Ping timeout: 260 seconds)
16:11:06 raehik joins (~raehik@cpc96984-rdng25-2-0-cust109.15-3.cable.virginm.net)
16:11:07 <tomsmeding> AWizzArd: if all you're after is multiline strings, not necessarily the lack of escape sequences, then plain haskell has that :p
16:11:30 <tomsmeding> thing = "this is a\n\
16:11:34 <tomsmeding> \multiline string"
16:11:51 jle` joins (~mstksg@cpe-23-240-75-236.socal.res.rr.com)
16:11:51 × jle` quits (~mstksg@cpe-23-240-75-236.socal.res.rr.com) (Changing host)
16:11:51 jle` joins (~mstksg@unaffiliated/mstksg)
16:11:51 <tomsmeding> (... with two more spaces)
16:12:11 × akegalj quits (~akegalj@93-138-123-17.adsl.net.t-com.hr) (Remote host closed the connection)
16:13:00 × da39a3ee5e6b4b0d quits (~textual@n11211935170.netvigator.com) (Quit: My MacBook has gone to sleep. ZZZzzz…)
16:13:02 × PragCypher quits (~cypher@li1507-98.members.linode.com) (Quit: ZNC 1.7.5 - https://znc.in)
16:14:31 PragCypher joins (~cypher@li1507-98.members.linode.com)
16:16:02 cole-h joins (~cole-h@c-73-48-197-220.hsd1.ca.comcast.net)
16:17:37 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
16:19:06 conal joins (~conal@66.115.157.135)
16:19:47 × jle` quits (~mstksg@unaffiliated/mstksg) (Ping timeout: 240 seconds)
16:19:50 × conal quits (~conal@66.115.157.135) (Client Quit)
16:20:07 minne joins (~minne@4e69b241.skybroadband.com)
16:20:29 <AWizzArd> tomsmeding: I considered that, but it’s just not readable.
16:20:46 <AWizzArd> tomsmeding: the [s| ... |] macro works fine.
16:23:12 × GyroW quits (~GyroW@unaffiliated/gyrow) (Quit: Someone ate my pie)
16:23:23 GyroW joins (~GyroW@d54C03E98.access.telenet.be)
16:23:23 × GyroW quits (~GyroW@d54C03E98.access.telenet.be) (Changing host)
16:23:23 GyroW joins (~GyroW@unaffiliated/gyrow)
16:25:28 albert_99 joins (~Albert@p200300e5ff0b5b39340e476afbaec452.dip0.t-ipconnect.de)
16:26:45 conal joins (~conal@64.71.133.70)
16:27:17 × shatriff quits (~vitaliish@88.155.146.251) (Remote host closed the connection)
16:27:19 avdb joins (~avdb@ip-213-49-61-90.dsl.scarlet.be)
16:29:47 × albert_99 quits (~Albert@p200300e5ff0b5b39340e476afbaec452.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
16:30:06 codygman_work joins (~user@47-184-107-46.dlls.tx.frontiernet.net)
16:30:07 <maerwald> pretty much all quasiquoters are broken on unicode, aren't they?
16:31:12 × Takumo quits (takumo@unaffiliated/takumokatekari) (Quit: WeeChat 2.8)
16:31:12 × xff0x quits (~fox@2001:1a81:5339:8000:d49f:ac74:3895:c1cd) (Ping timeout: 260 seconds)
16:31:15 solonarv joins (~solonarv@adijon-655-1-70-207.w90-13.abo.wanadoo.fr)
16:31:32 <maerwald> https://github.com/audreyt/string-qq/issues/2
16:31:47 Takumo joins (takumo@unaffiliated/takumokatekari)
16:31:56 <maerwald> ah, it was the old bytestring issue
16:31:56 sedeki joins (~textual@unaffiliated/sedeki)
16:32:00 xff0x joins (~fox@port-92-193-207-209.dynamic.as20676.net)
16:32:46 <maralorn> I have made good experiences with https://hackage.haskell.org/package/interpolate-0.2.1/docs/Data-String-Interpolate.html#v:i
16:33:10 mirrorbird joins (~psutcliff@2a00:801:2d5:9d73:ff00:6553:d451:a276)
16:33:20 <maralorn> No, wait. That's not the one I meant.
16:33:36 jle` joins (~mstksg@cpe-23-240-75-236.socal.res.rr.com)
16:33:37 × jle` quits (~mstksg@cpe-23-240-75-236.socal.res.rr.com) (Changing host)
16:33:37 jle` joins (~mstksg@unaffiliated/mstksg)
16:33:38 <maralorn> This one. https://hackage.haskell.org/package/string-interpolate-0.3.0.2/docs/Data-String-Interpolate.html#v:i
16:33:43 <maerwald> maralorn: https://github.com/sol/interpolate/issues/14
16:33:45 <maerwald> haha
16:33:48 <maerwald> I'm right
16:33:56 geekosaur joins (42d52102@66.213.33.2)
16:34:27 <maerwald> https://gitlab.com/williamyaoh/string-interpolate/-/tree/master#unicode-handling
16:34:32 <maralorn> Gonna test that. now.
16:34:57 <AWizzArd> maralorn: besides what maerwald said this looks even nicer.
16:36:09 <maerwald> nice table https://gitlab.com/williamyaoh/string-interpolate/-/tree/master#features
16:37:27 × ArsenArsen quits (~Arsen@kshare/developer/ArsenArsen) (Ping timeout: 240 seconds)
16:37:33 × aurieeeh quits (~aurieh@static.91.102.243.136.clients.your-server.de) (Ping timeout: 256 seconds)
16:37:38 bahamas joins (~lucian@unaffiliated/bahamas)
16:38:14 × auri_ quits (~auri_@fsf/memeber/auri-) (Ping timeout: 272 seconds)
16:39:16 <maralorn> I remember using string-interpolate in a library of mine and promptly got a PR patching all uses out …
16:39:22 × mirrorbird quits (~psutcliff@2a00:801:2d5:9d73:ff00:6553:d451:a276) (Ping timeout: 260 seconds)
16:39:28 <maralorn> Okay, admittedly it was only one use. So it was kinda useless.
16:39:46 <maerwald> also note that quasiquoters break/confuse hasktags
16:39:58 <maralorn> What's that?
16:39:58 × jle` quits (~mstksg@unaffiliated/mstksg) (Ping timeout: 260 seconds)
16:40:07 LKoen joins (~LKoen@81.255.219.130)
16:40:15 <maerwald> @hackage hasktags
16:40:16 <lambdabot> https://hackage.haskell.org/package/hasktags
16:40:29 aurieeeh joins (~aurieh@static.91.102.243.136.clients.your-server.de)
16:40:32 shatriff joins (~vitaliish@88.155.146.251)
16:40:36 ArsenArsen joins (~Arsen@kshare/developer/ArsenArsen)
16:41:01 auri_ joins (~auri_@fsf/memeber/auri-)
16:42:18 × emmanuel_erc quits (~user@2604:2000:1382:ce03:88f9:ad61:775c:c25) (Remote host closed the connection)
16:42:28 emmanuel_erc joins (~user@2604:2000:1382:ce03:25fa:9e0d:1140:beff)
16:43:07 × bahamas quits (~lucian@unaffiliated/bahamas) (Ping timeout: 240 seconds)
16:43:09 × raichoo quits (~raichoo@dslb-088-077-027-113.088.077.pools.vodafone-ip.de) (Quit: Lost terminal)
16:43:26 <maralorn> Ah, don‘t use that.
16:43:34 <maralorn> I don‘t use that.^^
16:43:43 <maralorn> This was not a recommendation.
16:44:31 howdoi joins (uid224@gateway/web/irccloud.com/x-bptppyjybdukwtgy)
16:45:05 <maerwald> it's the only thing that lets you jump to library definitions
16:45:14 <maerwald> (via codex)
16:46:30 × sedeki quits (~textual@unaffiliated/sedeki) (Quit: Textual IRC Client: www.textualapp.com)
16:46:43 <geekosaur> but any kind of quoter or macro processor will generally make tags utilities unhappy unless they do full parses. which ghci does, but then has a lame tags generator
16:47:47 juuandyy joins (~juuandyy@90.166.144.65)
16:48:12 <maerwald> GHC parses isn't exposed I hear
16:50:08 <geekosaur> no, but haskell-src-exts is. and there are plugins. but tags utilities have to combine normal parsing with regex since it generates regexes for a tags-consuming program to use, so it all gets fairly tricky
16:50:18 st8less joins (~st8less@2603:a060:11fd:0:443c:d730:5d8c:f920)
16:52:44 <geekosaur> of course, if you follow this all too far, you land in the mess of semantic editors
16:54:55 × oisdk quits (~oisdk@2001:bb6:3329:d100:c982:e387:7052:58be) (Ping timeout: 240 seconds)
16:56:00 × nineonine quits (~nineonine@216-19-190-182.dyn.novuscom.net) (Remote host closed the connection)
16:56:22 oisdk joins (~oisdk@2001:bb6:3329:d100:c982:e387:7052:58be)
16:57:21 Guest_67 joins (904061ed@bl23-97-237.dsl.telepac.pt)
16:57:39 <maralorn> hls will soon have jum to library definitions.
16:57:47 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 240 seconds)
16:58:16 × Guest_67 quits (904061ed@bl23-97-237.dsl.telepac.pt) (Remote host closed the connection)
16:58:23 × nckx quits (~nckx@tobias.gr) (Quit: Updating my Guix System — https://guix.gnu.org)
16:59:12 <sm[m]> that's going to be great!
17:00:09 Guest_62 joins (904061ed@bl23-97-237.dsl.telepac.pt)
17:00:33 × conal quits (~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
17:00:35 wroathe joins (~wroathe@c-73-24-27-54.hsd1.mn.comcast.net)
17:01:13 <Guest_62> I'm having problems installing haskell
17:01:50 <Guest_62> i have a mac
17:01:55 <davean> Guest_62: did you install it via ghcup? Or did you do pieces on your own?
17:02:11 albert_99 joins (~Albert@p200300e5ff0b5b39340e476afbaec452.dip0.t-ipconnect.de)
17:02:14 <Guest_62> via ghcup
17:02:19 <davean> What went wrong?
17:02:26 <maerwald> PATH
17:02:26 × knupfer quits (~Thunderbi@dynamic-046-114-150-131.46.114.pool.telefonica.de) (Read error: Connection reset by peer)
17:02:29 <maerwald> :)
17:02:54 <sm[m]> docs! :)
17:03:10 <maerwald> sm[m]: there's enough info, but ppl don't read it
17:03:41 <davean> I do not understand why people don't read directions
17:03:41 nineonine joins (~nineonine@216.81.48.202)
17:03:48 × nineonine quits (~nineonine@216.81.48.202) (Remote host closed the connection)
17:03:53 <sm[m]> it's still a docs fail somehow.. if they're necessary, how do you ensure they are read...
17:03:57 <maerwald> could add a quizz at the end of the installation that tries to figure out if the user has read the instructions
17:04:02 nineonine joins (~nineonine@216.81.48.202)
17:04:06 <sm[m]> indeed
17:04:17 <sm[m]> or have the script print the required docs to the console ?
17:04:20 × Guest_62 quits (904061ed@bl23-97-237.dsl.telepac.pt) (Remote host closed the connection)
17:04:27 <maerwald> oh, they left
17:04:37 <sm[m]> very wise :)
17:04:56 <sm[m]> maerwald: could the script do whatever docs are telling users to do ?
17:05:05 <davean> thats not reasonable
17:05:16 <maerwald> and it's platform dependent
17:05:17 <davean> Nor desirable
17:05:18 <sm[m]> sometimes, but it's valid question to ask
17:05:21 × alp quits (~alp@2a01:e0a:58b:4920:3117:a7c5:eaf1:360f) (Ping timeout: 272 seconds)
17:05:30 <sm[m]> I don't say it's easy or always desirable
17:05:33 <maerwald> many mac users here ask how to *open a file*
17:06:05 <sm[m]> PATH in particular trips up almost every new user and is something that really should be more automatable
17:06:14 <ghoulguy> maerwald: When I start ghcup tui, all the outdated GHC versions tend to dominate the screen. This will only get worse over time. Do you think we could come up witha better order that features the more useful list entries with the outdated stuff below?
17:06:19 motherfs1 is now known as motherfsck
17:06:42 <sm[m]> (I'm not pointing the finger at ghcup here, I have the same problem in my docs)
17:06:52 <maerwald> ghoulguy: https://gitlab.haskell.org/haskell/ghcup-hs/-/issues/69
17:07:32 <sm[m]> stack's install script and stack itself print a clear(ish) warning about PATH on the console, that's something at least
17:08:14 conal joins (~conal@64.71.133.70)
17:08:32 <maralorn> simonmic: I despise scripts as replacement for documentation. They keep me stupid.
17:09:07 <maerwald> and unix is so messy, there's no real API to add something to PATH
17:09:19 <davean> Yah, and it varies by shell and other factors
17:09:19 <ghoulguy> maerwald: Thanks. I left some notes.
17:09:24 <davean> PATH is a really complicated variable.
17:09:32 <sm[m]> maralorn: if you stick to that view, we'd never get anywhere
17:09:45 <sm[m]> some abstraction is needed
17:10:03 <maralorn> simonmic: Well I think it depends on the situation. ;-)
17:10:05 <sm[m]> I for one am heartily sick of explaining PATH issues
17:10:07 <maerwald> davean: it's reassuring that the entirety of nix is based on that variable :p
17:10:24 <koala_man> my favorite PATH fun fact is that you can put a literal tilde in it, and only bash will treat it as your home dir
17:10:29 <davean> maerwald: thats hardly true
17:10:44 <maralorn> maerwald: sudo cp .bin/* /usr/bin?
17:10:57 <maerwald> sudo: command not found
17:11:03 <maralorn> Very clean api
17:11:06 × justsomeguy quits (~justsomeg@unaffiliated/--/x-3805311) ()
17:11:25 <maerwald> I despise scripts that assume I have sudo... and I despise scripts that just run it
17:12:58 bahamas joins (~lucian@unaffiliated/bahamas)
17:12:58 nckx joins (~nckx@tobias.gr)
17:13:58 knupfer joins (~Thunderbi@dynamic-046-114-150-131.46.114.pool.telefonica.de)
17:15:48 <dsal> Running it from inside a command is quite wrong.
17:16:04 × raehik quits (~raehik@cpc96984-rdng25-2-0-cust109.15-3.cable.virginm.net) (Quit: WeeChat 2.8)
17:16:27 <yushyin> to make things more interesting, I use zsh's option to treat PATH as a Set. `typeset -U path; path+=(~/.local/bin)' :)
17:17:27 × bahamas quits (~lucian@unaffiliated/bahamas) (Ping timeout: 240 seconds)
17:18:14 × dolio quits (~dolio@haskell/developer/dolio) (Read error: Connection reset by peer)
17:18:34 <sm[m]> this is not helping! :)
17:19:08 × oisdk quits (~oisdk@2001:bb6:3329:d100:c982:e387:7052:58be) (Quit: oisdk)
17:19:43 × Guest18 quits (567e8866@gateway/web/cgi-irc/kiwiirc.com/ip.86.126.136.102) (Quit: Connection closed)
17:20:28 mirrorbird joins (~psutcliff@2a00:801:2d5:9d73:ff00:6553:d451:a276)
17:20:39 dolio joins (~dolio@haskell/developer/dolio)
17:20:41 johnw joins (~johnw@haskell/developer/johnw)
17:21:09 jle` joins (~mstksg@unaffiliated/mstksg)
17:21:19 × heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
17:23:16 snakemas1 joins (~snakemast@213.100.206.23)
17:23:16 × jneira[m] quits (~jneira@227.red-176-87-45.dynamicip.rima-tde.net) (Read error: Connection reset by peer)
17:23:34 jneira[m] joins (~jneira@80.30.101.206)
17:24:05 thir joins (~thir@p200300f27f0fc60038c1b16891cbfa03.dip0.t-ipconnect.de)
17:25:53 × nyd quits (~nyd@unaffiliated/elysian) (Quit: nyd)
17:27:38 × jle` quits (~mstksg@unaffiliated/mstksg) (Ping timeout: 272 seconds)
17:28:00 × snakemas1 quits (~snakemast@213.100.206.23) (Ping timeout: 260 seconds)
17:29:24 oisdk joins (~oisdk@2001:bb6:3329:d100:c982:e387:7052:58be)
17:29:57 Sgeo_ joins (~Sgeo@ool-18b982ad.dyn.optonline.net)
17:32:12 × Sgeo quits (~Sgeo@ool-18b982ad.dyn.optonline.net) (Ping timeout: 260 seconds)
17:33:25 × albert_99 quits (~Albert@p200300e5ff0b5b39340e476afbaec452.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
17:34:05 jle` joins (~mstksg@cpe-23-240-75-236.socal.res.rr.com)
17:34:05 × jle` quits (~mstksg@cpe-23-240-75-236.socal.res.rr.com) (Changing host)
17:34:05 jle` joins (~mstksg@unaffiliated/mstksg)
17:36:17 × conal quits (~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
17:36:22 Gurkenglas joins (~Gurkengla@unaffiliated/gurkenglas)
17:37:08 × phaul quits (~phaul@ruby/staff/phaul) (Ping timeout: 260 seconds)
17:38:17 × chaosmasttter quits (~chaosmast@p200300c4a73b2e01d0131264df465fff.dip0.t-ipconnect.de) (Ping timeout: 272 seconds)
17:38:19 × avdb quits (~avdb@ip-213-49-61-90.dsl.scarlet.be) (Quit: WeeChat 2.9)
17:39:01 heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
17:39:13 × codygman_work quits (~user@47-184-107-46.dlls.tx.frontiernet.net) (Ping timeout: 264 seconds)
17:39:26 codygman` joins (~user@209.251.131.98)
17:40:14 phaul joins (~phaul@ruby/staff/phaul)
17:40:38 conal joins (~conal@64.71.133.70)
17:41:23 <maerwald> I think the solution is to refine the automatic shell detection logic and do the right thing when ppl just hit the ANY key in anger
17:42:15 <geekosaur> then there's getting the running shell to acknowledge it somehow
17:42:34 × jle` quits (~mstksg@unaffiliated/mstksg) (Ping timeout: 256 seconds)
17:42:49 <geekosaur> and no, kill -9 $PPID won't cut it :)
17:43:35 × shatriff quits (~vitaliish@88.155.146.251) (Remote host closed the connection)
17:44:10 <maerwald> geekosaur: that reminds me of my coc.nvim bug report for being able to shut down the LSP server. I was told to use kill :)
17:44:14 Lycurgus joins (~niemand@98.4.96.130)
17:45:07 × phaul quits (~phaul@ruby/staff/phaul) (Ping timeout: 240 seconds)
17:45:26 justsomeguy joins (~justsomeg@unaffiliated/--/x-3805311)
17:46:57 <dsal> GHC used to have that feature where it deleted bad code...
17:47:49 phaul joins (~phaul@ruby/staff/phaul)
17:48:26 × polyphem quits (~p0lyph3m@2a02:810d:640:776c:76d7:55f6:f85b:c889) (Ping timeout: 244 seconds)
17:49:37 polyphem joins (~p0lyph3m@2a02:810d:640:776c:76d7:55f6:f85b:c889)
17:53:01 × dyeplexer quits (~lol@unaffiliated/terpin) (Remote host closed the connection)
17:53:52 jle` joins (~mstksg@cpe-23-240-75-236.socal.res.rr.com)
17:53:52 × jle` quits (~mstksg@cpe-23-240-75-236.socal.res.rr.com) (Changing host)
17:53:52 jle` joins (~mstksg@unaffiliated/mstksg)
17:55:12 × knupfer quits (~Thunderbi@dynamic-046-114-150-131.46.114.pool.telefonica.de) (Read error: Connection reset by peer)
17:55:54 × geekosaur quits (42d52102@66.213.33.2) (Ping timeout: 245 seconds)
17:57:00 <maerwald> and then it deledted itself? :)
17:57:14 <monochrom> Haha leave no evidence :)
17:57:30 <dolio> No, GHC passed its own type checker at that point, probably.
17:59:51 avdb joins (~avdb@ip-213-49-61-90.dsl.scarlet.be)
18:00:02 × Salt1 quits (~Salt@s91904426.blix.com) ()
18:00:58 × jle` quits (~mstksg@unaffiliated/mstksg) (Ping timeout: 246 seconds)
18:01:09 × Sgeo_ quits (~Sgeo@ool-18b982ad.dyn.optonline.net) (Read error: Connection reset by peer)
18:06:53 Sgeo joins (~Sgeo@ool-18b982ad.dyn.optonline.net)
18:08:14 Aquazi joins (uid312403@gateway/web/irccloud.com/x-bssvxoobsmajjsoa)
18:08:32 albert_99 joins (~Albert@p200300e5ff0b5b39340e476afbaec452.dip0.t-ipconnect.de)
18:09:21 × avdb quits (~avdb@ip-213-49-61-90.dsl.scarlet.be) (Quit: WeeChat 2.9)
18:11:12 bahamas joins (~lucian@188.24.181.166)
18:11:12 × bahamas quits (~lucian@188.24.181.166) (Changing host)
18:11:12 bahamas joins (~lucian@unaffiliated/bahamas)
18:12:16 × cosimone quits (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6) (Quit: Quit.)
18:14:40 chaosmasttter joins (~chaosmast@p200300c4a73b2e01d0131264df465fff.dip0.t-ipconnect.de)
18:15:38 × pfurla quits (~pfurla@ool-182ed2e2.dyn.optonline.net) (Quit: gone to sleep. ZZZzzz…)
18:16:13 × bahamas quits (~lucian@unaffiliated/bahamas) (Ping timeout: 260 seconds)
18:17:42 × justsomeguy quits (~justsomeg@unaffiliated/--/x-3805311) ()
18:18:55 × albert_99 quits (~Albert@p200300e5ff0b5b39340e476afbaec452.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
18:20:33 albert_99 joins (~Albert@p200300e5ff0b5b39340e476afbaec452.dip0.t-ipconnect.de)
18:20:44 × wroathe quits (~wroathe@c-73-24-27-54.hsd1.mn.comcast.net) (Ping timeout: 260 seconds)
18:21:36 × conal quits (~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
18:22:44 bitmagie joins (~Thunderbi@200116b80618560030363e2b73a65650.dip.versatel-1u1.de)
18:24:58 hackage ordinal 0.2.0.0 - Convert numbers to words in different languages. https://hackage.haskell.org/package/ordinal-0.2.0.0 (wvanonsem90)
18:25:05 × thir quits (~thir@p200300f27f0fc60038c1b16891cbfa03.dip0.t-ipconnect.de) (Remote host closed the connection)
18:25:34 thir joins (~thir@p200300f27f0fc60038c1b16891cbfa03.dip0.t-ipconnect.de)
18:27:05 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
18:28:56 jle` joins (~mstksg@cpe-23-240-75-236.socal.res.rr.com)
18:28:56 × jle` quits (~mstksg@cpe-23-240-75-236.socal.res.rr.com) (Changing host)
18:28:56 jle` joins (~mstksg@unaffiliated/mstksg)
18:29:31 brandly joins (~brandly@c-73-68-15-46.hsd1.ma.comcast.net)
18:29:49 × oisdk quits (~oisdk@2001:bb6:3329:d100:c982:e387:7052:58be) (Quit: oisdk)
18:30:07 × thir quits (~thir@p200300f27f0fc60038c1b16891cbfa03.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
18:30:20 conal joins (~conal@64.71.133.70)
18:31:39 geekosaur joins (42d52102@66.213.33.2)
18:33:08 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 258 seconds)
18:34:59 × jle` quits (~mstksg@unaffiliated/mstksg) (Ping timeout: 240 seconds)
18:35:22 jle` joins (~mstksg@cpe-23-240-75-236.socal.res.rr.com)
18:35:22 × jle` quits (~mstksg@cpe-23-240-75-236.socal.res.rr.com) (Changing host)
18:35:22 jle` joins (~mstksg@unaffiliated/mstksg)
18:36:52 × mirrorbird quits (~psutcliff@2a00:801:2d5:9d73:ff00:6553:d451:a276) (Quit: Leaving)
18:37:13 mirrorbird joins (~psutcliff@2a00:801:2d5:9d73:ff00:6553:d451:a276)
18:37:33 × conal quits (~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
18:40:42 twanvl joins (~twanvl@77.165.89.227)
18:41:28 hackage commander-cli 0.10.0.0 - A command line argument/option parser library https://hackage.haskell.org/package/commander-cli-0.10.0.0 (sgschlesinger)
18:41:44 × jle` quits (~mstksg@unaffiliated/mstksg) (Ping timeout: 260 seconds)
18:42:12 × bitmagie quits (~Thunderbi@200116b80618560030363e2b73a65650.dip.versatel-1u1.de) (Quit: bitmagie)
18:43:09 shatriff joins (~vitaliish@217.27.153.240)
18:43:10 × shatriff quits (~vitaliish@217.27.153.240) (Remote host closed the connection)
18:44:22 × aenesidemus quits (~aenesidem@c-73-53-247-25.hsd1.fl.comcast.net) (Read error: Connection reset by peer)
18:45:48 conal joins (~conal@64.71.133.70)
18:46:05 × ryansmccoy quits (~ryansmcco@156.96.151.132) (Ping timeout: 240 seconds)
18:46:29 hiroaki joins (~hiroaki@ip4d176049.dynamic.kabel-deutschland.de)
18:46:32 ryansmccoy joins (~ryansmcco@193.37.254.27)
18:50:02 bahamas joins (~lucian@unaffiliated/bahamas)
18:51:25 × lechner quits (~lechner@letbox-vps.us-core.com) (Remote host closed the connection)
18:53:11 Zetagon joins (~leo@c151-177-52-233.bredband.comhem.se)
18:54:27 × bahamas quits (~lucian@unaffiliated/bahamas) (Ping timeout: 240 seconds)
18:55:59 × bgamari quits (~bgamari@2001:470:e438::1) (Quit: ZNC 1.7.5 - https://znc.in)
18:56:46 × codygman` quits (~user@209.251.131.98) (Read error: Connection reset by peer)
18:58:20 thir joins (~thir@p200300f27f0fc60038c1b16891cbfa03.dip0.t-ipconnect.de)
18:59:49 × conal quits (~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
19:00:04 jle` joins (~mstksg@cpe-23-240-75-236.socal.res.rr.com)
19:00:04 × jle` quits (~mstksg@cpe-23-240-75-236.socal.res.rr.com) (Changing host)
19:00:04 jle` joins (~mstksg@unaffiliated/mstksg)
19:00:34 bgamari joins (~bgamari@2001:470:e438::1)
19:02:25 LarryTheCow joins (~user@cpe-104-34-71-94.socal.res.rr.com)
19:02:58 hackage commander-cli 0.10.0.1 - A command line argument/option parser library https://hackage.haskell.org/package/commander-cli-0.10.0.1 (sgschlesinger)
19:04:39 nineonin_ joins (~nineonine@216.81.48.202)
19:04:39 × nineonine quits (~nineonine@216.81.48.202) (Read error: Connection reset by peer)
19:05:25 × thir quits (~thir@p200300f27f0fc60038c1b16891cbfa03.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
19:06:22 × juuandyy quits (~juuandyy@90.166.144.65) (Ping timeout: 256 seconds)
19:06:29 × jle` quits (~mstksg@unaffiliated/mstksg) (Ping timeout: 258 seconds)
19:08:43 × roconnor quits (~roconnor@host-45-78-194-116.dyn.295.ca) (Ping timeout: 260 seconds)
19:10:35 bahamas joins (~lucian@unaffiliated/bahamas)
19:11:26 snakemas1 joins (~snakemast@213.100.206.23)
19:15:12 cosimone joins (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6)
19:15:23 alp joins (~alp@2a01:e0a:58b:4920:d98b:8dcd:26ff:1d63)
19:15:45 × snakemas1 quits (~snakemast@213.100.206.23) (Ping timeout: 240 seconds)
19:16:13 conal joins (~conal@64.71.133.70)
19:17:46 × jneira quits (501e65ce@gateway/web/cgi-irc/kiwiirc.com/ip.80.30.101.206) (Ping timeout: 256 seconds)
19:18:27 conal_ joins (~conal@64.71.133.70)
19:19:52 knupfer joins (~Thunderbi@i59F7FFCF.versanet.de)
19:20:58 × conal quits (~conal@64.71.133.70) (Ping timeout: 260 seconds)
19:21:06 × Lycurgus quits (~niemand@98.4.96.130) (Ping timeout: 256 seconds)
19:21:39 × Zetagon quits (~leo@c151-177-52-233.bredband.comhem.se) (Remote host closed the connection)
19:22:19 jneira joins (501e65ce@gateway/web/cgi-irc/kiwiirc.com/ip.80.30.101.206)
19:22:55 × cosimone quits (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6) (Ping timeout: 240 seconds)
19:23:13 × cyphase quits (~cyphase@unaffiliated/cyphase) (Ping timeout: 246 seconds)
19:24:03 × shafox quits (~shafox@106.51.234.111) (Remote host closed the connection)
19:24:17 GyroW_ joins (~GyroW@ptr-48ujrfd1ztq5fjywfw3.18120a2.ip6.access.telenet.be)
19:24:17 × GyroW_ quits (~GyroW@ptr-48ujrfd1ztq5fjywfw3.18120a2.ip6.access.telenet.be) (Changing host)
19:24:17 GyroW_ joins (~GyroW@unaffiliated/gyrow)
19:24:44 <tomsmeding> "deleted bad code" as in, if code doesn't typecheck, let's just not run it?
19:24:49 pfurla joins (~pfurla@ool-182ed2e2.dyn.optonline.net)
19:24:53 × knupfer quits (~Thunderbi@i59F7FFCF.versanet.de) (Quit: knupfer)
19:24:58 knupfer1 joins (~Thunderbi@200116b8242f3f0081952173b951cca6.dip.versatel-1u1.de)
19:25:03 <tomsmeding> that's eerily reminiscent of the behaviour of C compilers in the presence of undefined behaviour
19:25:27 <ski> tomsmeding : no, deleted the source file
19:25:40 cosimone joins (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6)
19:25:52 <tomsmeding> oh, that's far better
19:25:58 <monochrom> :)
19:25:59 × Kaiepi quits (~Kaiepi@nwcsnbsc03w-47-55-225-82.dhcp-dynamic.fibreop.nb.bellaliant.net) (Read error: No route to host)
19:25:59 <tomsmeding> good bug
19:25:59 Kaeipi joins (~Kaiepi@nwcsnbsc03w-47-55-225-82.dhcp-dynamic.fibreop.nb.bellaliant.net)
19:26:04 × GyroW quits (~GyroW@unaffiliated/gyrow) (Ping timeout: 272 seconds)
19:26:06 × knupfer1 quits (~Thunderbi@200116b8242f3f0081952173b951cca6.dip.versatel-1u1.de) (Read error: Connection reset by peer)
19:26:16 knupfer joins (~Thunderbi@200116b8242f3f00494fb3442f584eae.dip.versatel-1u1.de)
19:26:19 × knupfer quits (~Thunderbi@200116b8242f3f00494fb3442f584eae.dip.versatel-1u1.de) (Client Quit)
19:26:27 knupfer joins (~Thunderbi@200116b8242f3f0085a7569c4e781f9d.dip.versatel-1u1.de)
19:26:32 conal joins (~conal@209.58.130.230)
19:27:04 nigel_c joins (~nigel_c@195.140.213.38)
19:27:23 × conal_ quits (~conal@64.71.133.70) (Ping timeout: 260 seconds)
19:28:05 × jneira quits (501e65ce@gateway/web/cgi-irc/kiwiirc.com/ip.80.30.101.206) (Ping timeout: 240 seconds)
19:28:49 shaman_king joins (b94186aa@185.65.134.170)
19:28:50 <shaman_king> hi
19:28:54 <shaman_king> i think haskell is shit.
19:28:58 ChanServ sets mode +o monochrom
19:29:05 monochrom sets mode +b *!*@185.65.134.170
19:29:05 shaman_king is kicked by monochrom (shaman_king)
19:29:36 × cosimone quits (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6) (Read error: Connection reset by peer)
19:31:25 p-core joins (~Thunderbi@2001:718:1e03:5128:2ab7:7f35:48a1:8515)
19:31:30 monochrom sets mode -bbbb *!*@gateway/web/cgi-irc/kiwiirc.com/ip.82.1.242.183 *!*@50-36-180-21.alma.mi.frontiernet.net *!*@gateway/web/cgi-irc/kiwiirc.com/ip.91.217.246.19 *!*@192.95.191.129
19:32:40 monochrom sets mode -bo *!*@gateway/web/cgi-irc/kiwiirc.com/ip.147.135.116.81 monochrom
19:33:07 × murphy_ quits (~murphy_@2604:2000:1281:8a9e:5be4:8f01:b36d:6549) (Ping timeout: 240 seconds)
19:33:29 murphy_ joins (~murphy_@2604:2000:1281:8a9e:46d4:9a6b:fb19:e552)
19:34:23 jle` joins (~mstksg@cpe-23-240-75-236.socal.res.rr.com)
19:34:24 × jle` quits (~mstksg@cpe-23-240-75-236.socal.res.rr.com) (Changing host)
19:34:24 jle` joins (~mstksg@unaffiliated/mstksg)
19:35:39 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
19:35:39 shatriff joins (~vitaliish@217.27.153.240)
19:37:13 thir joins (~thir@p200300f27f0fc60038c1b16891cbfa03.dip0.t-ipconnect.de)
19:39:05 jneira joins (501e65ce@gateway/web/cgi-irc/kiwiirc.com/ip.80.30.101.206)
19:40:06 × hololeap quits (~hololeap@unaffiliated/hololeap) (Quit: KVIrc 5.0.1 Aria http://www.kvirc.net/)
19:40:20 cyphase joins (~cyphase@unaffiliated/cyphase)
19:40:25 hololeap joins (~hololeap@unaffiliated/hololeap)
19:40:26 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 256 seconds)
19:41:55 × heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
19:43:07 × alp quits (~alp@2a01:e0a:58b:4920:d98b:8dcd:26ff:1d63) (Ping timeout: 260 seconds)
19:43:43 × Kaeipi quits (~Kaiepi@nwcsnbsc03w-47-55-225-82.dhcp-dynamic.fibreop.nb.bellaliant.net) (Ping timeout: 260 seconds)
19:44:27 × thir quits (~thir@p200300f27f0fc60038c1b16891cbfa03.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
19:46:03 × jle` quits (~mstksg@unaffiliated/mstksg) (Ping timeout: 260 seconds)
19:47:05 oisdk joins (~oisdk@2001:bb6:3329:d100:c982:e387:7052:58be)
19:49:02 Kaiepi joins (~Kaiepi@nwcsnbsc03w-47-55-225-82.dhcp-dynamic.fibreop.nb.bellaliant.net)
19:52:17 × zebrag quits (~inkbottle@aaubervilliers-654-1-95-218.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!)
19:52:35 <koz_> 0 to kick in less than 10 seconds, nice.
19:52:54 heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
19:53:14 <monochrom> I was still too slow. :)
19:53:56 <dolio> Yeah, should hav IP banned when they were here yesterday. :)
19:54:20 <geekosaur> they were on different IP
19:54:21 <Uniaika> I say, k-line the whole /16
19:54:27 <dolio> Oh were they?
19:54:29 <geekosaur> and using webchat
19:54:30 <geekosaur> yes
19:55:13 <geekosaur> Uniaika, pity that wouldn't work, 3 different /16s too
19:57:08 zebrag joins (~inkbottle@aaubervilliers-654-1-95-218.w86-212.abo.wanadoo.fr)
19:57:26 kritzefitz joins (~kritzefit@212.86.56.80)
19:58:21 theorbtwo joins (~theorb@cpc81860-swin19-2-0-cust166.3-1.cable.virginm.net)
19:58:39 × brandly quits (~brandly@c-73-68-15-46.hsd1.ma.comcast.net) (Remote host closed the connection)
19:58:39 <Uniaika> ah damn
19:58:44 <monochrom> In the past 10 days I can only find 185.65.134.*. But I only grepped for "shaman". Is there some other things I can look for?
19:59:12 × DavidEichmann quits (~david@43.240.198.146.dyn.plus.net) (Ping timeout: 260 seconds)
19:59:43 <monochrom> Well, I can do the known right away.
19:59:45 ChanServ sets mode +o monochrom
19:59:54 × fmeyer quits (uid257539@gateway/web/irccloud.com/x-yvvsemtlqrvsuvhi) (Quit: Connection closed for inactivity)
20:00:06 <geekosaur> I looked at the scrollback where monochrom took off the past two days. and I specifically recall him quieting (not banning) his address via webchat
20:00:07 monochrom sets mode -b+b *!*@185.65.134.170 *!*@185.65.134.*
20:00:59 <geekosaur> and saw removal of (what I think are) those today before monochrom deopped
20:01:20 × bahamas quits (~lucian@unaffiliated/bahamas) (Ping timeout: 256 seconds)
20:03:10 <maerwald> and I wanted to know what he had to say...
20:03:33 <geekosaur> all three by "shaman_king" and all basically the same drivel
20:04:43 <monochrom> I haven't used quieting for a long time. And today I didn't touch the quiet list, I removed old bans, some several months old, some one week old.
20:05:32 <monochrom> (The unbans were about 35 minutes ago.)
20:06:40 × jneira quits (501e65ce@gateway/web/cgi-irc/kiwiirc.com/ip.80.30.101.206) (Ping timeout: 258 seconds)
20:07:07 jle` joins (~mstksg@cpe-23-240-75-236.socal.res.rr.com)
20:07:07 × jle` quits (~mstksg@cpe-23-240-75-236.socal.res.rr.com) (Changing host)
20:07:07 jle` joins (~mstksg@unaffiliated/mstksg)
20:08:02 <monochrom> The ban that I placed on Sep 30 and removed today was for "I'm so h0rny now. Wanna trade. ...", doesn't look like shaman_king.
20:08:22 <geekosaur> ok, yesterday was a kick apparently (I'm looking at ircbrowse which is not good about how/where one joined/parted)
20:09:09 <monochrom> Yesterday they quitted before I was fast enough to kickban. I didn't place a ban for that.
20:09:24 <monochrom> My ban yesterday was for fog.
20:09:40 <geekosaur> hm
20:09:51 <sm[m]> seems excessive
20:09:54 <geekosaur> I can't tell that from ircbrowse apparently
20:10:19 <geekosaur> also I am just about out of time for today :/
20:10:35 × geekosaur quits (42d52102@66.213.33.2) (Remote host closed the connection)
20:13:44 × p-core quits (~Thunderbi@2001:718:1e03:5128:2ab7:7f35:48a1:8515) (Quit: p-core)
20:13:44 × chele quits (~chele@ip5b416ea2.dynamic.kabel-deutschland.de) (Remote host closed the connection)
20:13:52 <dminuoso> How do quasiquoters break/confuse hasktags?
20:14:07 × jle` quits (~mstksg@unaffiliated/mstksg) (Ping timeout: 240 seconds)
20:14:14 monochrom sets mode -o monochrom
20:14:22 jneira joins (501e65ce@gateway/web/cgi-irc/kiwiirc.com/ip.80.30.101.206)
20:15:21 DavidEichmann joins (~david@43.240.198.146.dyn.plus.net)
20:16:13 snakemas1 joins (~snakemast@213.100.206.23)
20:16:58 <maerwald> dminuoso: https://github.com/MarcWeber/hasktags/issues/78
20:18:10 <dminuoso> Mmm curious that hasktags doesnt use haskell-src-exts
20:18:18 <dminuoso> But I guess that's the answer.
20:20:40 × kav quits (~kari@dsl-hkibng42-56733f-225.dhcp.inet.fi) (Ping timeout: 260 seconds)
20:20:40 cosimone joins (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6)
20:20:49 × snakemas1 quits (~snakemast@213.100.206.23) (Ping timeout: 256 seconds)
20:23:15 × conal quits (~conal@209.58.130.230) (Quit: Computer has gone to sleep.)
20:24:20 × oxide quits (~lambda@unaffiliated/mclaren) (Ping timeout: 272 seconds)
20:27:32 caubert joins (~caubert@82.131.52.222.cable.starman.ee)
20:29:27 thir joins (~thir@p200300f27f0fc60038c1b16891cbfa03.dip0.t-ipconnect.de)
20:32:27 hackage phonetic-languages-ukrainian 0.2.3.0 - Prepares Ukrainian text to be used as a phonetic language text https://hackage.haskell.org/package/phonetic-languages-ukrainian-0.2.3.0 (OleksandrZhabenko)
20:32:30 <maerwald> sm[m]: cabal.project in hledger doesn't parse :>
20:33:20 mrbentarikau joins (~mrbentari@207.246.80.112)
20:33:27 hackage uniqueness-periods-vector-common 0.4.1.0 - Generalization of the dobutokO-poetry-general package functionality https://hackage.haskell.org/package/uniqueness-periods-vector-common-0.4.1.0 (OleksandrZhabenko)
20:33:38 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
20:33:46 × thir quits (~thir@p200300f27f0fc60038c1b16891cbfa03.dip0.t-ipconnect.de) (Ping timeout: 244 seconds)
20:33:46 × murphy_ quits (~murphy_@2604:2000:1281:8a9e:46d4:9a6b:fb19:e552) (Ping timeout: 244 seconds)
20:34:35 murphy_ joins (~murphy_@2604:2000:1281:8a9e:5b6c:ced:3586:ca8c)
20:34:42 <sm[m]> maerwald: thanks.. how do I reproduce that ?
20:35:16 conal joins (~conal@209.58.130.230)
20:35:17 voyons_calice joins (~dan@162.246.216.28)
20:35:32 <maerwald> cabal build?
20:36:39 <sm[m]> ah cabal build all
20:37:10 <sm[m]> I get cabal: The program 'ghc' version >=7.0.1 is required but it could not be found. But that's not what you mean I guess ?
20:37:32 <sm[m]> cabal-install 3.2 here
20:37:54 <maerwald> https://paste.tomsmeding.com/kJrW4XQR
20:37:59 <maerwald> 3.4 prerelease
20:38:14 × voyons_osti quits (~dan@107-190-41-58.cpe.teksavvy.com) (Ping timeout: 256 seconds)
20:38:49 borne joins (~fritjof@200116b864d97f00d30d76f456a7111b.dip.versatel-1u1.de)
20:39:48 <sm[m]> it's complaining about the line 8 here I think ? https://paste.tomsmeding.com/Wgovb0sq
20:41:54 × mrbentarikau quits (~mrbentari@207.246.80.112) (Quit: WeeChat 2.8)
20:42:36 mrbentarikau joins (~mrbentari@207.246.80.112)
20:44:51 × caubert quits (~caubert@82.131.52.222.cable.starman.ee) (Remote host closed the connection)
20:46:37 × cosimone quits (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6) (Quit: Quit.)
20:46:52 alp joins (~alp@2a01:e0a:58b:4920:11c4:1b60:3a4e:bcb2)
20:47:16 kav joins (~kari@dsl-hkibng42-56733f-225.dhcp.inet.fi)
20:47:37 cosimone_ joins (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6)
20:49:41 × cosimone_ quits (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6) (Quit: cosimone_)
20:50:43 cosimone joins (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6)
20:51:16 × ryansmccoy quits (~ryansmcco@193.37.254.27) (Ping timeout: 256 seconds)
20:51:31 ryansmccoy joins (~ryansmcco@193.37.254.27)
20:55:03 × Tops22 quits (~Tobias@dyndsl-095-033-093-242.ewe-ip-backbone.de) (Read error: Connection reset by peer)
20:56:31 oxide joins (~lambda@unaffiliated/mclaren)
21:00:01 justsomeguy joins (~justsomeg@unaffiliated/--/x-3805311)
21:00:01 × nigel_c quits (~nigel_c@195.140.213.38) ()
21:03:09 leungbk joins (~user@2605:e000:1315:706:8785:470d:bc5b:c5f9)
21:03:25 × shatriff quits (~vitaliish@217.27.153.240) (Remote host closed the connection)
21:03:47 <leungbk> When is it correct to use 'in' with a 'let' expression?
21:04:15 × obihann quits (~jhann@156.34.160.69) (Remote host closed the connection)
21:04:45 × danvet_ quits (~Daniel@2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa) (Ping timeout: 272 seconds)
21:04:57 hackage uniqueness-periods-vector-general 0.4.5.0 - Some kind of the optimization approach to data inner structure. https://hackage.haskell.org/package/uniqueness-periods-vector-general-0.4.5.0 (OleksandrZhabenko)
21:06:20 <koz_> leungbk: Everywhere except do-notation.
21:06:37 <leungbk> Thanks.
21:06:50 <koz_> Do you have a specific example that's throwing you?
21:08:46 <leungbk> I was writing a simple graph algorithm just now, but after your remark I noticed I was one 'in' short.
21:09:12 <koz_> Are you nesting lets or something?
21:09:25 × knupfer quits (~Thunderbi@200116b8242f3f0085a7569c4e781f9d.dip.versatel-1u1.de) (Ping timeout: 244 seconds)
21:10:03 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 260 seconds)
21:11:41 Lycurgus joins (~niemand@98.4.96.130)
21:12:54 <leungbk> Yeah, I used 'let' to define an inner function and then used 'let' within that inner function. Maybe it would have been better to use 'where' somewhere.
21:13:27 <koz_> Or just define a non-exported top-level function.
21:13:42 <koz_> There's no need to jam everything into one big blob. We have modules with export lists for a reason.
21:14:27 hackage uniqueness-periods-vector-examples 0.9.1.0 - Usage examples for the uniqueness-periods-vector series of packages https://hackage.haskell.org/package/uniqueness-periods-vector-examples-0.9.1.0 (OleksandrZhabenko)
21:15:00 <monochrom> I simply developed a habit of entering "let <newline> in ???" and then fill it in. (I don't want to go out of my way to configure my editor to automate this.)
21:15:43 × cr3 quits (~cr3@192-222-143-195.qc.cable.ebox.net) (Quit: leaving)
21:16:14 <leungbk> I shied away from a separate top-level functio since I needed to read some local variables, and since the function I had defined was recursive.
21:16:14 <leungbk>
21:16:33 <leungbk> I prob need to rethink it though.
21:16:36 <monochrom> Don't worry, you're doing fine. :)
21:16:58 × fendor quits (~fendor@178.115.129.46.wireless.dyn.drei.com) (Remote host closed the connection)
21:17:25 shatriff joins (~vitaliish@217.27.153.240)
21:17:30 <monochrom> I understand that when there is a choice, some people's way of thinking prefers let-in, some other's prefers where. Or generally define-before vs define-after.
21:17:47 <monochrom> Very generally bottom-up vs top-down.
21:18:07 × tito_04 quits (~taurux@net-93-146-7-28.cust.vodafonedsl.it) (Ping timeout: 240 seconds)
21:18:16 <monochrom> Me, I'm a quantum superposition of both.
21:18:56 × kritzefitz quits (~kritzefit@212.86.56.80) (Remote host closed the connection)
21:19:30 taurux joins (~taurux@net-188-152-143-247.cust.dsl.teletu.it)
21:20:28 hackage typed-encoding 0.5.1.0 - Type safe string transformations https://hackage.haskell.org/package/typed-encoding-0.5.1.0 (rpeszek)
21:20:42 <pjb> You have to know all those processes, and mix and match them depending on your knowledge.
21:20:49 <pjb> They are discovery processes.
21:20:59 <pjb> If you know the algorithm you can just code it from a to z.
21:21:26 <pjb> If you don't you need to design or explore, so writing code in all direction is possible.
21:21:54 yar1 joins (~yar@185.163.110.116)
21:22:38 <monochrom> For that reason, people used to advocate prototyping and then throwing away the prototype and restarting from scratch.
21:23:24 <monochrom> I am really fond of that.
21:24:00 <monochrom> But at some point of time, the next generation decided that they couldn't stand throwing away "hard-earned" code.
21:24:57 × coot quits (~coot@37.30.49.218.nat.umts.dynamic.t-mobile.pl) (Quit: coot)
21:25:04 <orzo> i'm having a frustration with cabal. The v2-configure command wants to download a version of a library that i already have installed that works perfectly well to build the project
21:25:17 <orzo> I mean, it wants to download a newer version
21:25:24 <orzo> but i want it to work with what's here
21:25:31 <orzo> it seems like it should be working with what's here
21:25:44 <orzo> because that's the path of least effort for it
21:25:57 <monochrom> Ironically it was the new generation that could easily afford throwing away code wholesale, because they had much more decent VCS (compared to the older generation that believed in throwing away prototypes) such that "throwing away" means you never lost it, you could always refer to it again.
21:26:30 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
21:27:15 × Kaiepi quits (~Kaiepi@nwcsnbsc03w-47-55-225-82.dhcp-dynamic.fibreop.nb.bellaliant.net) (Remote host closed the connection)
21:27:22 Kaiepi joins (~Kaiepi@nwcsnbsc03w-47-55-225-82.dhcp-dynamic.fibreop.nb.bellaliant.net)
21:27:30 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
21:27:35 <monochrom> You have to use "cabal freeze" to prevent bringing in a newer version.
21:27:41 <orzo> aha
21:28:11 <orzo> i use v2-* commands
21:28:17 <orzo> does that mean i should have a v2-freeze?
21:28:33 <monochrom> And if you use it later, e.g. now, the generated "cabal.project.freeze" likely selects the newer version, so you have to edit it to select the older version.
21:28:33 <orzo> cabal 3.2
21:28:40 × Kaiepi quits (~Kaiepi@nwcsnbsc03w-47-55-225-82.dhcp-dynamic.fibreop.nb.bellaliant.net) (Remote host closed the connection)
21:28:45 <monochrom> 3.2 means the default is v2.
21:29:38 Kaiepi joins (~Kaiepi@nwcsnbsc03w-47-55-225-82.dhcp-dynamic.fibreop.nb.bellaliant.net)
21:30:07 <orzo> freeze doesn't work like i hoped
21:30:15 <monochrom> There is probably also a way you first tell cabal "roll back your hackage index to this date in the past", and then your "cabal freeze" will be more meaningful in freezing the older version numbers you desire.
21:30:23 <orzo> is there a way to just specify library versions directly?
21:31:00 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 258 seconds)
21:31:15 <orzo> i edited the cabal file to verify the installed library works
21:31:18 <orzo> but i don't want to do that
21:31:31 <monochrom> edit cabal.project.freeze ?
21:31:52 <orzo> so i conigure, freeze, and then edit that to change the lib version?
21:31:57 <sclv> new style encourages using the latest and rebuilding and freezing is the way to avoid that
21:31:58 abhixec joins (~abhixec@c-67-169-141-95.hsd1.ca.comcast.net)
21:31:59 <monochrom> yeah
21:32:30 <sclv> but going with the nonfrozen latest stuff is a nicer workflow for me tbqh
21:32:51 <orzo> this is all working around a bug in cabal though, right? I mean shouldn't the default behavior be to do what I want?
21:33:15 <dminuoso> Mmm, I wish we had per-module dependencies. That way I could depend on some of the more nasty packages without pulling in a huge hunk of transitive dependencies if I only need one module.
21:33:21 <monochrom> https://xkcd.com/303/ applies
21:33:34 <monochrom> No, this is considered a feature.
21:34:34 <orzo> My rationale is "do as little as neccessary to get it to build." What is the rationale for the default behavior?
21:34:42 <monochrom> I liked the v1 way, too. But I have accepted v2 and accepted that I would need to freeze, and I would need to do that early enough.
21:35:14 <monochrom> "get as many latest bugfixes as possible"? I don't know.
21:35:17 × leungbk quits (~user@2605:e000:1315:706:8785:470d:bc5b:c5f9) (Quit: ERC (IRC client for Emacs 28.0.50))
21:35:49 <monochrom> Also, in v2, "configure" is highly redundant.
21:36:36 <dminuoso> orzo: Btw, v2- without freezing style promotes using PVP bounds. So if your dependencies make large jumps, you're missing a bound.
21:36:54 <dminuoso> If you have tight bounds, think of this as a feature, where you're getting bugfixes automatically
21:36:56 <monochrom> Also, under v2 semantics, I would first let "build" have a go, so I see that it succeeds, before I use "freeze".
21:36:56 × Kaiepi quits (~Kaiepi@nwcsnbsc03w-47-55-225-82.dhcp-dynamic.fibreop.nb.bellaliant.net) (Remote host closed the connection)
21:37:03 Kaeipi joins (~Kaiepi@nwcsnbsc03w-47-55-225-82.dhcp-dynamic.fibreop.nb.bellaliant.net)
21:37:50 <orzo> what's a pvp bound
21:38:11 <monochrom> https://pvp.haskell.org/
21:39:43 <dminuoso> orzo: If you pin versions using ^>=, then cabal will consider the specified version as the earliest compatible version, and allow any newer compatible version.
21:39:53 <dminuoso> There's some tools to automatically generate these bounds
21:40:03 <monochrom> "cabal genbounds" :)
21:40:17 <monochrom> err gen-bounds
21:40:38 × frdg quits (60e94035@pool-96-233-64-53.bstnma.fios.verizon.net) (Remote host closed the connection)
21:42:33 <dminuoso> cabal has some lesser know features as well that complement the above notation, like the set notation for bounds
21:42:52 <dminuoso> so you can specify `foo ^>= {1.1.1, 1.2, 1.4}
21:42:59 × Rudd0 quits (~Rudd0@185.189.115.108) (Ping timeout: 256 seconds)
21:43:17 <dminuoso> I think cabal gen-bounds generates >/<= bounds?
21:44:04 <monochrom> IIRC yes, but equiv to ^>=.
21:44:32 <dminuoso> Sure, ^>= is just more explicit about it. :)
21:44:50 <dminuoso> And with the set notation, it makes it more clear what versions you have tested it with
21:45:09 <monochrom> Actually I have only tried using gen-bounds for a *.cabal file that explicitly says "cabal-version: >= 1.10" or something, so it tries to be friendly to old syntax?
21:45:22 jneira_ joins (~jneira@170.red-176-87-39.dynamicip.rima-tde.net)
21:45:57 <monochrom> I mean, if you have "cabal-version: 4.2" it may very well take advantage of the new concise syntax.
21:46:11 <monochrom> Ha, let me try.
21:47:32 <dminuoso> I have a baby sleeping in a carrier, Im not gonna hack around on my dev machine since it has a clicky keyboard. ;)
21:47:42 DataComputist joins (~lumeng@static-50-43-26-251.bvtn.or.frontiernet.net)
21:47:53 <monochrom> Nah, it always outputs >= && < regardless of "cabal-version: 2.2"
21:47:56 × jneira[m] quits (~jneira@80.30.101.206) (Ping timeout: 260 seconds)
21:48:11 <monochrom> You need a mind-reading interface!
21:48:48 <dminuoso> Emacs has that.
21:48:52 <dminuoso> M-x mind-mode
21:49:31 <dminuoso> https://xkcd.com/378/
21:49:31 <monochrom> Such as the one in the movie "Firefox" in which the USSR invented a fly-by-thinking jet fighter, and the US asked Clint Eastwood to steal it. "But you have to think in RUSSIAN!"
21:50:11 <dminuoso> Haha, I once saw a trailer of that movie.
21:50:11 × jneira_ quits (~jneira@170.red-176-87-39.dynamicip.rima-tde.net) (Read error: Connection reset by peer)
21:50:47 <dminuoso> It looked so awful
21:50:52 jneira_ joins (~jneira@80.30.101.206)
21:51:52 <monochrom> Firefox used to read your mind. Now it just really respects your privacy. >:)
21:51:55 × st8less quits (~st8less@2603:a060:11fd:0:443c:d730:5d8c:f920) (Ping timeout: 240 seconds)
21:52:18 <davean> but not your agency
21:52:19 <dminuoso> http://calpaterson.com/mozilla.html
21:52:35 <dminuoso> Firefox respects your privacy because it's not even on your machine.
21:52:42 <monochrom> haha
21:56:30 <orzo> what's the hot new browser steeling their share?
21:56:37 <dminuoso> Chrome? :)
21:56:58 <orzo> hm
21:57:00 <dminuoso> Followed by Edge now.
21:57:34 <dminuoso> Microsoft's new strategy of just *forcing* edge onto everybodies Windows machine repeatedly, and making it impossible to get rid of, seems to be paying off
21:58:24 <monochrom> No, I think it is not that. Because Firefox users would not switch to Edge, whether Edge is based on Chrome or Microsoft's original rendering engine.
21:59:35 <monochrom> Instead, it is not that the absolute number of Firefox users decreased, but that their percentage decreased, i.e., new users use Edge, Safari, or whatever it is on their new smartphones (definitely not Firefox).
22:00:00 <monochrom> But I should stop.
22:00:52 × albert_99 quits (~Albert@p200300e5ff0b5b39340e476afbaec452.dip0.t-ipconnect.de) (Quit: WeeChat 2.9)
22:03:45 snakemas1 joins (~snakemast@213.100.206.23)
22:04:12 worc3131 joins (~quassel@2a02:c7f:c026:9500:7d0b:65d0:38a4:4786)
22:05:10 Rudd0 joins (~Rudd0@185.189.115.103)
22:05:26 × urdh quits (~urdh@unaffiliated/urdh) (Ping timeout: 256 seconds)
22:06:31 urdh joins (~urdh@unaffiliated/urdh)
22:08:04 × Vq quits (~vq@90-227-195-41-no77.tbcn.telia.com) (Ping timeout: 246 seconds)
22:08:25 Stanley00 joins (~stanley00@unaffiliated/stanley00)
22:09:02 <orzo> what's the best practice for switching cabal between ghc versions?
22:09:13 <orzo> i think i should have an independent dist folder
22:09:25 <orzo> but this .freeze thing clearly needs to be duplicated too
22:09:28 × snakemas1 quits (~snakemast@213.100.206.23) (Ping timeout: 272 seconds)
22:09:41 <monochrom> If it is a temp or frequent change, without any meaningful default, "-w ghc-9.4"
22:09:56 Vq joins (~vq@90-227-195-41-no77.tbcn.telia.com)
22:10:10 <orzo> well i have basically 2 versions i would like to test with
22:10:22 <orzo> and i don't want to have to rebuild everything when i switch
22:10:31 <orzo> assuming it was built before with the other version
22:11:35 <orzo> even if cabal has some higene in the dist folder, i'd have more peice of mind separating it so i could nuke one without impacting the other
22:12:10 <monochrom> Perhaps the --builddir= option helps you?
22:13:24 <orzo> yeah
22:13:26 × Kaeipi quits (~Kaiepi@nwcsnbsc03w-47-55-225-82.dhcp-dynamic.fibreop.nb.bellaliant.net) (Remote host closed the connection)
22:13:34 × conal quits (~conal@209.58.130.230) (Quit: Computer has gone to sleep.)
22:13:36 × Stanley00 quits (~stanley00@unaffiliated/stanley00) (Ping timeout: 260 seconds)
22:13:39 <orzo> there's probably no equivelent for .freeze though is there?
22:13:47 Kaeipi joins (~Kaiepi@nwcsnbsc03w-47-55-225-82.dhcp-dynamic.fibreop.nb.bellaliant.net)
22:14:03 <orzo> it's not in the builddir but it is strongly associated
22:14:20 <orzo> i guess i'll need to manually rename it when i switch
22:14:25 × alp quits (~alp@2a01:e0a:58b:4920:11c4:1b60:3a4e:bcb2) (Ping timeout: 272 seconds)
22:14:47 <sm[m]> re orzo's original q - does cabal always install the latest version of a package even if there's a good-enough version already installed ? I thought it didn't
22:15:14 <orzo> it probably checks the hackage index
22:15:16 × cosimone quits (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6) (Quit: cosimone)
22:15:23 <sm[m]> ie orzo's intuition about path of least effort sounded correct
22:15:29 <orzo> i used it for a long time without even downloading and updating that so i didn't realize it behaved this way
22:15:36 <sclv> the build dirs are kept by version
22:15:38 <sclv> of ghc
22:15:57 <sclv> so it won't rebuild more than necessary when you pass different -w flags
22:16:00 <sm[m]> oh, you upgraded ghc since then perhaps orzo
22:17:06 conal joins (~conal@209.58.130.230)
22:17:33 <orzo> i think the least-effort way makes the most sense for the user, but the new way probably has benifits for the community/eco-system since it makes it more likely maintainers will build against newer libs
22:17:59 <ski> koz_ : also `let's in list comprehensions don't have `in'. (and (toplevel) `let's in the interactor)
22:18:21 <sm[m]> least effort is what it still does I believe
22:18:25 cosimone joins (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6)
22:18:33 <orzo> not so
22:18:41 <orzo> re me&monochrome's discussion
22:18:44 <orzo> i needed the .freeze file
22:18:51 <orzo> i need to manually edit it
22:18:57 <orzo> the build worked fine
22:19:04 <orzo> after i did so
22:19:26 <sm[m]> I think ordinarily it will use an installed version if it can. There are lots of reasons it may think it can't use it
22:19:32 × oisdk quits (~oisdk@2001:bb6:3329:d100:c982:e387:7052:58be) (Quit: oisdk)
22:19:41 <sm[m]> such as a ghc upgrade ?
22:19:43 <orzo> i think it must be just using the latest if it can
22:19:52 <orzo> i did not upgrade ghc
22:19:55 <monochrom> OK, I need to actually test it.
22:19:55 × cosimone quits (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6) (Client Quit)
22:20:13 <sm[m]> ok. I was hoping the cabal gods would pronounce on this
22:20:39 <sclv> new-build always calculates a fresh build plan
22:20:47 <sclv> from the latest version of the hackage index it has around
22:20:56 <sm[m]> wow
22:20:57 <sclv> but unless you `cabal update` you don't refresh your indexx
22:21:19 <sclv> and `cabal update` tells you how to pin to an index snapshot if you want to not recalc
22:21:39 <sm[m]> cabal really doesn't prioritise repeatable builds by default does it
22:22:00 <sclv> it gives lots of tools for getting them, but it defaults to not having them
22:22:02 <orzo> actually the .freeze makes it more repeatable, not less
22:22:09 × twanvl quits (~twanvl@77.165.89.227) (Read error: Connection reset by peer)
22:22:11 <orzo> as it makes it more explicitly configured
22:22:19 <sm[m]> nod
22:23:43 <sm[m]> personally I think repeatability should be the priority for the default, with adventurous new build plans as a power use option
22:23:46 <orzo> sclv, shouldn't the installed deps take precedence over available-in-index deps?
22:24:22 <sclv> its very hard to say what the "best" install plan is given trying to use installed deps
22:24:40 <sclv> you have to explore every possible path to see which uses the greatest percentage of them or whatever
22:24:51 <sclv> its not a straightforward optimization compared to the normal solver
22:25:12 <sclv> and the payoff isnt very clear -- calculating from scratch is an easier behavior to explain and understand
22:25:40 <orzo> it could just do what i did but automatically
22:26:08 <sclv> like auto-freeze on the first run?
22:26:10 <orzo> which is to just look for installed versions of things its trying to download and freeze them to the insalled version
22:26:32 <sclv> that isn't so simple to automate -- what if those installed versions are incompat
22:26:33 Buntspecht joins (~user@unaffiliated/siracusa)
22:26:44 <orzo> it should be an either or thing
22:26:49 <sclv> or some are incompat with some and you have to pick the bigger set
22:27:06 <orzo> either it can use installed versions in every case, or it falls back to downloading according to the index build plan
22:27:09 <sclv> there's a big design space, and again, its not clear what advantage if any therre is
22:27:40 <sclv> that's certainly one behavior, but i doubt its the only one people would like, or even thee one most people would expect or like
22:28:15 <sm[m]> cabal could act more like stack - leaning on the tested stackage snapshots for repeatability, where it makes sense
22:28:26 <sm[m]> <blue sky>
22:28:29 <unclechu> hi. a question about `lens` package. imagine a have complex lens like this one: `_2._Just._3._Just._2._Right .~ 200`.
22:28:29 <unclechu> in case something cannot be reached (like some of these points was `Nothing` or `Left`) can i have `Maybe` or `Either` wrap which would tell me whether something was changed or not?
22:28:30 <unclechu> to be more precise whether something was *able to change* (whole path was reachable)
22:29:53 <orzo> actually, the behavior i think people would want is a --no-download option that completely disabled network operation
22:29:54 seanvert joins (~user@177.84.244.242)
22:30:09 <yushyin> You can pin the index you can also use stackage package constrains with cabal if you like.
22:30:15 × LKoen quits (~LKoen@81.255.219.130) (Quit: “It’s only logical. First you learn to talk, then you learn to think. Too bad it’s not the other way round.”)
22:30:32 <orzo> is pinning the index a per-package thing?
22:30:36 <orzo> per-project
22:30:37 <orzo> i mean
22:30:55 <sclv> yes you can put it in the project fil
22:30:57 <sclv> file
22:31:02 <unclechu> instead of having `smth` type i would have either `Maybe smth` where `Just` means that a value was successfully updated or `Either smth smth` where `Left` means that a value couldn’t be updated
22:31:32 <monochrom> https://cabal.readthedocs.io/en/3.4/cabal-project.html#cfg-field-index-state
22:32:11 <yushyin> https://www.stackage.org/lts-16.17/cabal.config :P
22:32:31 <dminuoso> unclechu: My instint says it's unlikely to exist.
22:32:59 <dminuoso> I'd use `has` separately beforehand
22:33:57 <ski> (perhaps one could get list of updated values ?)
22:35:47 <monochrom> yushyin: In the Haskell Platform and cabal-v1 days, I used to recommend something like that, but using version numbers chosen by Haskell Platform.
22:36:52 × son0p quits (~son0p@181.136.122.143) (Remote host closed the connection)
22:38:18 × pacak quits (~pacak@bb116-14-220-91.singnet.com.sg) (Read error: Connection reset by peer)
22:38:18 × nineonin_ quits (~nineonine@216.81.48.202) (Read error: Connection reset by peer)
22:38:27 nineonine joins (~nineonine@216.81.48.202)
22:38:43 pacak joins (~pacak@bb116-14-220-91.singnet.com.sg)
22:39:45 <yushyin> Hehe, I don't really recommend it, though. I'm also fine with the behaviour of cabal v2- like it is today. After I update the index (and no pinning) I *do* expect some rebuilds.
22:42:29 × __monty__ quits (~toonn@unaffiliated/toonn) (Quit: leaving)
22:43:04 × DataComputist quits (~lumeng@static-50-43-26-251.bvtn.or.frontiernet.net) (Ping timeout: 258 seconds)
22:43:50 × lagothrix quits (~lagothrix@unaffiliated/lagothrix) (Ping timeout: 258 seconds)
22:45:19 × shatriff quits (~vitaliish@217.27.153.240) (Remote host closed the connection)
22:45:27 × Amras quits (~Amras@unaffiliated/amras0000) (Ping timeout: 272 seconds)
22:45:39 shatriff joins (~vitaliish@217.27.153.240)
22:46:08 × shatriff quits (~vitaliish@217.27.153.240) (Remote host closed the connection)
22:46:27 shatriff joins (~vitaliish@217.27.153.240)
22:46:56 × shatriff quits (~vitaliish@217.27.153.240) (Remote host closed the connection)
22:47:14 shatriff joins (~vitaliish@217.27.153.240)
22:47:43 × shatriff quits (~vitaliish@217.27.153.240) (Remote host closed the connection)
22:47:53 <monochrom> cabal v1 reusing installed libs was actually only true in its last days. Over most of v1's life it wantonly brought in newer versions as much as v2 does today.
22:47:59 shatriff joins (~vitaliish@217.27.153.240)
22:48:31 × shatriff quits (~vitaliish@217.27.153.240) (Remote host closed the connection)
22:48:35 <monochrom> It is why my historical advice such as http://www.vex.net/~trebla/haskell/cabal-cabal.xhtml#lockdown existed.
22:49:49 <monochrom> The difference though is v1 did it unsafely, v2 does it safely.
22:49:58 × conal quits (~conal@209.58.130.230) (Quit: Computer has gone to sleep.)
22:52:26 × chaosmasttter quits (~chaosmast@p200300c4a73b2e01d0131264df465fff.dip0.t-ipconnect.de) (Quit: WeeChat 2.9)
22:53:45 × zaquest quits (~notzaques@5.128.210.178) (Quit: Leaving)
22:54:26 × m0rphism quits (~m0rphism@HSI-KBW-046-005-177-122.hsi8.kabel-badenwuerttemberg.de) (Ping timeout: 272 seconds)
22:54:57 zaquest joins (~notzaques@5.128.210.178)
22:56:32 <orzo> how do i use index-state? The docs show putting a time stamp there, but where do i get the time stamp
22:56:37 <unclechu> dminuoso: i’m trying to define my own operator: `(??~) :: Lens' s a -> a -> s -> Either s s; (??~) lens x s = (if has lens s then Right else Left) (set lens x s)`
22:56:37 <unclechu> but when i try to use it: `((),Just(10,True,Just(20,Right 30))) & (_2._Just._3._Just._2._Right) ??~ 200` i get this: error `Could not deduce (Applicative f) arising from a use of ‘_Just’`
22:57:13 <monochrom> I haven't tried, but I would try just choosing a time in the past I like.
22:58:07 <unclechu> dminuoso: maybe you have any idea what i’m missing?
23:01:15 DataComputist joins (~lumeng@static-50-43-26-251.bvtn.or.frontiernet.net)
23:01:29 <monochrom> You know, if you really still like v1 the commands and their semantics, you can still use them, most of them are still available in cabal-install-3.2, or you could even find and use an older cabal-install.
23:01:40 <Axman6> orzo: what's index-state?
23:02:02 <monochrom> Axman6: this one: https://cabal.readthedocs.io/en/3.4/cabal-project.html#cfg-field-index-state
23:03:53 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
23:04:26 conal joins (~conal@209.58.130.230)
23:08:00 lagothrix joins (~lagothrix@unaffiliated/lagothrix)
23:08:27 <dsal> > ((),Just(10,True,Just(20,Right 30))) & (_2 . _Just . _3 . _Just . _2 . _Right) ?~ 200 -- unclechu I'm not entirely sure what you're going for there.
23:08:30 <lambdabot> ((),Just (10,True,Just (20,Right (Just 200))))
23:08:39 <dsal> But in any case, I'd probably start with a smaller example. :)
23:11:50 × danso quits (~dan@107-190-41-58.cpe.teksavvy.com) (Read error: Connection reset by peer)
23:12:22 danso joins (~dan@107-190-41-58.cpe.teksavvy.com)
23:16:15 <unclechu> dsal: `?~` has a completely different purpose
23:16:45 <dminuoso> 00:33:57 ski | (perhaps one could get list of updated values ?)
23:16:46 × conal quits (~conal@209.58.130.230) (Quit: Computer has gone to sleep.)
23:16:49 <dminuoso> That would be a Fold then.
23:16:50 <unclechu> dsal: it doesn’t wrap the whole value into `Maybe`, only the value deep inside
23:16:53 × mirrorbird quits (~psutcliff@2a00:801:2d5:9d73:ff00:6553:d451:a276) (Quit: Leaving)
23:17:05 × zebrag quits (~inkbottle@aaubervilliers-654-1-95-218.w86-212.abo.wanadoo.fr) (Ping timeout: 240 seconds)
23:17:33 zebrag joins (~inkbottle@aaubervilliers-654-1-109-218.w86-212.abo.wanadoo.fr)
23:18:49 <dminuoso> unclechu: Dunno, my lens-fu is quite weak. I'd just write it in optics and let their advanced diagnostics figure it out.
23:18:54 <dsal> > ((),Just(10,True,Just(20,Right 30))) & (_2._Just._3._Just._2._Right) .~ 200 -- ok. Like I said, I don't quite understand your goal.
23:18:57 <lambdabot> ((),Just (10,True,Just (20,Right 200)))
23:19:57 <dminuoso> ski: Or are you suggesting some kind of `ASetter s t a b -> b -> s -> (t, [s])`
23:20:25 <unclechu> dsal: `((),Just(10,True,Just(20,Right 30))) & (_2._Just._3._Just._2._Right) ??~ 200` would give me `Just ((),Just (10,True,Just (20,Right 200)))`
23:20:25 <unclechu> this `((),Just(10,True,Just(20,Left 30))) & (_2._Just._3._Just._2._Right) ??~ 200` would give me `Nothing`
23:20:54 <dminuoso> Which I guess you can concoct if you run the lens with State
23:21:20 <dminuoso> Or.. not quite
23:21:40 zargoertzel joins (~zar@fw1.ciirc.cvut.cz)
23:21:43 <ski> dminuoso : more like `ASetter s t a b -> b -> s -> (t,[b])', then, i think
23:22:18 <ski> although, i suppose i had in mind updating with a function
23:22:18 <unclechu> Setter would not work with `has`
23:22:31 <Axman6> :T has
23:22:34 <Axman6> :t has
23:22:36 <lambdabot> Getting Any s a -> s -> Bool
23:23:35 <ski> the idea was just, if you get a list of the updated values, then you could easily check if this is empty, to see whether any value was updated
23:24:16 × zariuq quits (~zar@fw1.ciirc.cvut.cz) (Ping timeout: 256 seconds)
23:25:10 <ski> (but perhaps unclechu wanted not to see whether any value was updated, but rather whether "any expected update failed (due to absence of the intended location)", if that makes sense (not sure))
23:26:26 <unclechu> ski: well, yes, i just want to see whether a value is failed to update or not
23:27:02 <ski> (anyway, going from `(t,[b])' to `Maybe t' or `Either s t' is obvious)
23:27:25 × thc202 quits (~thc202@unaffiliated/thc202) (Ping timeout: 240 seconds)
23:28:01 <ski> unclechu : even if some other locations was succeddfully updated, at the same time ?
23:28:13 <unclechu> ski: but i missed how do i get to `(t,[b])`?
23:28:54 <ski> i didn't figure that out. it just sounded like something that could be possible
23:29:09 <unclechu> ski: well, my main intention was to check a single update, i didn’t think much about multiple updates
23:29:28 <ski> (in the worst case, by separately extracting the values at the requested locations. but nicer would be to be able to do both at the same time)
23:29:53 da39a3ee5e6b4b0d joins (~textual@n11211935170.netvigator.com)
23:29:59 <ski> the point is that having zero locations to update is a special case of having multiple locations
23:30:14 conal joins (~conal@209.58.130.230)
23:30:44 nitrix is now known as nitrix-or-treats
23:31:01 <ski> and, afaik, updating with `_Just' and `_Right' is treated like updating zero or one location (depending on whether you have `Nothing'/`Left (...)' or `Just (...)'/`Right (...)')
23:33:07 <ski> but say you have a list of type `[Maybe Int]', or of type `[Either String Int]', and you want to add two to each `Int'. it should be able to get an indication if there was no `Int's there at all to update. but, from what you're saying, it sounds like maybe you'd want to get an indication as soon as at least one (rather than all) of the list elements is of the form `Nothing'/`Left (...)'
23:34:35 × DataComputist quits (~lumeng@static-50-43-26-251.bvtn.or.frontiernet.net) (Quit: Leaving...)
23:40:01 × jneira_ quits (~jneira@80.30.101.206) (Remote host closed the connection)
23:44:46 thir joins (~thir@p200300f27f0fc60038c1b16891cbfa03.dip0.t-ipconnect.de)
23:49:07 × thir quits (~thir@p200300f27f0fc60038c1b16891cbfa03.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
23:52:04 snakemas1 joins (~snakemast@213.100.206.23)
23:52:07 × seanvert quits (~user@177.84.244.242) (Remote host closed the connection)
23:56:43 × snakemas1 quits (~snakemast@213.100.206.23) (Ping timeout: 256 seconds)
23:56:53 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 260 seconds)
23:57:17 ahmr88 joins (~ahmr88@cpc85006-haye22-2-0-cust131.17-4.cable.virginm.net)
23:58:43 <sm[m]> monochrom: re "v1 did it unsafely, v2 does it safely" - I know what you mean, but I'd amend that to "more safely" - it's still going to the net and downloading a new chunk of software, which may or may not compile or have correct bounds, which the user often has not intended. I think this is still a weakness of cabal-install as a practical tool - it's too willing to do risky operations when the user is not wanting anything to
23:58:43 <sm[m]> change
23:58:45 × conal quits (~conal@209.58.130.230) (Quit: Computer has gone to sleep.)
23:59:17 conal joins (~conal@209.58.130.230)
23:59:22 DirefulSalt joins (DirefulSal@gateway/vpn/privateinternetaccess/direfulsalt)

All times are in UTC on 2020-10-06.