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.