Logs on 2021-09-09 (liberachat/#haskell)
| 00:01:17 | → | phma joins (~phma@host-67-44-208-177.hnremote.net) |
| 00:02:40 | × | cptaffe quits (~connor@2600:1700:f08:1110:c843:5621:bfb6:7631) (Ping timeout: 252 seconds) |
| 00:05:07 | <ldlework> | What's that trick for looking up all functions of the same type? |
| 00:05:11 | <ldlework> | @hoogle (a -> b -> b) -> a -> b |
| 00:05:12 | <lambdabot> | No results found |
| 00:05:36 | <Axman6> | @djinn (a -> b -> b) -> a -> b |
| 00:05:37 | <lambdabot> | -- f cannot be realized. |
| 00:06:34 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds) |
| 00:06:57 | <iqubic> | ldlework: hoogle is the right tool to use. But it looks like there aren't any functons of that type. |
| 00:07:04 | <ldlework> | I see |
| 00:07:32 | <ldlework> | @hoogle (a -> b -> (a, b)) -> a -> b |
| 00:07:33 | <lambdabot> | No results found |
| 00:07:33 | <geekosaur> | how would that function work? |
| 00:08:02 | <iqubic> | Which actually makes sense, because there's no way to get a value of type `b` to return. The only way to possibly get a `b`, is to use the first function, but that requires you to have `b` in the first place. |
| 00:08:04 | <Axman6> | :t \f a -> let q = f a q in q |
| 00:08:05 | <lambdabot> | (t1 -> t2 -> t2) -> t1 -> t2 |
| 00:08:12 | <Axman6> | nailed it! |
| 00:08:56 | <Axman6> | see above :) |
| 00:09:23 | <iqubic> | Oh, hey, that's like fix, but you're passing in the same 'a' as input to the function 'f' in each call. |
| 00:09:26 | <Axman6> | > let foo = \f a -> let q = f a q in q in foo (1:) |
| 00:09:27 | <lambdabot> | error: |
| 00:09:27 | <lambdabot> | • Couldn't match type ‘[a]’ with ‘t -> t’ |
| 00:09:27 | <lambdabot> | Expected type: [a] -> t -> t |
| 00:09:35 | <Axman6> | > let foo = \f a -> let q = f a q in q in foo (:) 1 |
| 00:09:37 | <lambdabot> | [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1... |
| 00:09:56 | <Axman6> | not only does it exist, it may actually be useful! |
| 00:10:00 | <iqubic> | > fix (:1) |
| 00:10:03 | <lambdabot> | error: |
| 00:10:03 | <lambdabot> | • Occurs check: cannot construct the infinite type: a ~ [a] |
| 00:10:03 | <lambdabot> | Expected type: [a] -> [a] |
| 00:10:07 | <iqubic> | :t fix |
| 00:10:07 | <Axman6> | For some definition of useful |
| 00:10:08 | <lambdabot> | (a -> a) -> a |
| 00:10:17 | <Axman6> | you want (1:) |
| 00:10:27 | <iqubic> | > fix (1:) |
| 00:10:28 | <lambdabot> | [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1... |
| 00:10:50 | <Axman6> | > let foo = \f a -> let q = f a q in q in foo (\x xs -> x: map (+1) xs) 1 |
| 00:10:52 | <lambdabot> | [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,... |
| 00:11:25 | <iqubic> | @let foo = \f a -> let q = f a q in q |
| 00:11:26 | <lambdabot> | Defined. |
| 00:11:44 | <iqubic> | foo (\x xs -> x: map (+1) xs) 1 |
| 00:11:52 | <iqubic> | > foo (\x xs -> x: map (+1) xs) 1 |
| 00:11:54 | <lambdabot> | [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,... |
| 00:11:58 | <iqubic> | There we are. |
| 00:12:28 | <Axman6> | :t \f a = fix (f a) |
| 00:12:29 | <lambdabot> | error: parse error on input ‘=’ |
| 00:12:35 | <Axman6> | :t \f a -> fix (f a) |
| 00:12:36 | <lambdabot> | (t -> a -> a) -> t -> a |
| 00:13:12 | → | pzanco joins (~Android@187.104.158.159) |
| 00:13:24 | × | cheater quits (~Username@user/cheater) (Remote host closed the connection) |
| 00:13:52 | × | pzanco quits (~Android@187.104.158.159) (Client Quit) |
| 00:14:33 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:7d9e:f1ab:9e23:bf6) |
| 00:15:34 | <iqubic> | > head $ foo (\x xs -> x: map (+1) xs) 1 |
| 00:15:36 | <lambdabot> | 1 |
| 00:17:45 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 00:17:59 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 00:19:10 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:7d9e:f1ab:9e23:bf6) (Ping timeout: 260 seconds) |
| 00:20:53 | → | cheater joins (~Username@user/cheater) |
| 00:20:54 | <iqubic> | awpr: Actually, it turns out that there's just a backwards function in Lens. So I can just use the traversal of "backwards bits" to run it backwards for me. |
| 00:21:19 | × | MQ-17J quits (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 252 seconds) |
| 00:21:36 | → | MQ-17J joins (~MQ-17J@d14-69-206-129.try.wideopenwest.com) |
| 00:21:41 | <awpr> | iqubic: oh neat, I was thinking it'd be a nice thing to have in lens. good to know it's already there |
| 00:22:27 | <iqubic> | And the implementation is basically a more optimized version of exactly what you suggested. |
| 00:22:40 | <awpr> | yep, was just typing that :) |
| 00:23:45 | → | Codaraxis joins (~Codaraxis@user/codaraxis) |
| 00:24:52 | → | acarrico joins (~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) |
| 00:28:35 | × | pbrisbin quits (~patrick@pool-108-16-214-93.phlapa.fios.verizon.net) (Ping timeout: 252 seconds) |
| 00:32:14 | × | MQ-17J quits (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 260 seconds) |
| 00:33:05 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 00:33:19 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 00:34:37 | × | luc03 quits (~a@p200300ef970830a990422b88d9bc8098.dip0.t-ipconnect.de) (Ping timeout: 245 seconds) |
| 00:34:41 | → | MQ-17J joins (~MQ-17J@d14-69-206-129.try.wideopenwest.com) |
| 00:34:59 | → | luc03 joins (~a@p200300ef97083056400e9f76999ee7ea.dip0.t-ipconnect.de) |
| 00:42:34 | × | abraham quits (~abraham@191.96.121.37) (Quit: Textual IRC Client: www.textualapp.com) |
| 01:04:08 | → | roboguy_ joins (~roboguy_@cpe-98-156-4-161.kc.res.rr.com) |
| 01:05:28 | × | otto_s quits (~user@p5b044f3a.dip0.t-ipconnect.de) (Ping timeout: 252 seconds) |
| 01:10:28 | → | hannessteffenhag joins (~hannesste@ip4d14ffd8.dynamic.kabel-deutschland.de) |
| 01:10:45 | → | neurocyte6 joins (~neurocyte@user/neurocyte) |
| 01:13:10 | × | neurocyte quits (~neurocyte@user/neurocyte) (Ping timeout: 252 seconds) |
| 01:13:11 | neurocyte6 | is now known as neurocyte |
| 01:15:10 | × | hannessteffenhag quits (~hannesste@ip4d14ffd8.dynamic.kabel-deutschland.de) (Ping timeout: 260 seconds) |
| 01:15:27 | → | dextaa joins (~DV@user/dextaa) |
| 01:22:42 | × | zebrag quits (~chris@user/zebrag) (Quit: Konversation terminated!) |
| 01:24:10 | × | xff0x quits (~xff0x@port-92-195-70-241.dynamic.as20676.net) (Ping timeout: 252 seconds) |
| 01:26:07 | → | xff0x joins (~xff0x@2001:1a81:52b9:4900:2e17:8c46:ec3d:aff1) |
| 01:29:00 | → | [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470) |
| 01:29:07 | × | vysn quits (~vysn@user/vysn) (Ping timeout: 252 seconds) |
| 01:29:25 | × | neo1 quits (~neo3@cpe-292712.ip.primehome.com) (Ping timeout: 265 seconds) |
| 01:29:25 | × | proofofkeags quits (~proofofke@205.209.28.54) (Ping timeout: 265 seconds) |
| 01:30:12 | <ryantrinkle> | has anyone had an issue with lsp-mode in emacs where the first file works just fine with LSP, but any files opened later don't? |
| 01:36:50 | → | thetoloachekid joins (~ttk@189.147.153.136) |
| 01:38:48 | × | cjb quits (~cjbayliss@user/cjb) () |
| 01:41:29 | → | cjb joins (~cjbayliss@user/cjb) |
| 01:42:48 | <iqubic> | Not for me. |
| 01:43:17 | <iqubic> | I use lsp-mode with haskell and it works fine. |
| 01:44:29 | → | ec_ joins (~ec@gateway/tor-sasl/ec) |
| 01:51:35 | × | myShoggoth quits (~myShoggot@97-120-70-214.ptld.qwest.net) (Ping timeout: 260 seconds) |
| 01:51:37 | × | alx741 quits (~alx741@186.178.109.214) (Quit: alx741) |
| 01:53:17 | × | cods quits (~fred@82-65-232-44.subs.proxad.net) (Ping timeout: 252 seconds) |
| 01:53:25 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 01:53:38 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 01:55:58 | × | sim590 quits (~simon@modemcable090.207-203-24.mc.videotron.ca) (Ping timeout: 252 seconds) |
| 01:59:12 | → | cods joins (~fred@82-65-232-44.subs.proxad.net) |
| 02:00:05 | → | aratamizuki joins (~aratamizu@p2135145-ipoe.ipoe.ocn.ne.jp) |
| 02:02:56 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 02:05:58 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 252 seconds) |
| 02:06:03 | × | ephemient quits (uid407513@id-407513.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
| 02:08:02 | → | FinnElija joins (~finn_elij@user/finn-elija/x-0085643) |
| 02:08:46 | → | sim590 joins (~simon@modemcable090.207-203-24.mc.videotron.ca) |
| 02:15:19 | × | td_ quits (~td@94.134.91.19) (Ping timeout: 252 seconds) |
| 02:16:39 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:7d9e:f1ab:9e23:bf6) |
| 02:16:56 | → | Sgeo_ joins (~Sgeo@user/sgeo) |
| 02:17:18 | → | td_ joins (~td@94.134.91.64) |
| 02:17:22 | × | Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 02:19:36 | <[itchyjunk]> | Hello |
| 02:20:06 | <[itchyjunk]> | I am a noob but i watched a video on monad and it just felt like a bunch of if else... |
| 02:20:51 | <[itchyjunk]> | is that what is happening mostly? if its integer do stuff, if not do nothing |
| 02:21:26 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:7d9e:f1ab:9e23:bf6) (Ping timeout: 260 seconds) |
| 02:22:43 | <awpr> | that sounds a bit like the Monad instance of the Maybe type specifically; I suppose you could view that instance as a huge nested chain of if/else at each step, but that's an observation about Maybe, and not about the nature of Monad. |
| 02:23:01 | <awpr> | (or Either, I suppose) |
| 02:23:32 | × | thetoloachekid quits (~ttk@189.147.153.136) (Ping timeout: 252 seconds) |
| 02:24:09 | <[itchyjunk]> | Ah the computerphile video i watched did do the maybe just stuff as the example |
| 02:24:36 | <[itchyjunk]> | Guess i'll have to find more examples to grasp what these elusive monads are! |
| 02:25:41 | <awpr> | if you're picturing the Maybe case as a big nested if/else chain, then the (>>=) operation is about finding the innermost value at the bottom of that chain, and grafting one more if/else onto it. other Monads have "something else" in place of the if/else in that same kind of structure |
| 02:26:49 | <enikar> | anyway, you have to learn and play with several monads. Each monads have specific defintion of the bind opertator (>>=). |
| 02:28:35 | <awpr> | actually I guess I should have said "grafting some number of further if/elses onto it" -- it could be zero in the case of return, or many in the case of lots of >>=s |
| 02:29:06 | → | sidbendu joins (~sidbendu@188.252.196.5) |
| 02:30:43 | <[itchyjunk]> | hmm |
| 02:31:05 | <monochrom> | The list monad would look like "just infinitely many if else" if you were to trivialize it. |
| 02:31:53 | <monochrom> | At which point, all of programming is just infinitely many if else. |
| 02:31:57 | <[itchyjunk]> | hmm, monads satisfy identity and associativity law? |
| 02:32:05 | <[itchyjunk]> | its a category of some sort? |
| 02:32:40 | <[itchyjunk]> | programming does have a lot of if else |
| 02:32:59 | <[itchyjunk]> | oh apparently it is category, not that i know much about it |
| 02:33:00 | <awpr> | good observation, the arrows of the form "a -> m b" form a category for any Monad; it's called the Kleisli category of m |
| 02:33:47 | <[itchyjunk]> | neat! |
| 02:34:00 | <awpr> | and being a Monad is (from some perspective) exactly about the fact that you can take two of those Kleisli arrows and compose them |
| 02:34:20 | → | sneedsfeed joins (~sneedsfee@rrcs-173-95-122-169.midsouth.biz.rr.com) |
| 02:36:25 | <Axman6> | [itchyjunk]: I quite like this article for getting an understanding of what monads actually are: https://codon.com/refactoring-ruby-with-monads it shows how several seemingly very different operations all follow the same patterns |
| 02:37:17 | <Axman6> | I will probably be slapped for sharing it, but it's one of the better ones for demonstrating the "feel" for monads with an arguably more familliar syntax for most |
| 02:37:18 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds) |
| 02:39:22 | <[itchyjunk]> | I know very little programming/computer/math though. |
| 02:39:24 | [itchyjunk] | reads it |
| 02:39:30 | × | shiraeeshi quits (~shiraeesh@46.34.206.111) (Ping timeout: 265 seconds) |
| 02:39:55 | <Axman6> | The quick summary is that nullable values, lists and futures all commonly use a very similar pattern, which has the mathematical name "monad", but that name scares people |
| 02:40:24 | <Axman6> | So when people say they don't understand monads, if they do any programming, they are almost guaranteed to be using them, in several different ways, every time they write code |
| 02:40:37 | <hrnz> | when in doubt, always say "this is a category" |
| 02:40:44 | <hrnz> | you're almost never wrong. |
| 02:41:00 | <[itchyjunk]> | is almost a monad? |
| 02:41:42 | <Axman6> | https://imgflip.com/i/5mcc4n |
| 02:43:06 | <[itchyjunk]> | hmm the above comment about being able to compose the Kleisli category |
| 02:43:19 | <[itchyjunk]> | doesn't this change the "type" of the things being worked on? |
| 02:44:03 | <Axman6> | `Kliesli m a b` is just a fancy way of saying `a -> m b` |
| 02:45:23 | <awpr> | sure, Monads are perfectly capable of progressing through multiple intermediate types along the way, that's what `(>>=) :: Monad m => m a -> (a -> m b) -> m b` says |
| 02:46:02 | <awpr> | looking at it in terms of Kleisli arrows, there's just an extra argument that gets plumbed around |
| 02:46:05 | × | haykam quits (~haykam@static.100.2.21.65.clients.your-server.de) (Remote host closed the connection) |
| 02:46:23 | → | haykam1 joins (~haykam@static.100.2.21.65.clients.your-server.de) |
| 02:46:30 | <awpr> | :t (>=>) |
| 02:46:31 | <lambdabot> | Monad m => (a -> m b) -> (b -> m c) -> a -> m c |
| 02:47:10 | <Axman6> | % :t Cointrol.Category.(.) @Kliesli |
| 02:47:10 | <yahb> | Axman6: ; <interactive>:1:1: error:; Not in scope: data constructor `Cointrol.Category'; No module named `Cointrol' is imported.; <interactive>:1:24: error: Not in scope: type constructor or class `Kliesli' |
| 02:47:23 | <Axman6> | % :t Control.Category.(.) @Kleisli |
| 02:47:23 | <yahb> | Axman6: ; <interactive>:1:1: error:; Not in scope: data constructor `Control.Category'; No module named `Control' is imported.; <interactive>:1:23: error: Not in scope: type constructor or class `Kleisli' |
| 02:47:45 | <awpr> | parens around the fully-qualified name I think |
| 02:47:47 | <[itchyjunk]> | hmm, so read that |
| 02:47:49 | <geekosaur> | yes |
| 02:49:01 | × | Vajb quits (~Vajb@hag-jnsbng11-58c3ab-85.dhcp.inet.fi) (Read error: Connection reset by peer) |
| 02:49:21 | → | Vajb joins (~Vajb@hag-jnsbng11-58c3ab-85.dhcp.inet.fi) |
| 02:49:55 | <[itchyjunk]> | (>>=) is being defined as? (::) m of type Monad has the value (=>) m takes a and mapts it to the type (a -> m b) err |
| 02:50:13 | <[itchyjunk]> | i am not good at reading this :( |
| 02:51:53 | <Axman6> | I am struggling to make any sense of that sentense :( |
| 02:51:56 | <xsperry> | Axman6, I think the disadvatage of using a language like ruby (no higher kinded types, no syntactic sugar like do) to demonstrate monads, is that the logical reaction will be "great, but what's the point?" |
| 02:52:34 | <[itchyjunk]> | ah let me use a few more lines then |
| 02:52:39 | × | pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.2.1) |
| 02:52:45 | <[itchyjunk]> | i am tring to read this (>>=) :: Monad m => m a -> (a -> m b) -> m b |
| 02:53:07 | <awpr> | the key part to see is that you start with `m a` and end up with `m b`, i.e. the type evolves in accordance with the `a -> m b` function you passed in |
| 02:53:19 | <[itchyjunk]> | (>>=) :: Monad m => this is saying (>>=) is defined as (::) m of the type Monad has the value (=>) |
| 02:53:26 | → | myShoggoth joins (~myShoggot@97-120-70-214.ptld.qwest.net) |
| 02:53:27 | <Axman6> | Well, I think the next logical step is to then say "We can abstract algforithms over anything which can do that, what if you have a list of nullable values that you need to do something with if they are all not null? Or a list of futures that you want to do something with all the results? that's jusy mapM" |
| 02:53:29 | <monochrom> | Huh, I recommend learning basic Haskell first, if you don't even know what "foo :: bar" is stating. |
| 02:53:36 | <Axman6> | % :t mapM @[] |
| 02:53:36 | <yahb> | Axman6: Monad m => (a -> m b) -> [a] -> m [b] |
| 02:53:41 | <[itchyjunk]> | right, the type evolved! |
| 02:53:58 | <monochrom> | Either that or you will have to study monads outside the context of Haskell. |
| 02:54:36 | <Axman6> | [itchyjunk]: no... (>>=) :: Monad m => m a -> (a -> m b) -> m b says: (>>=) has type m a -> (a -> m b) -> m b for any m which is an instance of the Monad type class |
| 02:54:58 | <Axman6> | it's (>>=) :: (Monad m) => (m a -> (a -> m b) -> m b) |
| 02:55:44 | × | dtman34 quits (~dtman34@c-73-62-246-247.hsd1.mn.comcast.net) (Ping timeout: 250 seconds) |
| 02:56:08 | <[itchyjunk]> | oh |
| 02:57:22 | × | sleblanc quits (~sleblanc@user/sleblanc) (Ping timeout: 260 seconds) |
| 02:59:09 | → | dtman34 joins (~dtman34@c-73-62-246-247.hsd1.mn.comcast.net) |
| 02:59:50 | × | shapr quits (~user@pool-100-36-247-68.washdc.fios.verizon.net) (Ping timeout: 260 seconds) |
| 03:00:01 | × | haasn quits (~nand@haasn.dev) (Quit: ZNC 1.7.5+deb4 - https://znc.in) |
| 03:00:49 | <roboguy_> | % :t (<=<) |
| 03:00:49 | <yahb> | roboguy_: ; <interactive>:1:1: error:; * Variable not in scope: <=<; * Perhaps you meant one of these: `=<<' (imported from Prelude), `<=' (imported from Prelude), `<<=' (imported from Control.Comonad) |
| 03:00:51 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:7d9e:f1ab:9e23:bf6) |
| 03:01:08 | <roboguy_> | % :t (Control.Monad.<=<) |
| 03:01:08 | <yahb> | roboguy_: Monad m => (b -> m c) -> (a -> m b) -> a -> m c |
| 03:01:26 | → | haasn joins (~nand@haasn.dev) |
| 03:01:30 | <roboguy_> | [itchyjunk]: ^ that is what does monadic composition |
| 03:02:00 | <roboguy_> | ah, someone already mentioned it |
| 03:02:54 | → | tddschn joins (~textual@45.77.71.205) |
| 03:03:27 | <roboguy_> | it might also be worth mentioning that the type also "changes" in standard function composition |
| 03:04:04 | <roboguy_> | :t (.) |
| 03:04:05 | <lambdabot> | (b -> c) -> (a -> b) -> a -> c |
| 03:05:57 | <roboguy_> | [itchyjunk]: it might help to compare the type of (=<<) (which is just (>>=) with its arguments flipped around) to the type of the function application operator ($) |
| 03:06:24 | <[itchyjunk]> | thanks! i'll start working on some of my basics again. this should help me with trying to learn Coq too. there i noticed the type of a theorm is it's entire proof which seemed simimlar to what happened with the type of >>= i think |
| 03:08:45 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 03:08:58 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 03:10:29 | → | hololeap joins (~hololeap@user/hololeap) |
| 03:10:32 | × | hololeap quits (~hololeap@user/hololeap) (Remote host closed the connection) |
| 03:11:03 | → | hololeap joins (~hololeap@user/hololeap) |
| 03:13:28 | × | iqubic quits (~user@2601:602:9502:c70:af68:e4d7:d422:2ae6) (Remote host closed the connection) |
| 03:16:20 | × | machinedgod quits (~machinedg@135-23-192-217.cpe.pppoe.ca) (Ping timeout: 252 seconds) |
| 03:17:10 | × | gabiruh quits (~gabiruh@vps19177.publiccloud.com.br) (Ping timeout: 240 seconds) |
| 03:19:03 | → | gabiruh joins (~gabiruh@vps19177.publiccloud.com.br) |
| 03:27:15 | × | waleee quits (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 260 seconds) |
| 03:27:23 | → | justsomeguy joins (~justsomeg@user/justsomeguy) |
| 03:28:34 | <justsomeguy> | Are purely functional programming languages also by necessity declarative? Is Haskell declarative? |
| 03:33:40 | <[itchyjunk]> | based on what ive read haskell is declarative |
| 03:34:25 | <[itchyjunk]> | whatever a function evaluates last is the value of that function or somesuch? |
| 03:34:40 | → | neo1 joins (~neo3@cpe-292712.ip.primehome.com) |
| 03:35:52 | <dibblego> | is 2 + 2 declarative? |
| 03:35:54 | × | [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Quit: Leaving) |
| 03:36:31 | <jle`> | justsomeguy: it's sort of a loaded question to ask if a "language" is declarative, but haskell does make declarative programming easy under some common definitions of declarative programming |
| 03:37:12 | <jle`> | but haskell does make imperative programming pretty easy too |
| 03:39:54 | × | hgolden quits (~hgolden2@cpe-172-114-84-61.socal.res.rr.com) (Quit: Konversation terminated!) |
| 03:48:44 | × | tddschn quits (~textual@45.77.71.205) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 03:49:04 | <roboguy_> | it usually feels to me like it's hard to give a specific, concrete definition of "declarative" that will satisfy most people. Maybe there's one I'm missing, though |
| 03:49:41 | <justsomeguy> | I've gone back and forth on the issue a few times. I think I should probably collect a bunch of examples of Haskell code where I had or did not have to think about the control flow. |
| 03:51:57 | <roboguy_> | is thinking about control flow fundamentally non-declarative? |
| 03:53:26 | <justsomeguy> | Wikipedia says "In computer science, declarative programming is a programming paradigm—a style of building the structure and elements of computer programs—that expresses the logic of a computation without describing its control flow." I'm not sure if that makes sense, though. |
| 03:54:21 | <justsomeguy> | I've seen a few conflicting definitions of declarative programming in the wild. |
| 03:56:02 | <roboguy_> | hmm, could make sense. I think I see the point of that definition, but I'm not fully sure. I don't really think I know the answer to my question |
| 03:58:44 | × | slowButPresent quits (~slowButPr@user/slowbutpresent) (Quit: leaving) |
| 03:59:15 | <jle`> | even if we agreed on a definition for the sake of this discussion, "is haskell declarative" is still tricky to answer. esp if you consider declarative as the "opposite" of imperative, in which case haskell is pretty well-suited for both, and most of the haskell code i wrote is imperative |
| 04:00:07 | × | pavonia quits (~user@user/siracusa) (Quit: Bye!) |
| 04:00:14 | <jle`> | *write |
| 04:01:24 | <jle`> | conal elliot has a nice term that i think may be more useful -- "denotative programming", where a program is assembled from pure functions on simple units of meaning with well-defined ways they combine |
| 04:01:45 | <ldlework> | I am recently learning Haskell and FP; Is there a better design for this kind of thing? |
| 04:01:46 | <ldlework> | https://gist.github.com/dustinlacewell/d4d3fdf5269c3355df509a37a92a62db |
| 04:02:08 | <jle`> | and imperative programming in haskell does sort of fit that general description, in a way that it doesn't in other languages |
| 04:03:06 | → | tddschn joins (~textual@45.77.71.205) |
| 04:03:32 | <jle`> | ldlework: you can avoid the partial let-binding with a pattern match in your main case |
| 04:03:41 | <jle`> | capSentences' (Work (Just (c:i')) o s) = |
| 04:03:54 | <ldlework> | Ah good catch |
| 04:04:05 | <ldlework> | I guess I'm mostly asking about the act of constructing such a "work state" object |
| 04:04:19 | <jle`> | so the if can be a guard too, but you can also pattern match on '.' directly :) |
| 04:04:21 | <ldlework> | And then writing a custom function to essentially "flatten" (?) the object until the work is complete |
| 04:04:30 | → | dyeplexer joins (~dyeplexer@user/dyeplexer) |
| 04:04:39 | <ldlework> | jle`: oh nice, good idea |
| 04:05:46 | <jle`> | mk, looking at the overall structure and control flow |
| 04:06:02 | <jle`> | the recursion pattern here is essentially mapAccumL |
| 04:06:51 | <ldlework> | looking |
| 04:06:51 | <jle`> | so you can use mapAccumL (or 'traverse' under State) and implement it with the right higher-order function to pass to it |
| 04:06:53 | <jle`> | https://hackage.haskell.org/package/base-4.15.0.0/docs/Data-List.html#v:mapAccumL |
| 04:07:07 | <jle`> | mapAccumL basically handles the pattern matching for you on the items left in the list |
| 04:07:31 | <jle`> | and assembling an output list |
| 04:08:04 | → | ubert joins (~Thunderbi@178.115.77.119.wireless.dyn.drei.com) |
| 04:09:04 | → | lavaman joins (~lavaman@98.38.249.169) |
| 04:09:09 | <ldlework> | I updated the implementation to use pattern matching |
| 04:09:11 | <ldlework> | https://gist.github.com/dustinlacewell/d4d3fdf5269c3355df509a37a92a62db |
| 04:09:19 | <ldlework> | pretty nifty |
| 04:09:59 | <ldlework> | jle`: if it's not too much to ask, would you mind showing a "cap the sentences" example using mapAccumL ? |
| 04:10:08 | <jle`> | oh yeah, assembling a list like o ++ [blah] has ... very unfavorable/unexpected inefficiency (O(n^2)) |
| 04:10:31 | × | ubert quits (~Thunderbi@178.115.77.119.wireless.dyn.drei.com) (Client Quit) |
| 04:10:43 | <ldlework> | is there a better way to add a character to the end of a string? |
| 04:10:47 | <jle`> | so people often assemble the list backwards (blah : o) and reverse at the end, or use fancy continuation tricks like difflists |
| 04:10:47 | → | ubert joins (~Thunderbi@178.115.77.119.wireless.dyn.drei.com) |
| 04:10:57 | <ldlework> | mm |
| 04:11:25 | <jle`> | er, maybe i made difflists seem more complicated than they are, it's basically just assembling a list using `DList a` instead of `[a]` and converting back in the end |
| 04:11:32 | <jle`> | but mapAccumL handles this for you already |
| 04:12:04 | <jle`> | nice new patterns, pretty clean :) |
| 04:13:25 | <ldlework> | jle`: I updated it with the reversal advice |
| 04:13:32 | × | lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 252 seconds) |
| 04:13:42 | <jle`> | the idea of using mapAccumL instaed of direct recursion is the idea that explicitly writing recursion is usually pretty bug-prone (it's basically goto), so when you can, you identify that the specific pattern of recursion you are using is (hopefully) common, and use a higher-order function (like, foldr or map) to write it instead, and hopefully be more readable too |
| 04:14:25 | <jle`> | in this case you are assembling a new list from an old list by applying a "mapping function" to each item, but that mapping function keeps a state (the Bool) |
| 04:15:11 | <jle`> | but mapAccumL is sort of on the borderline of the readability tradeoff tbh, it doesn't hit that sweet spot like foldr or map does really |
| 04:15:25 | <jle`> | um let me see if i can squeeze your logic into mapAccumL |
| 04:15:41 | × | ubert quits (~Thunderbi@178.115.77.119.wireless.dyn.drei.com) (Ping timeout: 265 seconds) |
| 04:18:06 | × | cods quits (~fred@82-65-232-44.subs.proxad.net) (Ping timeout: 265 seconds) |
| 04:20:36 | <jle`> | ldlework: i've added it as a comment -- https://gist.github.com/dustinlacewell/d4d3fdf5269c3355df509a37a92a62db#gistcomment-3887148 |
| 04:20:57 | <jle`> | tried to use the same variable names and stuff as your example so you can identify what parts went where |
| 04:21:48 | <ldlework> | that's awesome |
| 04:23:28 | <jle`> | again mapAccumL is just recursion, in the end, like your example, and isn't toooo different i think. it's just usually nice to piggyback off of a higher-order function if the pattern you are using is already common |
| 04:23:28 | × | hyiltiz quits (~quassel@31.220.5.250) (Ping timeout: 252 seconds) |
| 04:23:46 | × | tddschn quits (~textual@45.77.71.205) (Quit: tddschn) |
| 04:24:06 | <jle`> | oh oof the implementation in the source is pretty opaque |
| 04:24:18 | <jle`> | @src mapAccumL |
| 04:24:18 | <lambdabot> | mapAccumL _ s [] = (s, []) |
| 04:24:18 | <lambdabot> | mapAccumL f s (x:xs) = (s'',y:ys) |
| 04:24:18 | <lambdabot> | where (s', y ) = f s x |
| 04:24:18 | <lambdabot> | (s'',ys) = mapAccumL f s' xs |
| 04:24:22 | → | tddschn joins (~textual@45.77.71.205) |
| 04:24:35 | <jle`> | that one is a little more readabl |
| 04:25:54 | <ldlework> | I wish the documentation used semantic names for variables |
| 04:26:03 | <ldlework> | a and b are a bit ambiguous if you're not already familiar |
| 04:26:17 | <ldlework> | mapAccumL :: Traversable t => (a -> b -> (a, c)) -> a -> t b -> (a, t c) |
| 04:26:22 | <ldlework> | In the first param, the function |
| 04:26:30 | <ldlework> | is a the accumulated state, or b? |
| 04:26:52 | <jle`> | ah yeah, it's a little tough to read when you first see the function |
| 04:27:03 | <jle`> | might be easier to specialize to list |
| 04:27:04 | <ldlework> | Which is it? :P |
| 04:27:05 | × | justsomeguy quits (~justsomeg@user/justsomeguy) (Quit: WeeChat 3.2) |
| 04:27:13 | <jle`> | mapAccum: :: (a -> b -> (a, c)) -> a -> [b] -> (a, [c]) |
| 04:27:19 | <jle`> | so you can see that b is the items in the original list |
| 04:27:31 | <jle`> | and c is the items in the output list |
| 04:27:58 | <jle`> | it is kind of a pet peeve/annoyance to me that the functions in Data.List are not specialized to lists |
| 04:29:28 | <janus> | were they formerly specialized? i thought the policy was to generalize if possible. if that is the case, it would explain why they are generalized now |
| 04:29:50 | <jle`> | usually the convention is to provide the specialized functions with the typeclass's modules |
| 04:30:18 | <jle`> | so Data.Traversable would have the Traversable t => .. functions |
| 04:30:30 | <jle`> | and then if you want the specialized functions you would import the module with the data type |
| 04:30:35 | <jle`> | so Data.List would have the [a] functions |
| 04:31:32 | <awpr> | one benefit to that approach is that you can sometimes help type inference by using `L.length` instead of `length` |
| 04:31:54 | <awpr> | otherwise you're stuck with what, TypeApplications or explicit type signature annotations? |
| 04:32:01 | → | hyiltiz joins (~quassel@31.220.5.250) |
| 04:32:19 | <ldlework> | jle Why isn't https://gist.github.com/dustinlacewell/30f077fc00dcecec6fdac19647f4e40f working? |
| 04:32:46 | <jle`> | awpr: yup, it's especially disastrious in pedagogical situations (like this one) |
| 04:33:02 | <awpr> | it might also help readers to use the most specific version possible, since seeing `List.length` tells you immediately the input is a list rather than some other arbitrary `Foldable` (if modules export specialized functions) |
| 04:33:11 | <jle`> | ldlework: what is the error? |
| 04:33:24 | <ldlework> | I added it as a comment |
| 04:33:34 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 04:34:05 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 04:34:06 | <jle`> | hm, does your environment print that out as a formatted error message? |
| 04:34:19 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 04:34:22 | <jle`> | or does it come in a json blob like that |
| 04:34:29 | <ldlework> | added as comment |
| 04:34:36 | <ldlework> | it's vscode, just used the wrong copy function |
| 04:35:05 | <jle`> | ah yeah, hopefully that one is more readable. it's saying that `mapAccumL capper True` is String -> (Bool, String) |
| 04:35:14 | <jle`> | transforms a string to a new string, with Bool state |
| 04:35:25 | <jle`> | but the type signature you gave for it is String -> (Bool, Char) |
| 04:35:31 | <jle`> | transforming a string into a ... char? |
| 04:35:37 | <ldlework> | I see |
| 04:36:10 | <jle`> | so it's a mismatch between the type of the code you wrote and the type annotation you gave it |
| 04:36:23 | <ldlework> | makes sense |
| 04:37:25 | <ldlework> | jle`: https://gist.github.com/dustinlacewell/d7d0b76645b8720289024dc711027474 |
| 04:37:38 | <ldlework> | I think my implementation is slightly more terse than yours hehe |
| 04:37:58 | <ldlework> | thanks to capturing two cases under `otherwise` |
| 04:38:09 | <ldlework> | I really appreciate your help |
| 04:38:11 | <jle`> | nice :) |
| 04:38:32 | <jle`> | np! |
| 04:39:51 | <janus> | getting ptsd from looking at the clippy avata |
| 04:39:55 | <janus> | :P |
| 04:40:16 | <ldlework> | haha |
| 04:40:21 | <ldlework> | i modeled it in blender! |
| 04:41:12 | <janus> | wow, good job. blender is awesome |
| 04:41:30 | <jle`> | ooh, definitely impressive |
| 04:42:43 | × | aratamizuki quits (~aratamizu@p2135145-ipoe.ipoe.ocn.ne.jp) (Remote host closed the connection) |
| 04:43:15 | → | aratamizuki joins (~aratamizu@p2135145-ipoe.ipoe.ocn.ne.jp) |
| 04:44:17 | <ldlework> | blender is definitely awesome |
| 04:47:26 | × | aratamizuki quits (~aratamizu@p2135145-ipoe.ipoe.ocn.ne.jp) (Remote host closed the connection) |
| 04:47:38 | → | aratamizuki joins (~aratamizu@p2135145-ipoe.ipoe.ocn.ne.jp) |
| 04:51:14 | × | tddschn quits (~textual@45.77.71.205) (Remote host closed the connection) |
| 04:54:26 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 04:54:45 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 04:56:14 | → | tddschn joins (~textual@45.77.71.205) |
| 04:56:24 | → | mikoto-chan joins (~mikoto-ch@83.137.2.242) |
| 04:58:49 | → | takuan joins (~takuan@178-116-218-225.access.telenet.be) |
| 04:59:10 | × | myShoggoth quits (~myShoggot@97-120-70-214.ptld.qwest.net) (Ping timeout: 260 seconds) |
| 05:01:30 | → | iqubic joins (~user@2601:602:9502:c70:17b6:d303:f703:d0d7) |
| 05:01:41 | → | mishugana joins (~mishugana@user/mishugana) |
| 05:02:05 | × | mikoto-chan quits (~mikoto-ch@83.137.2.242) (Ping timeout: 265 seconds) |
| 05:02:18 | <mishugana> | Hello folks, is LYAH still relevant? |
| 05:02:28 | <mishugana> | Meaning outdated/updated/abandoned? |
| 05:03:40 | × | roboguy_ quits (~roboguy_@cpe-98-156-4-161.kc.res.rr.com) () |
| 05:03:54 | × | tddschn quits (~textual@45.77.71.205) (Remote host closed the connection) |
| 05:05:08 | → | tddschn joins (~textual@45.77.71.205) |
| 05:06:46 | × | tddschn quits (~textual@45.77.71.205) (Remote host closed the connection) |
| 05:06:48 | × | mishugana quits (~mishugana@user/mishugana) (Quit: leaving) |
| 05:07:26 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds) |
| 05:07:42 | → | hannessteffenhag joins (~hannesste@ip4d14ffd8.dynamic.kabel-deutschland.de) |
| 05:08:26 | <janus> | i don't think it is updated but i also don't think it is outdated :P |
| 05:08:29 | <ldlework> | Is there a !! for tuples |
| 05:09:00 | <ldlework> | actually nm |
| 05:10:35 | → | cods joins (~fred@82-65-232-44.subs.proxad.net) |
| 05:14:46 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 05:15:00 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 05:15:49 | × | geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection) |
| 05:16:14 | → | geekosaur joins (~geekosaur@xmonad/geekosaur) |
| 05:17:48 | → | aman joins (~aman@user/aman) |
| 05:21:51 | × | Sgeo_ quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 05:23:47 | → | oxide joins (~lambda@user/oxide) |
| 05:24:02 | → | mikoto-chan joins (~mikoto-ch@83.137.2.250) |
| 05:25:17 | → | fendor joins (~fendor@178.165.191.44.wireless.dyn.drei.com) |
| 05:25:56 | → | rekahsoft joins (~rekahsoft@cpe0008a20f982f-cm64777d666260.cpe.net.cable.rogers.com) |
| 05:27:47 | × | tomku quits (~tomku@user/tomku) (Ping timeout: 252 seconds) |
| 05:34:38 | × | hannessteffenhag quits (~hannesste@ip4d14ffd8.dynamic.kabel-deutschland.de) (Ping timeout: 260 seconds) |
| 05:37:43 | × | zmt00 quits (~zmt00@user/zmt00) (Ping timeout: 252 seconds) |
| 05:38:14 | × | peterhil quits (~peterhil@dsl-hkibng32-54fb52-57.dhcp.inet.fi) (Ping timeout: 252 seconds) |
| 05:38:32 | × | cjb quits (~cjbayliss@user/cjb) (Ping timeout: 260 seconds) |
| 05:39:17 | × | sm2n quits (~sm2n@user/sm2n) (Ping timeout: 245 seconds) |
| 05:40:14 | × | rekahsoft quits (~rekahsoft@cpe0008a20f982f-cm64777d666260.cpe.net.cable.rogers.com) (Ping timeout: 260 seconds) |
| 05:41:38 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 260 seconds) |
| 05:43:05 | → | hannessteffenhag joins (~hannesste@ip4d14ffd8.dynamic.kabel-deutschland.de) |
| 05:47:02 | × | aegon quits (~mike@174.127.249.180) (Quit: leaving) |
| 05:48:03 | → | tddschn joins (~textual@45.77.71.205) |
| 05:50:45 | × | mikoto-chan quits (~mikoto-ch@83.137.2.250) (Quit: mikoto-chan) |
| 05:51:42 | → | Gurkenglas joins (~Gurkengla@dslb-002-207-014-195.002.207.pools.vodafone-ip.de) |
| 05:52:36 | → | gioyik joins (~gioyik@gateway/tor-sasl/gioyik) |
| 05:52:41 | × | aratamizuki quits (~aratamizu@p2135145-ipoe.ipoe.ocn.ne.jp) (Remote host closed the connection) |
| 05:53:13 | → | aratamizuki joins (~aratamizu@p2135145-ipoe.ipoe.ocn.ne.jp) |
| 05:57:44 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 05:57:45 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
| 05:57:45 | → | wroathe joins (~wroathe@user/wroathe) |
| 05:58:40 | → | ubert joins (~Thunderbi@91.141.58.198.wireless.dyn.drei.com) |
| 05:59:24 | → | hgolden joins (~hgolden2@cpe-172-114-84-61.socal.res.rr.com) |
| 06:01:37 | → | burnsidesLlama joins (~burnsides@client-8-76.eduroam.oxuni.org.uk) |
| 06:02:06 | × | echoreply quits (~echoreply@45.32.163.16) (Quit: WeeChat 2.8) |
| 06:02:30 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 265 seconds) |
| 06:03:27 | → | echoreply joins (~echoreply@45.32.163.16) |
| 06:03:30 | × | burnsidesLlama quits (~burnsides@client-8-76.eduroam.oxuni.org.uk) (Read error: Connection reset by peer) |
| 06:03:48 | → | burnsidesLlama joins (~burnsides@client-8-76.eduroam.oxuni.org.uk) |
| 06:05:00 | × | renzhi quits (~xp@2607:fa49:6500:3d00::5f4a) (Ping timeout: 256 seconds) |
| 06:05:13 | × | oxide quits (~lambda@user/oxide) (Ping timeout: 252 seconds) |
| 06:05:26 | × | Vajb quits (~Vajb@hag-jnsbng11-58c3ab-85.dhcp.inet.fi) (Read error: Connection reset by peer) |
| 06:06:12 | → | Vajb joins (~Vajb@n1xq4ni1adi29tefj-2.v6.elisa-mobile.fi) |
| 06:06:54 | × | geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection) |
| 06:08:13 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 06:08:14 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
| 06:08:14 | → | wroathe joins (~wroathe@user/wroathe) |
| 06:08:32 | → | burnside_ joins (~burnsides@dhcp168-018.wadham.ox.ac.uk) |
| 06:10:23 | → | peterhil joins (~peterhil@84.251.82.57) |
| 06:11:14 | × | burnsidesLlama quits (~burnsides@client-8-76.eduroam.oxuni.org.uk) (Ping timeout: 252 seconds) |
| 06:13:08 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 265 seconds) |
| 06:15:04 | × | peterhil quits (~peterhil@84.251.82.57) (Ping timeout: 265 seconds) |
| 06:15:11 | × | aratamizuki quits (~aratamizu@p2135145-ipoe.ipoe.ocn.ne.jp) (Remote host closed the connection) |
| 06:15:23 | → | aratamizuki joins (~aratamizu@p2135145-ipoe.ipoe.ocn.ne.jp) |
| 06:18:31 | → | renzhi joins (~xp@modemcable070.17-177-173.mc.videotron.ca) |
| 06:20:48 | × | hololeap quits (~hololeap@user/hololeap) (Ping timeout: 276 seconds) |
| 06:20:50 | → | geekosaur joins (~geekosaur@xmonad/geekosaur) |
| 06:22:11 | × | hgolden quits (~hgolden2@cpe-172-114-84-61.socal.res.rr.com) (Quit: Konversation terminated!) |
| 06:25:22 | → | lortabac joins (~lortabac@2a01:e0a:541:b8f0:5bfd:35e:da52:7e46) |
| 06:25:44 | → | ub joins (~Thunderbi@91.141.53.92.wireless.dyn.drei.com) |
| 06:26:07 | × | thornAvery quits (~thornAver@2401:c080:1800:4346:cb:55f4:6eab:8e22) (Ping timeout: 240 seconds) |
| 06:27:44 | × | ubert quits (~Thunderbi@91.141.58.198.wireless.dyn.drei.com) (Ping timeout: 252 seconds) |
| 06:27:44 | ub | is now known as ubert |
| 06:29:20 | → | tomku joins (~tomku@user/tomku) |
| 06:29:33 | → | qbt joins (~edun@user/edun) |
| 06:30:05 | × | tddschn quits (~textual@45.77.71.205) (Quit: tddschn) |
| 06:32:28 | × | neo1 quits (~neo3@cpe-292712.ip.primehome.com) (Ping timeout: 265 seconds) |
| 06:33:08 | <awpr> | ldlework: to show off my new library dependent-literals / because I got nerd-sniped, I hacked together an implementation: https://github.com/google/hs-dependent-literals/blob/tuple_indexing_example/dependent-literals-plugin/tests/TupleIndexing.hs |
| 06:33:09 | × | gioyik quits (~gioyik@gateway/tor-sasl/gioyik) (Quit: WeeChat 3.1) |
| 06:36:12 | × | jinsun quits (~quassel@user/jinsun) (Read error: Connection reset by peer) |
| 06:38:40 | → | chele joins (~chele@user/chele) |
| 06:39:10 | → | dhouthoo joins (~dhouthoo@178-117-36-167.access.telenet.be) |
| 06:41:33 | × | burnside_ quits (~burnsides@dhcp168-018.wadham.ox.ac.uk) (Remote host closed the connection) |
| 06:41:36 | → | jinsun joins (~quassel@user/jinsun) |
| 06:41:38 | → | jinsun__ joins (~quassel@user/jinsun) |
| 06:42:35 | × | Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 252 seconds) |
| 06:43:12 | × | jinsun__ quits (~quassel@user/jinsun) (Client Quit) |
| 06:45:53 | × | sim590 quits (~simon@modemcable090.207-203-24.mc.videotron.ca) (Ping timeout: 252 seconds) |
| 06:47:36 | → | gehmehgeh joins (~user@user/gehmehgeh) |
| 06:51:59 | × | Vajb quits (~Vajb@n1xq4ni1adi29tefj-2.v6.elisa-mobile.fi) (Read error: Connection reset by peer) |
| 06:52:10 | → | Vajb joins (~Vajb@88.195.168.176) |
| 07:01:03 | → | kuribas joins (~user@ptr-25vy0i7s9yl7nzqhecr.18120a2.ip6.access.telenet.be) |
| 07:02:28 | → | mc47 joins (~mc47@xmonad/TheMC47) |
| 07:04:50 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 07:05:01 | × | hueso quits (~root@user/hueso) (Ping timeout: 250 seconds) |
| 07:08:18 | → | michalz joins (~michalz@185.246.204.37) |
| 07:10:27 | × | monochrom quits (trebla@216.138.220.146) (Quit: NO CARRIER) |
| 07:12:06 | × | beka quits (~beka@104.193.170.240) (Ping timeout: 265 seconds) |
| 07:12:17 | → | kstuart joins (~kstuart@85.203.34.2) |
| 07:16:47 | → | burnsidesLlama joins (~burnsides@dhcp168-018.wadham.ox.ac.uk) |
| 07:17:08 | × | shriekingnoise quits (~shrieking@186.137.144.80) (Quit: Quit) |
| 07:19:50 | × | ubert quits (~Thunderbi@91.141.53.92.wireless.dyn.drei.com) (Ping timeout: 265 seconds) |
| 07:20:55 | → | ubert joins (~Thunderbi@91.141.53.92.wireless.dyn.drei.com) |
| 07:21:30 | × | burnsidesLlama quits (~burnsides@dhcp168-018.wadham.ox.ac.uk) (Ping timeout: 260 seconds) |
| 07:25:28 | → | wonko joins (~wjc@62.115.229.50) |
| 07:28:31 | → | jtomas joins (~jtomas@95.red-88-11-64.dynamicip.rima-tde.net) |
| 07:31:05 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:7d9e:f1ab:9e23:bf6) (Remote host closed the connection) |
| 07:31:46 | × | kstuart quits (~kstuart@85.203.34.2) (Remote host closed the connection) |
| 07:34:28 | → | ub joins (~Thunderbi@91.141.53.92.wireless.dyn.drei.com) |
| 07:35:55 | × | zer0bitz quits (~zer0bitz@dsl-hkibng31-58c384-213.dhcp.inet.fi) (Read error: Connection reset by peer) |
| 07:38:05 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds) |
| 07:43:03 | → | monochrom joins (trebla@216.138.220.146) |
| 07:45:26 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 07:45:42 | → | peterhil joins (~peterhil@dsl-hkibng32-54fb52-57.dhcp.inet.fi) |
| 07:49:36 | → | max22- joins (~maxime@2a01cb08833598007f934d16e3231d2d.ipv6.abo.wanadoo.fr) |
| 07:50:17 | × | peterhil quits (~peterhil@dsl-hkibng32-54fb52-57.dhcp.inet.fi) (Ping timeout: 265 seconds) |
| 07:54:20 | → | Cajun joins (~Cajun@user/cajun) |
| 07:56:34 | → | cfricke joins (~cfricke@user/cfricke) |
| 07:58:00 | → | acidjnk joins (~acidjnk@p5487d0ba.dip0.t-ipconnect.de) |
| 08:00:03 | <Cajun> | is there any way to stop GHCI/strings from escaping non-ascii characters? i want the output to be random garbage characters not "\159\191\242..... etc" |
| 08:01:14 | → | vysn joins (~vysn@user/vysn) |
| 08:01:38 | × | ubert quits (~Thunderbi@91.141.53.92.wireless.dyn.drei.com) (Ping timeout: 260 seconds) |
| 08:01:38 | ub | is now known as ubert |
| 08:04:13 | → | amahl joins (~amahl@dsl-jklbng12-54fbca-64.dhcp.inet.fi) |
| 08:05:30 | × | benin0369323 quits (~benin@183.82.178.253) (Ping timeout: 260 seconds) |
| 08:06:53 | → | hendursa1 joins (~weechat@user/hendursaga) |
| 08:07:36 | <kuribas> | Cajun: what do you mean by "output"? |
| 08:07:57 | <kuribas> | the Show instance? |
| 08:08:27 | <Cajun> | like if my string contains special characters (idk what characters specifically) itll give me stuff like "\147\DEL\152\161" instead of the character representations |
| 08:09:00 | <Cajun> | all operations work normally on those, i just want them to be normal instead of escaped |
| 08:09:05 | <merijn> | Cajun: Don't use Show |
| 08:09:21 | × | hendursaga quits (~weechat@user/hendursaga) (Ping timeout: 276 seconds) |
| 08:09:40 | <Cajun> | is there another good way to see the output without shoving it into some file? |
| 08:09:48 | <merijn> | Cajun: By default ghci runs everything, including strings, through Show before, well, showing it |
| 08:09:53 | <merijn> | Use putStrLn |
| 08:10:03 | <Cajun> | got it, ill try that, thanks :) |
| 08:10:18 | <merijn> | % "fooλ" |
| 08:10:18 | <yahb> | merijn: "foo\955" |
| 08:10:23 | <merijn> | % putStrLn "fooλ" |
| 08:10:23 | <yahb> | merijn: fooλ |
| 08:10:32 | <Cajun> | thats perfect :) |
| 08:10:33 | <merijn> | Note also the absence/presence of quotes |
| 08:11:13 | → | lavaman joins (~lavaman@98.38.249.169) |
| 08:13:46 | <kuribas> | sometimes you may want quotes though, like in logs... |
| 08:15:06 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 08:15:11 | → | ishutin_ joins (~ishutin@87-97-12-212.pool.digikabel.hu) |
| 08:15:22 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 08:15:32 | × | lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 252 seconds) |
| 08:17:45 | × | geekosaur quits (~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b))) |
| 08:17:46 | → | allbery_b joins (~geekosaur@xmonad/geekosaur) |
| 08:17:49 | allbery_b | is now known as geekosaur |
| 08:18:10 | × | ishutin quits (~ishutin@92-249-150-146.static.digikabel.hu) (Ping timeout: 240 seconds) |
| 08:19:43 | × | haykam1 quits (~haykam@static.100.2.21.65.clients.your-server.de) (Remote host closed the connection) |
| 08:19:57 | → | haykam1 joins (~haykam@static.100.2.21.65.clients.your-server.de) |
| 08:20:05 | × | polyphem quits (~polyphem@2a02:810d:640:776c:1bc:e34d:641e:231a) (Ping timeout: 260 seconds) |
| 08:25:55 | × | xff0x quits (~xff0x@2001:1a81:52b9:4900:2e17:8c46:ec3d:aff1) (Ping timeout: 260 seconds) |
| 08:26:12 | → | hegstal joins (~hegstal@2a02:c7f:7608:d400:8959:ed5e:30f7:362a) |
| 08:26:20 | → | xff0x joins (~xff0x@2001:1a81:52b9:4900:be0:d306:f2f7:baf5) |
| 08:26:51 | → | acidjnk_new joins (~acidjnk@p5487d0ba.dip0.t-ipconnect.de) |
| 08:30:25 | × | econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity) |
| 08:30:49 | → | ubert1 joins (~Thunderbi@91.141.53.92.wireless.dyn.drei.com) |
| 08:31:02 | × | acidjnk quits (~acidjnk@p5487d0ba.dip0.t-ipconnect.de) (Ping timeout: 260 seconds) |
| 08:31:30 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:7d9e:f1ab:9e23:bf6) |
| 08:32:31 | × | mcglk quits (~mcglk@131.191.49.120) (Read error: Connection reset by peer) |
| 08:34:03 | × | ec_ quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds) |
| 08:37:06 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:7d9e:f1ab:9e23:bf6) (Ping timeout: 260 seconds) |
| 08:38:02 | → | pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) |
| 08:39:12 | × | Vajb quits (~Vajb@88.195.168.176) (Read error: Connection reset by peer) |
| 08:40:20 | × | jonathanx quits (~jonathan@dyn-8-sc.cdg.chalmers.se) (Remote host closed the connection) |
| 08:40:40 | → | jonathanx joins (~jonathan@dyn-8-sc.cdg.chalmers.se) |
| 08:41:03 | × | Cajun quits (~Cajun@user/cajun) (Quit: Client closed) |
| 08:42:09 | <Gurkenglas> | I don't get PrimGetter/why there's (t->b) in it. What's the theoretical justification? |
| 08:42:34 | → | Vajb joins (~Vajb@n1xq4ni1adi29tefj-2.v6.elisa-mobile.fi) |
| 08:42:42 | <Gurkenglas> | (found on https://oleg.fi/gists/posts/2017-04-18-glassery.html) |
| 08:44:40 | <dminuoso> | Gurkenglas: It's simply the dual of PrimReview |
| 08:45:20 | <dminuoso> | Gurkenglas: And in the glassery there's some details about PrimReview |
| 08:45:36 | <dminuoso> | Note that `type Simple o s a = o s s a a` |
| 08:48:02 | × | rubin55___ quits (sid175221@id-175221.stonehaven.irccloud.com) () |
| 08:48:34 | <Gurkenglas> | dminuoso, is the theoretical justification for each supposed to be that when we apply all the typeclass combinations to p we get all the optic types of which two happen to be PrimReview and PrimGetter, and they are where Review and Getter come from in the first place? |
| 08:49:14 | <dminuoso> | Yes. |
| 08:49:14 | → | rubin55 joins (sid175221@id-175221.stonehaven.irccloud.com) |
| 08:50:43 | <dminuoso> | Both PrimReview and PrimGetter are mostly redundant, they dont appear to model something that is useful in the language of optics |
| 08:51:55 | <Gurkenglas> | Can we rephrase a bunch of the glassery graph by replacing the -> "type Optic c s t a b = forall p. c p => p a b -> p s t" with linearly typed ->s? |
| 08:52:02 | → | Pickchea joins (~private@user/pickchea) |
| 08:53:15 | <Gurkenglas> | aka a lens is a traversal that uses the (a -> f b) exactly once |
| 08:54:31 | <dminuoso> | I cant even pretend to know anything about that. On some naive level is sounds reasonable, but having absolutely no experience with linearnly typed systems, I cant say at all whether that's encodable like that. |
| 08:55:00 | <dminuoso> | The thing is |
| 08:55:06 | <dminuoso> | With profunctor optics you dont have some `a -> f b` |
| 08:55:19 | <Gurkenglas> | you have some p a b though! |
| 08:55:23 | <dminuoso> | As being a lens is encoded in the `Strong p` constraint on p |
| 08:56:07 | <dminuoso> | Gurkenglas: `forall p. Strong p => Optic p s t a b`, anyway |
| 08:56:43 | <Gurkenglas> | yeah and Optic p s t a b uses a -> in the definition which is my attack vector |
| 08:56:52 | × | hnOsmium0001 quits (uid453710@id-453710.stonehaven.irccloud.com) (Quit: Connection closed for inactivity) |
| 08:56:57 | <dminuoso> | Mmm? |
| 08:57:42 | <Gurkenglas> | type Traversal s t a b = forall p. Traversing p => p a b -> p s t |
| 08:57:57 | <Gurkenglas> | type Lens s t a b = forall p. Traversing p => p a b %1 -> p s t |
| 08:58:24 | <dminuoso> | Yes, so? |
| 08:59:05 | <Gurkenglas> | It sounds like you are claiming that this won't work, because i have "p a b" instead of "a -> f b" |
| 08:59:10 | <Gurkenglas> | and i dont see why its relevant :D |
| 09:00:15 | <Gurkenglas> | (by the way if we get first class polymorphism while lens switches to %1 and then it turns out we dont have first class %n im gonna be sad) |
| 09:02:47 | × | pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Ping timeout: 265 seconds) |
| 09:03:16 | × | amahl quits (~amahl@dsl-jklbng12-54fbca-64.dhcp.inet.fi) (Ping timeout: 265 seconds) |
| 09:03:17 | → | trcc joins (~trcc@users-1190.st.net.au.dk) |
| 09:03:35 | <Gurkenglas> | dminuoso, is your argument just "a -> f b" is understandable enough and it sounds like it would work with that, but "p a b" is mysterious and none of us have any reason to believe whether this would work? :3 |
| 09:03:52 | → | pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) |
| 09:04:16 | → | azeem joins (~azeem@emp-182-240.eduroam.uu.se) |
| 09:04:21 | <dminuoso> | Gurkenglas: Like I said |
| 09:04:31 | <dminuoso> | I cant even pretend to know anything about whether this is encodable via linear types. |
| 09:04:45 | <dminuoso> | And just that your argument |
| 09:04:56 | <dminuoso> | `aka a lens is a traversal that uses the (a -> f b) exactly once` doesnt apply to optics. can you reformulate |
| 09:05:27 | <Gurkenglas> | aka a lens is a traversal that uses the p a b exactly once |
| 09:06:11 | × | tzh quits (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz) |
| 09:06:36 | → | dextaa0 joins (~DV@user/dextaa) |
| 09:07:20 | × | dextaa quits (~DV@user/dextaa) (Read error: Connection reset by peer) |
| 09:07:20 | dextaa0 | is now known as dextaa |
| 09:08:20 | <nshepperd2> | a traversal is a lens that uses the (a -> f b) multiple times *and combines the results* |
| 09:08:39 | <Gurkenglas> | yeah im not saying to put traversal it terms of lens, im saying to put lens in terms of traversal |
| 09:08:39 | × | Vajb quits (~Vajb@n1xq4ni1adi29tefj-2.v6.elisa-mobile.fi) (Read error: Connection reset by peer) |
| 09:08:47 | <dminuoso> | Gurkenglas: Im not convinced that truly holds. |
| 09:09:00 | <nshepperd2> | being linear or not doesn't tell you how to combine things |
| 09:09:11 | <Gurkenglas> | you can't combine things if you only have one of it :3 |
| 09:09:17 | <dminuoso> | Of course you can |
| 09:09:22 | <Gurkenglas> | how? |
| 09:09:27 | <dminuoso> | You can use `p a b` once, duplicate the result and combine them. |
| 09:09:38 | <Gurkenglas> | you can't duplicate the result, thats the point of linear types :23 |
| 09:09:42 | <Gurkenglas> | You cant even throw it away |
| 09:09:52 | <Gurkenglas> | compiler will complain. |
| 09:10:26 | → | Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) |
| 09:10:41 | <nshepperd2> | being linear on p a b is different from being linear on whatever the 'result' of p a b is |
| 09:11:05 | <dminuoso> | Gurkenglas: no I dont think it holds. |
| 09:11:07 | <dminuoso> | Consider something like |
| 09:11:19 | <dminuoso> | Lens Int () |
| 09:11:21 | <Gurkenglas> | nshepperd2, sure, and i claim specializing traversal to lens needs the "being linear on p a b" one |
| 09:11:25 | × | trcc quits (~trcc@users-1190.st.net.au.dk) () |
| 09:11:29 | <dminuoso> | Err, `Lens' Int ()` |
| 09:12:01 | <dminuoso> | you cant even demand that the input profunctor even be used |
| 09:13:24 | <Gurkenglas> | of course united :: Lens' Int () uses its argument exactly once |
| 09:13:33 | <Gurkenglas> | https://hackage.haskell.org/package/lens-5.0.1/docs/src/Control.Lens.Lens.html#united "united f v = f () <&> \ () -> v" |
| 09:14:58 | <Gurkenglas> | https://hackage.haskell.org/package/profunctor-optics-0.0.2/docs/src/Data.Profunctor.Optic.Lens.html#united too "united = lens (const ()) const" |
| 09:15:21 | <Gurkenglas> | Go ahead, construct a lens that doesnt use its argument. |
| 09:17:58 | <nshepperd2> | a lens works on things that have no way of combining them |
| 09:18:11 | → | ub joins (~Thunderbi@178.165.180.233.wireless.dyn.drei.com) |
| 09:18:25 | <nshepperd2> | a traversal with an arbitrary linearness restriction doesn't |
| 09:18:38 | × | ubert1 quits (~Thunderbi@91.141.53.92.wireless.dyn.drei.com) (Ping timeout: 260 seconds) |
| 09:20:12 | × | ubert quits (~Thunderbi@91.141.53.92.wireless.dyn.drei.com) (Ping timeout: 265 seconds) |
| 09:20:12 | ub | is now known as ubert |
| 09:20:12 | → | oxide joins (~lambda@user/oxide) |
| 09:22:35 | → | paradajz joins (~paradajz@2a05:4f46:408:af00:a13:6117:f8f4:effb) |
| 09:24:59 | → | peterhil joins (~peterhil@dsl-hkibng32-54fb52-57.dhcp.inet.fi) |
| 09:25:27 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 09:25:37 | × | paradajz quits (~paradajz@2a05:4f46:408:af00:a13:6117:f8f4:effb) (Client Quit) |
| 09:25:41 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 09:29:50 | <Gurkenglas> | why not? the linearness restriction expresses that we won't need a way of combining them. |
| 09:31:13 | <nshepperd2> | no it doesn't |
| 09:31:44 | <Gurkenglas> | can you give an example? |
| 09:31:59 | × | peterhil quits (~peterhil@dsl-hkibng32-54fb52-57.dhcp.inet.fi) (Ping timeout: 252 seconds) |
| 09:33:17 | <nshepperd2> | Applicative f => (a -> f b) ~> (s -> f t) |
| 09:34:35 | <Gurkenglas> | You mean that I can't write "(forall f. Applicative f => (a -> f b) ~> (s -> f t)) -> (forall f. Functor f => (a -> f b) -> (s -> f t))"? |
| 09:35:39 | <nshepperd2> | I mean that if you wanna apply that function, you're gonna have to provide an Applicative instance |
| 09:38:23 | <nshepperd2> | and no, simply inventing one out of `undefined` on the basis that it can't possibly need it is unsound, because as mentioned, > being linear on p a b is different from being linear on whatever the 'result' of p a b is |
| 09:39:00 | → | mei joins (~mei@user/mei) |
| 09:39:21 | <nshepperd2> | and anyway, if you do the right thing and weaken the constraint to Functor f in the first place, then the linear type is redundant |
| 09:41:04 | <gentauro> | so looking at /r/haskell and seeing SPJ "moving along". The question is, is Haskell in good hands going forward? :) |
| 09:41:30 | <merijn> | He's not stopping with Haskell or GHC... |
| 09:41:37 | <merijn> | It literally says right in the post >.> |
| 09:41:42 | <merijn> | He's just leaving MSR |
| 09:42:06 | <Gurkenglas> | nshepperd2, may I have some p where this doesn't work? |
| 09:43:38 | <nshepperd2> | Gurkenglas: literally a -> f b |
| 09:43:49 | <gentauro> | merijn: aha |
| 09:43:52 | × | azeem quits (~azeem@emp-182-240.eduroam.uu.se) (Ping timeout: 265 seconds) |
| 09:44:15 | <gentauro> | I was afraid that he was going to join Oracle and spend time on Java instead :'( |
| 09:44:16 | <Gurkenglas> | :t unsafeSingular -- This does the undefined thing, what does it not work on? |
| 09:44:17 | <lambdabot> | (Conjoined p, Functor f) => Traversing p f s t a b -> Over p f s t a b |
| 09:44:28 | → | azeem joins (~azeem@2a00:801:23f:d6b0:3dc9:5843:deaf:1727) |
| 09:44:39 | <nshepperd2> | Gurkenglas: that's not the same thing |
| 09:44:41 | <Gurkenglas> | (I admit that properly I should be threading the %1 through the definition to show that the undefined isnt hit) |
| 09:45:13 | <dminuoso> | Gurkenglas: Perhaps the real question is, what are you hoping to obtain? The language of linearity wouldn't allow you to model much else. |
| 09:45:23 | <nshepperd2> | basically, linear type are useless |
| 09:45:24 | <dminuoso> | What is a Prism? What about an AffineFold? |
| 09:45:47 | <nshepperd2> | a function being linear doesn't let the caller do anything new except call it in a context that is itself linear |
| 09:46:50 | <nshepperd2> | this is completely different from parametricity, which actually lets you call functions at different types |
| 09:47:58 | <Gurkenglas> | dminuoso, Lens,Traversal1,AffineTraversal,Traversal become Traversal. Getter,Fold1,AffineFold,Fold become Fold. |
| 09:50:41 | × | ubert quits (~Thunderbi@178.165.180.233.wireless.dyn.drei.com) (Ping timeout: 252 seconds) |
| 09:53:52 | × | luc03 quits (~a@p200300ef97083056400e9f76999ee7ea.dip0.t-ipconnect.de) (Quit: WeeChat 3.0.1) |
| 09:53:59 | × | asthasr quits (~asthasr@162.210.28.151) (Quit: asthasr) |
| 09:56:12 | → | ubert joins (~Thunderbi@91.141.39.93.wireless.dyn.drei.com) |
| 09:57:40 | × | azeem quits (~azeem@2a00:801:23f:d6b0:3dc9:5843:deaf:1727) (Read error: Connection reset by peer) |
| 09:57:54 | → | azeem joins (~azeem@emp-182-240.eduroam.uu.se) |
| 09:59:41 | <Gurkenglas> | a lens is to a traversal as a prism is to a... witness that s is isomorphic to "something + (Nat, a)"? my theory predicts that %1 will make it a prism again iff it's the correct definition. |
| 10:00:47 | × | ubert quits (~Thunderbi@91.141.39.93.wireless.dyn.drei.com) (Ping timeout: 265 seconds) |
| 10:00:50 | → | ub joins (~Thunderbi@91.141.41.188.wireless.dyn.drei.com) |
| 10:03:08 | ub | is now known as ubert |
| 10:05:56 | <Gurkenglas> | (that's what i'm hoping to obtain, predictions :)) |
| 10:06:46 | × | qbt quits (~edun@user/edun) (Quit: WeeChat 3.2) |
| 10:07:12 | statusfa1led | is now known as statusfailed |
| 10:11:57 | → | lavaman joins (~lavaman@98.38.249.169) |
| 10:15:26 | × | azeem quits (~azeem@emp-182-240.eduroam.uu.se) (Ping timeout: 252 seconds) |
| 10:15:47 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 10:16:01 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 10:16:10 | → | azeem joins (~azeem@2a00:801:23f:d6b0:3dc9:5843:deaf:1727) |
| 10:16:30 | × | lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 260 seconds) |
| 10:19:38 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds) |
| 10:19:41 | → | burnsidesLlama joins (~burnsides@dhcp168-018.wadham.ox.ac.uk) |
| 10:20:23 | × | azeem quits (~azeem@2a00:801:23f:d6b0:3dc9:5843:deaf:1727) (Read error: Connection reset by peer) |
| 10:21:04 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 10:21:05 | → | peterhil joins (~peterhil@dsl-hkibng32-54fb52-57.dhcp.inet.fi) |
| 10:21:25 | → | azeem joins (~azeem@emp-182-240.eduroam.uu.se) |
| 10:23:20 | <Gurkenglas> | Why aren't the lens laws just "view l s ≡ view l s' implies set l b s ≡ set l b s'"? |
| 10:26:05 | × | burnsidesLlama quits (~burnsides@dhcp168-018.wadham.ox.ac.uk) (Ping timeout: 260 seconds) |
| 10:26:07 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 10:26:20 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 10:26:26 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds) |
| 10:26:48 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 10:27:05 | × | sidbendu quits (~sidbendu@188.252.196.5) (Quit: Client closed) |
| 10:27:35 | → | [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470) |
| 10:29:34 | × | peterhil quits (~peterhil@dsl-hkibng32-54fb52-57.dhcp.inet.fi) (Ping timeout: 260 seconds) |
| 10:30:17 | × | aratamizuki quits (~aratamizu@p2135145-ipoe.ipoe.ocn.ne.jp) (Remote host closed the connection) |
| 10:30:49 | → | aratamizuki joins (~aratamizu@p2135145-ipoe.ipoe.ocn.ne.jp) |
| 10:32:49 | → | ub joins (~Thunderbi@91.141.34.0.wireless.dyn.drei.com) |
| 10:33:59 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:7d9e:f1ab:9e23:bf6) |
| 10:34:08 | × | ubert quits (~Thunderbi@91.141.41.188.wireless.dyn.drei.com) (Ping timeout: 265 seconds) |
| 10:34:09 | ub | is now known as ubert |
| 10:36:42 | <nshepperd2> | because that law isn't true? |
| 10:37:10 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds) |
| 10:37:58 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 10:38:26 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:7d9e:f1ab:9e23:bf6) (Ping timeout: 260 seconds) |
| 10:39:16 | <[itchyjunk]> | What's a good pace to specfically learn all the A->B->C notations. a :: A->B says a has the type A->B, but i can thinking of a as a function that takes something of type A and returns something of type B right? |
| 10:39:56 | × | Pickchea quits (~private@user/pickchea) (Ping timeout: 265 seconds) |
| 10:40:02 | <[itchyjunk]> | but when a :: A->B->C->A, is a function that takes two things of type A and B and returns something of type C->A or takes three things of type A,B,C and returns something of type A |
| 10:40:03 | → | Phantastes joins (~Phantaste@c-67-173-229-120.hsd1.co.comcast.net) |
| 10:40:04 | <[itchyjunk]> | type thing |
| 10:40:48 | × | Phantastes quits (~Phantaste@c-67-173-229-120.hsd1.co.comcast.net) (Client Quit) |
| 10:43:29 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds) |
| 10:44:02 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 10:45:48 | → | sedeki joins (~textual@user/sedeki) |
| 10:48:17 | × | sedeki quits (~textual@user/sedeki) (Client Quit) |
| 10:48:23 | × | anderson quits (~ande@134.209.221.71) (Quit: bye) |
| 10:49:32 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds) |
| 10:49:47 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 10:51:35 | × | notzmv quits (~zmv@user/notzmv) (Read error: Connection reset by peer) |
| 10:52:27 | → | anderson joins (~ande@134.209.221.71) |
| 10:54:55 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds) |
| 10:55:00 | → | notzmv joins (~zmv@user/notzmv) |
| 10:55:14 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 10:58:18 | × | azeem quits (~azeem@emp-182-240.eduroam.uu.se) (Ping timeout: 265 seconds) |
| 10:59:30 | → | azeem joins (~azeem@2a00:801:23f:d6b0:3dc9:5843:deaf:1727) |
| 11:00:25 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds) |
| 11:01:00 | → | alx741 joins (~alx741@186.178.109.214) |
| 11:01:04 | × | anderson quits (~ande@134.209.221.71) (Changing host) |
| 11:01:04 | → | anderson joins (~ande@user/anderson) |
| 11:01:20 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 11:01:58 | × | anderson quits (~ande@user/anderson) (Quit: bye) |
| 11:02:42 | × | ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection) |
| 11:02:44 | × | ubert quits (~Thunderbi@91.141.34.0.wireless.dyn.drei.com) (Ping timeout: 252 seconds) |
| 11:02:50 | <enikar> | [itchyjunk]: the both are true. Function are currified. When they are partialy applied, they return a new function that takes remaind arguments. |
| 11:02:55 | → | anderson joins (~ande@user/anderson) |
| 11:02:55 | → | ub joins (~Thunderbi@178.115.42.105.wireless.dyn.drei.com) |
| 11:02:56 | × | azeem quits (~azeem@2a00:801:23f:d6b0:3dc9:5843:deaf:1727) (Read error: Connection reset by peer) |
| 11:03:09 | → | ChaiTRex joins (~ChaiTRex@user/chaitrex) |
| 11:03:11 | → | azeem joins (~azeem@emp-182-240.eduroam.uu.se) |
| 11:05:14 | ub | is now known as ubert |
| 11:07:34 | <[itchyjunk]> | so say f :: A->B->C->D, applying right associativity f :: A->(B->(C->D)). I pass this function only A and the return of this would be a function g :: B->(C->D). If f had A and B, i would have a return of h :: C->D and in case f had A B and C, the return type would be D ? |
| 11:08:46 | × | vysn quits (~vysn@user/vysn) (Quit: WeeChat 3.2) |
| 11:09:06 | <enikar> | [itchyjunk]: exactly. You are right. |
| 11:09:45 | <[itchyjunk]> | this stuff is sloooowly making sense ;_; |
| 11:17:25 | × | max22- quits (~maxime@2a01cb08833598007f934d16e3231d2d.ipv6.abo.wanadoo.fr) (Ping timeout: 260 seconds) |
| 11:19:55 | → | Pickchea joins (~private@user/pickchea) |
| 11:21:52 | × | azeem quits (~azeem@emp-182-240.eduroam.uu.se) (Read error: Connection reset by peer) |
| 11:22:16 | <carbolymer> | anyone tried to "register" on haskell.love in the schedule tab? I wanted to build agenda for tomorrow, and it seems not possible |
| 11:23:15 | → | azeem joins (~azeem@emp-182-240.eduroam.uu.se) |
| 11:25:55 | → | fendor_ joins (~fendor@77.119.194.245.wireless.dyn.drei.com) |
| 11:26:27 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 11:26:40 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 11:28:45 | × | fendor quits (~fendor@178.165.191.44.wireless.dyn.drei.com) (Ping timeout: 265 seconds) |
| 11:29:08 | × | MQ-17J quits (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 252 seconds) |
| 11:29:18 | → | MQ-17J joins (~MQ-17J@2607:fb90:46:a8a6:384f:d5fd:c3eb:fa6f) |
| 11:29:44 | × | MQ-17J quits (~MQ-17J@2607:fb90:46:a8a6:384f:d5fd:c3eb:fa6f) (Read error: Connection reset by peer) |
| 11:29:49 | fendor_ | is now known as fendor |
| 11:30:32 | → | dschrempf joins (~dominik@070-207.dynamic.dsl.fonira.net) |
| 11:32:22 | × | alx741 quits (~alx741@186.178.109.214) (Quit: alx741) |
| 11:32:53 | → | MQ-17J joins (~MQ-17J@d14-69-206-129.try.wideopenwest.com) |
| 11:34:46 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:c1f1:b01b:5ae7:397c) |
| 11:35:38 | × | sneedsfeed quits (~sneedsfee@rrcs-173-95-122-169.midsouth.biz.rr.com) (Quit: Client closed) |
| 11:36:47 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 11:37:08 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 11:38:15 | → | sleblanc joins (~sleblanc@user/sleblanc) |
| 11:39:34 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:c1f1:b01b:5ae7:397c) (Ping timeout: 260 seconds) |
| 11:42:42 | × | seeg quits (~thelounge@static.89.161.217.95.clients.your-server.de) (Quit: The Lounge - https://thelounge.chat) |
| 11:43:24 | → | seeg joins (~thelounge@static.89.161.217.95.clients.your-server.de) |
| 11:43:39 | → | shapr joins (~user@pool-100-36-247-68.washdc.fios.verizon.net) |
| 11:47:12 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "") |
| 11:48:34 | × | glguy quits (x@libera/staff/glguy) (Read error: Connection reset by peer) |
| 11:52:35 | → | System123 joins (~System123@41.164.183.76) |
| 11:54:30 | × | shapr quits (~user@pool-100-36-247-68.washdc.fios.verizon.net) (Ping timeout: 260 seconds) |
| 11:58:42 | → | burnsidesLlama joins (~burnsides@dhcp168-018.wadham.ox.ac.uk) |
| 12:03:33 | × | MQ-17J quits (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 265 seconds) |
| 12:05:12 | → | MQ-17J joins (~MQ-17J@d14-69-206-129.try.wideopenwest.com) |
| 12:07:08 | → | hololeap joins (~hololeap@user/hololeap) |
| 12:11:46 | × | oxide quits (~lambda@user/oxide) (Ping timeout: 260 seconds) |
| 12:12:02 | → | machinedgod joins (~machinedg@135-23-192-217.cpe.pppoe.ca) |
| 12:12:56 | → | lavaman joins (~lavaman@98.38.249.169) |
| 12:14:16 | → | oxide joins (~lambda@user/oxide) |
| 12:15:30 | × | cheater quits (~Username@user/cheater) (Ping timeout: 260 seconds) |
| 12:16:56 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 12:20:47 | × | yaroot quits (~yaroot@6.3.30.125.dy.iij4u.or.jp) (Quit: The Lounge - https://thelounge.chat) |
| 12:21:37 | → | yaroot joins (~yaroot@6.3.30.125.dy.iij4u.or.jp) |
| 12:22:18 | → | glguy joins (x@libera/staff/glguy) |
| 12:25:05 | × | Pickchea quits (~private@user/pickchea) (Ping timeout: 260 seconds) |
| 12:25:18 | × | System123 quits (~System123@41.164.183.76) (Ping timeout: 260 seconds) |
| 12:26:59 | → | Akronymus joins (~Akronymus@85.118.189.59) |
| 12:33:22 | → | Lycurgus joins (~juan@98.4.112.204) |
| 12:37:09 | × | aratamizuki quits (~aratamizu@p2135145-ipoe.ipoe.ocn.ne.jp) (Remote host closed the connection) |
| 12:37:22 | → | aratamizuki joins (~aratamizu@p2135145-ipoe.ipoe.ocn.ne.jp) |
| 12:40:06 | × | tinhatcat quits (~manjaro-g@2620:103:a000:2201:8e4c:af6a:e11c:11a1) (Quit: Leaving) |
| 12:43:15 | <kuribas> | How do you handle versioning of configuration? For example, being able to test a previous version of the app without having to manually edit your configuration files... |
| 12:43:37 | <carbolymer> | in git |
| 12:43:59 | <kuribas> | I don't want to store configuration in git, because it contains passwords etc... |
| 12:44:12 | <carbolymer> | then skip passwords, and store the rest in git |
| 12:44:16 | <carbolymer> | encrypt passwords |
| 12:44:25 | <carbolymer> | or store them in shit like hashicorp vault |
| 12:44:26 | × | sleblanc quits (~sleblanc@user/sleblanc) (Ping timeout: 260 seconds) |
| 12:45:00 | <kuribas> | hmm |
| 12:45:21 | <kuribas> | Also, my own configuration file may look different from the other developers. |
| 12:45:30 | <kuribas> | Different database ports... |
| 12:46:01 | → | max22- joins (~maxime@2a01cb08833598009553b59d4752b14e.ipv6.abo.wanadoo.fr) |
| 12:46:20 | <merijn> | kuribas: Support old formats indefinitely |
| 12:46:22 | <carbolymer> | uhm, you can store your diff on a separate branch or git stash, and rebase it every time |
| 12:46:41 | <merijn> | kuribas: If you change the format, make a migration codepath to "upgrade" old config files to the new code support |
| 12:47:08 | <kuribas> | merijn: well, it's not upgrading which is problematic, but downgrading, for example if production has a different config file then testing. |
| 12:48:06 | <kuribas> | merijn: ideally they would be backwards compatible. |
| 12:48:11 | <kuribas> | I wonder if that can be done with dhall... |
| 12:48:29 | <kuribas> | if dhall will skip fields it doesn't recognise |
| 12:49:19 | <merijn> | kuribas: Presumably the production config is older then testing, so upgrading old configs to new is sufficient, no? |
| 12:50:00 | <kuribas> | merijn: not if I am first testing, then need to hotfix a bug in production. |
| 12:51:49 | → | slowButPresent joins (~slowButPr@user/slowbutpresent) |
| 12:51:57 | × | Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer) |
| 12:52:08 | → | Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) |
| 12:54:58 | → | pbrisbin joins (~patrick@pool-108-16-214-93.phlapa.fios.verizon.net) |
| 12:57:17 | → | sedeki joins (~textual@user/sedeki) |
| 12:57:18 | → | Pickchea joins (~private@user/pickchea) |
| 12:57:46 | × | sedeki quits (~textual@user/sedeki) (Client Quit) |
| 12:58:24 | × | lortabac quits (~lortabac@2a01:e0a:541:b8f0:5bfd:35e:da52:7e46) (Quit: WeeChat 2.8) |
| 12:59:04 | × | max22- quits (~maxime@2a01cb08833598009553b59d4752b14e.ipv6.abo.wanadoo.fr) (Quit: Leaving) |
| 13:00:42 | × | burnsidesLlama quits (~burnsides@dhcp168-018.wadham.ox.ac.uk) (Remote host closed the connection) |
| 13:03:38 | × | Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer) |
| 13:04:17 | → | Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) |
| 13:04:43 | × | MQ-17J quits (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 252 seconds) |
| 13:09:03 | → | MQ-17J joins (~MQ-17J@d14-69-206-129.try.wideopenwest.com) |
| 13:09:05 | × | orcus- quits (~orcus@user/brprice) (Quit: ZNC 1.8.1 - https://znc.in) |
| 13:09:12 | → | Franciman joins (~Franciman@openglass.it) |
| 13:09:24 | → | orcus joins (~orcus@user/brprice) |
| 13:09:45 | <Franciman> | Hi all, is there a way to tell ghc to delete all compilation byproducts in the directory? |
| 13:09:50 | <Franciman> | i.e. Main.hi Main.o etc |
| 13:10:09 | → | burnsidesLlama joins (~burnsides@dhcp168-018.wadham.ox.ac.uk) |
| 13:11:20 | → | luc03 joins (~a@p200300ef97083056400e9f76999ee7ea.dip0.t-ipconnect.de) |
| 13:13:22 | × | MQ-17J quits (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 260 seconds) |
| 13:13:43 | → | MQ-17J joins (~MQ-17J@d14-69-206-129.try.wideopenwest.com) |
| 13:16:34 | <adamCS> | Franciman: "cabal clean" might? but it also clears out dependencies that come from a git repo or local directory (via cabal.project). |
| 13:17:19 | <adamCS> | (and that might depend a bit on cabal version...) |
| 13:17:22 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 252 seconds) |
| 13:17:48 | <Franciman> | adamCS: I am not using cabal |
| 13:18:01 | <Franciman> | I am using ghc directly |
| 13:18:02 | × | dschrempf quits (~dominik@070-207.dynamic.dsl.fonira.net) (Ping timeout: 260 seconds) |
| 13:18:02 | × | MQ-17J quits (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 252 seconds) |
| 13:18:06 | <adamCS> | ah. No idea, then. Sorry! |
| 13:18:54 | <Franciman> | np, thanks anyways |
| 13:19:01 | × | lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 252 seconds) |
| 13:19:10 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 13:19:22 | × | hendursa1 quits (~weechat@user/hendursaga) (Quit: hendursa1) |
| 13:19:33 | → | max22- joins (~maxime@2a01cb0883359800c86fdddfb8d9c63e.ipv6.abo.wanadoo.fr) |
| 13:20:55 | → | hendursaga joins (~weechat@user/hendursaga) |
| 13:21:32 | <kuribas> | Is there a portable solution for config file location? |
| 13:23:09 | <carbolymer> | what do you mean? https://wiki.archlinux.org/title/XDG_user_directories ? |
| 13:23:36 | <kuribas> | carbolymer: does xdg work in windows? |
| 13:23:52 | <carbolymer> | I highly doubt that |
| 13:23:56 | <kuribas> | hmm, an environment variable would do ... |
| 13:24:50 | → | cheater joins (~Username@user/cheater) |
| 13:25:17 | × | aman quits (~aman@user/aman) (Quit: aman) |
| 13:32:14 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 13:32:34 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 13:32:55 | × | xff0x quits (~xff0x@2001:1a81:52b9:4900:be0:d306:f2f7:baf5) (Ping timeout: 252 seconds) |
| 13:33:40 | → | xff0x joins (~xff0x@2001:1a81:52b9:4900:ba34:d2bf:e316:3533) |
| 13:36:17 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:c1f1:b01b:5ae7:397c) |
| 13:37:14 | × | jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection) |
| 13:37:39 | → | jpds joins (~jpds@gateway/tor-sasl/jpds) |
| 13:39:56 | → | MQ-17J joins (~MQ-17J@2607:fb90:46:a8a6:384f:d5fd:c3eb:fa6f) |
| 13:39:56 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 13:39:56 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
| 13:39:56 | → | wroathe joins (~wroathe@user/wroathe) |
| 13:40:54 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:c1f1:b01b:5ae7:397c) (Ping timeout: 260 seconds) |
| 13:41:03 | × | jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection) |
| 13:41:25 | → | jpds joins (~jpds@gateway/tor-sasl/jpds) |
| 13:42:04 | → | sim590 joins (~simon@modemcable090.207-203-24.mc.videotron.ca) |
| 13:42:37 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 13:42:50 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 13:42:56 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Client Quit) |
| 13:43:20 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 13:44:28 | × | burnsidesLlama quits (~burnsides@dhcp168-018.wadham.ox.ac.uk) (Remote host closed the connection) |
| 13:44:55 | × | aratamizuki quits (~aratamizu@p2135145-ipoe.ipoe.ocn.ne.jp) (Remote host closed the connection) |
| 13:45:27 | → | aratamizuki joins (~aratamizu@p2135145-ipoe.ipoe.ocn.ne.jp) |
| 13:51:27 | → | shriekingnoise joins (~shrieking@186.137.144.80) |
| 13:52:06 | × | MQ-17J quits (~MQ-17J@2607:fb90:46:a8a6:384f:d5fd:c3eb:fa6f) (Read error: Connection reset by peer) |
| 13:52:10 | × | troydm quits (~troydm@host-176-37-124-197.b025.la.net.ua) (Quit: What is Hope? That all of your wishes and all of your dreams come true? To turn back time because things were not supposed to happen like that (C) Rau Le Creuset) |
| 13:52:23 | → | MQ-17J joins (~MQ-17J@35.50.7.10) |
| 13:52:44 | → | troydm joins (~troydm@host-176-37-124-197.b025.la.net.ua) |
| 13:55:13 | → | Sgeo joins (~Sgeo@user/sgeo) |
| 13:59:52 | × | xff0x quits (~xff0x@2001:1a81:52b9:4900:ba34:d2bf:e316:3533) (Ping timeout: 252 seconds) |
| 14:01:38 | → | peterhil joins (~peterhil@dsl-hkibng32-54fb52-57.dhcp.inet.fi) |
| 14:02:47 | × | Pickchea quits (~private@user/pickchea) (Quit: Leaving) |
| 14:03:20 | × | spruit11 quits (~quassel@2a02:a467:ccd6:1:e578:65a3:833a:6855) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.) |
| 14:05:10 | × | acidjnk_new quits (~acidjnk@p5487d0ba.dip0.t-ipconnect.de) (Ping timeout: 260 seconds) |
| 14:05:26 | → | jippiedoe joins (~david@2a02-a44c-e14e-1-a863-7c6f-a6d9-ecf2.fixed6.kpn.net) |
| 14:09:31 | → | hnOsmium0001 joins (uid453710@id-453710.stonehaven.irccloud.com) |
| 14:09:42 | → | mcglk joins (~mcglk@131.191.49.120) |
| 14:10:37 | → | xff0x joins (~xff0x@2001:1a81:52b9:4900:ba34:d2bf:e316:3533) |
| 14:12:03 | → | mangoiv joins (~MangoIV@193.175.5.172) |
| 14:12:49 | → | ec_ joins (~ec@gateway/tor-sasl/ec) |
| 14:16:20 | → | slack1256 joins (~slack1256@2607:fb90:25d6:6d7f:a90a:2601:f9dc:3930) |
| 14:16:21 | × | mangoiv quits (~MangoIV@193.175.5.172) (Client Quit) |
| 14:16:29 | → | mangoiv joins (~MangoIV@193.175.5.172) |
| 14:16:47 | <slack1256> | Is it possible to specify a type family arity from the signature given by StandaloneKindSignatures ? |
| 14:17:12 | <dminuoso> | Sure |
| 14:17:17 | <dminuoso> | % :set -XStandaloneKindSignatures |
| 14:17:17 | <yahb> | dminuoso: |
| 14:17:44 | <dminuoso> | % :set -XDataKinds |
| 14:17:44 | <yahb> | dminuoso: |
| 14:18:18 | × | mangoiv quits (~MangoIV@193.175.5.172) (Client Quit) |
| 14:18:26 | → | mangoiv joins (~MangoIV@193.175.5.172) |
| 14:19:05 | <dminuoso> | % type F :: Bool -> Type; type family F x where F 'True = Int; F 'False = Char -- slack1256 |
| 14:19:05 | <yahb> | dminuoso: |
| 14:19:37 | <dminuoso> | Is this what you meant? |
| 14:19:49 | → | Pickchea joins (~private@user/pickchea) |
| 14:19:51 | × | ec_ quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds) |
| 14:20:30 | <slack1256> | Mmmm let me think if this is what I actually wanted. |
| 14:20:40 | × | arahael quits (~arahael@203.221.97.63) (Ping timeout: 252 seconds) |
| 14:24:42 | → | burnsidesLlama joins (~burnsides@dhcp168-018.wadham.ox.ac.uk) |
| 14:24:47 | × | mangoiv quits (~MangoIV@193.175.5.172) (Quit: WeeChat 3.2) |
| 14:25:04 | → | mangoiv joins (~MangoIV@193.175.5.172) |
| 14:25:36 | <luc03> | dminuoso: Do you use % to indicate a ghci prompt? |
| 14:27:01 | <dminuoso> | luc03: It's the trigger command for yahb |
| 14:27:01 | × | burnsidesLlama quits (~burnsides@dhcp168-018.wadham.ox.ac.uk) (Read error: Connection reset by peer) |
| 14:27:06 | → | burnside_ joins (~burnsides@dhcp168-018.wadham.ox.ac.uk) |
| 14:27:32 | → | myShoggoth joins (~myShoggot@97-120-70-214.ptld.qwest.net) |
| 14:28:04 | × | Akronymus quits (~Akronymus@85.118.189.59) (Quit: Client closed) |
| 14:28:15 | → | Akronymus joins (~Akronymus@85.118.189.59) |
| 14:30:51 | × | mangoiv quits (~MangoIV@193.175.5.172) (Quit: WeeChat 3.2) |
| 14:31:00 | → | mangoiv joins (~MangoIV@193.175.5.172) |
| 14:31:29 | × | mangoiv quits (~MangoIV@193.175.5.172) (Client Quit) |
| 14:31:37 | → | mangoiv joins (~MangoIV@193.175.5.172) |
| 14:32:12 | → | waleee joins (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) |
| 14:32:35 | → | spruit11 joins (~quassel@2a02:a467:ccd6:1:6cc9:33fd:d92c:45c) |
| 14:36:24 | → | ec_ joins (~ec@gateway/tor-sasl/ec) |
| 14:39:58 | → | tlaxkit joins (~hexchat@170.253.47.137) |
| 14:45:02 | × | phma quits (~phma@host-67-44-208-177.hnremote.net) (Read error: Connection reset by peer) |
| 14:45:04 | × | burnside_ quits (~burnsides@dhcp168-018.wadham.ox.ac.uk) (Remote host closed the connection) |
| 14:45:29 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 252 seconds) |
| 14:45:51 | → | phma joins (~phma@host-67-44-209-67.hnremote.net) |
| 14:46:58 | <dminuoso> | Oh I can see how that might not have been obvious. |
| 14:47:07 | <dminuoso> | % foldr (+) 0 [1,2,3,4,5] -- luc03 |
| 14:47:07 | <yahb> | dminuoso: 15 |
| 14:47:44 | <dminuoso> | yahb is just a GHCi bot, if you write a message starting with % yahb will run everything that follows in a GHCi session |
| 14:47:51 | <dminuoso> | And return the output |
| 14:50:24 | × | ec_ quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds) |
| 14:51:28 | → | pavonia joins (~user@user/siracusa) |
| 14:54:19 | × | Pickchea quits (~private@user/pickchea) (Ping timeout: 252 seconds) |
| 14:55:34 | × | xff0x quits (~xff0x@2001:1a81:52b9:4900:ba34:d2bf:e316:3533) (Ping timeout: 260 seconds) |
| 14:55:42 | × | mangoiv quits (~MangoIV@193.175.5.172) (Quit: WeeChat 3.2) |
| 14:55:50 | → | mangoiv joins (~MangoIV@193.175.5.172) |
| 14:56:29 | → | xff0x joins (~xff0x@port-92-193-229-234.dynamic.as20676.net) |
| 14:56:56 | <slack1256> | dminuoso: https://gist.github.com/RubenAstudillo/6fb47a6dfe9238987c292c1894e2bfbe |
| 14:57:16 | × | mangoiv quits (~MangoIV@193.175.5.172) (Client Quit) |
| 14:57:38 | <slack1256> | I think my problem is with using partially applied type families. If you have time, can you read that gist? |
| 14:57:42 | → | mangoiv joins (~MangoIV@193.175.5.172) |
| 14:58:15 | × | mangoiv quits (~MangoIV@193.175.5.172) (Client Quit) |
| 14:59:13 | → | mangoiv joins (~MangoIV@193.175.5.172) |
| 14:59:43 | → | sneedsfeed joins (~sneedsfee@rrcs-173-95-122-169.midsouth.biz.rr.com) |
| 15:00:14 | × | Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Ping timeout: 260 seconds) |
| 15:00:46 | → | aman joins (~aman@user/aman) |
| 15:09:35 | × | mangoiv quits (~MangoIV@193.175.5.172) (Quit: WeeChat 3.2) |
| 15:09:49 | → | mangoiv joins (~MangoIV@193.175.5.172) |
| 15:09:51 | → | Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) |
| 15:10:12 | → | vysn joins (~vysn@user/vysn) |
| 15:10:30 | → | kstuart joins (~kstuart@85.203.34.2) |
| 15:11:23 | × | mangoiv quits (~MangoIV@193.175.5.172) (Client Quit) |
| 15:11:26 | <merijn> | slack1256: wait |
| 15:11:38 | <merijn> | slack1256: Why are you defining a type synonym *and* type with the same name? |
| 15:11:52 | <merijn> | You're defining Sigma twice |
| 15:12:09 | <slack1256> | StandaloneKindSignatures :-) |
| 15:12:13 | <merijn> | Or is this fancy new typefamilies syntax they changed when I wasn't looking? |
| 15:12:23 | <slack1256> | merijn: The future is now! |
| 15:12:40 | <merijn> | Why not just define them in place? >.> |
| 15:13:22 | <slack1256> | It is an example, I wanted to try my hand at SAKS. Also, to see if they worked with type families. |
| 15:13:42 | × | Andrew quits (~andrew@user/andrewyu) (Ping timeout: 250 seconds) |
| 15:13:43 | <slack1256> | But sure, on a real closed type families, there is no much sense to use SAKS. |
| 15:14:25 | → | AndrewYu joins (~andrew@user/andrewyu) |
| 15:16:08 | × | Akronymus quits (~Akronymus@85.118.189.59) (Quit: Client closed) |
| 15:17:15 | → | Akronymus joins (~Akronymus@85.118.189.59) |
| 15:18:00 | → | mangoiv joins (~MangoIV@193.175.5.172) |
| 15:18:14 | → | burnsidesLlama joins (~burnsides@dhcp168-018.wadham.ox.ac.uk) |
| 15:18:38 | → | zmt00 joins (~zmt00@user/zmt00) |
| 15:19:30 | → | burnside_ joins (~burnsides@dhcp168-018.wadham.ox.ac.uk) |
| 15:19:30 | × | burnsidesLlama quits (~burnsides@dhcp168-018.wadham.ox.ac.uk) (Read error: Connection reset by peer) |
| 15:20:28 | × | Akronymus quits (~Akronymus@85.118.189.59) (Client Quit) |
| 15:22:33 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:c1f1:b01b:5ae7:397c) |
| 15:23:26 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 15:23:46 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 15:24:43 | → | mikoto-chan joins (~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be) |
| 15:24:47 | → | Pickchea joins (~private@user/pickchea) |
| 15:26:27 | × | ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection) |
| 15:26:52 | → | ChaiTRex joins (~ChaiTRex@user/chaitrex) |
| 15:30:38 | × | mangoiv quits (~MangoIV@193.175.5.172) (Quit: WeeChat 3.2) |
| 15:30:47 | × | mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection) |
| 15:30:54 | → | mangoiv joins (~MangoIV@193.175.5.172) |
| 15:31:52 | × | jippiedoe quits (~david@2a02-a44c-e14e-1-a863-7c6f-a6d9-ecf2.fixed6.kpn.net) (Quit: Leaving) |
| 15:33:51 | → | brandonh joins (brandonh@gateway/vpn/protonvpn/brandonh) |
| 15:37:18 | × | Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer) |
| 15:39:36 | × | favonia quits (~favonia@user/favonia) (Ping timeout: 265 seconds) |
| 15:40:44 | × | chele quits (~chele@user/chele) (Remote host closed the connection) |
| 15:40:52 | → | enoq joins (~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7) |
| 15:41:32 | × | Pickchea quits (~private@user/pickchea) (Ping timeout: 265 seconds) |
| 15:42:48 | → | System123 joins (~System123@2c0f:f4c0:2202:6b94:9580:2b3e:eee5:e946) |
| 15:43:00 | × | System123 quits (~System123@2c0f:f4c0:2202:6b94:9580:2b3e:eee5:e946) (Quit: Leaving...) |
| 15:44:53 | <monochrom> | https://discourse.haskell.org/t/new-horizons-for-spj/3099?u=taylorfausak |
| 15:45:32 | <monochrom> | This just before the Haskell Love conference. Tomorrow everyone will be overwhelming him during his keynote speech! |
| 15:45:38 | → | System123 joins (~System123@2c0f:f4c0:2202:6b94:9580:2b3e:eee5:e946) |
| 15:46:12 | × | vysn quits (~vysn@user/vysn) (Quit: WeeChat 3.2) |
| 15:47:52 | → | Vajb joins (~Vajb@n1xq4ni1adi29tefj-2.v6.elisa-mobile.fi) |
| 15:49:53 | × | Vajb quits (~Vajb@n1xq4ni1adi29tefj-2.v6.elisa-mobile.fi) (Read error: Connection reset by peer) |
| 15:50:31 | → | Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) |
| 15:52:13 | <pavonia> | Is this a fancy mailing list archive or a separate board? |
| 15:52:26 | <monochrom> | separate board |
| 15:52:49 | <pavonia> | Interesting, never heard of it |
| 15:53:26 | × | MQ-17J quits (~MQ-17J@35.50.7.10) (Ping timeout: 260 seconds) |
| 15:53:53 | → | neo1 joins (~neo3@cpe-292712.ip.primehome.com) |
| 15:54:27 | × | [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer) |
| 15:54:36 | <geekosaur> | it's fairly recent, part of the new Haskell Foundation stuff |
| 15:57:13 | → | amahl joins (~amahl@dsl-jklbng12-54fbca-64.dhcp.inet.fi) |
| 15:58:04 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:c1f1:b01b:5ae7:397c) (Remote host closed the connection) |
| 16:01:11 | × | burnside_ quits (~burnsides@dhcp168-018.wadham.ox.ac.uk) (Remote host closed the connection) |
| 16:01:28 | → | MQ-17J joins (~MQ-17J@2607:fb90:1d3a:e28c:515f:1bae:68b2:8409) |
| 16:01:50 | × | Lycurgus quits (~juan@98.4.112.204) (Ping timeout: 260 seconds) |
| 16:01:53 | × | cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 3.2) |
| 16:01:58 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:c1f1:b01b:5ae7:397c) |
| 16:02:24 | → | shapr joins (~user@c-69-138-21-57.hsd1.va.comcast.net) |
| 16:02:43 | <Hecate> | omfg https://github.com/zkat/miette |
| 16:02:48 | → | hexfive joins (~eric@50.35.83.177) |
| 16:02:48 | × | hexfive quits (~eric@50.35.83.177) (Client Quit) |
| 16:04:47 | × | System123 quits (~System123@2c0f:f4c0:2202:6b94:9580:2b3e:eee5:e946) (Remote host closed the connection) |
| 16:06:31 | × | luc03 quits (~a@p200300ef97083056400e9f76999ee7ea.dip0.t-ipconnect.de) (Quit: WeeChat 3.0.1) |
| 16:07:51 | × | Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer) |
| 16:08:08 | → | tzh joins (~tzh@c-24-21-73-154.hsd1.or.comcast.net) |
| 16:08:34 | → | Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) |
| 16:09:54 | × | geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection) |
| 16:10:41 | → | ec_ joins (~ec@gateway/tor-sasl/ec) |
| 16:10:44 | → | geekosaur joins (~geekosaur@xmonad/geekosaur) |
| 16:11:56 | → | vysn joins (~vysn@user/vysn) |
| 16:12:32 | × | azeem quits (~azeem@emp-182-240.eduroam.uu.se) (Read error: Connection reset by peer) |
| 16:13:12 | → | azeem joins (~azeem@2a00:801:23e:e471:2966:ade4:f65d:e1fd) |
| 16:13:49 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 16:14:06 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 16:14:13 | <gentauro> | monochrom: doesn't SPJ "own" part of FP Complete? Perhaps he will join there? |
| 16:14:41 | gentauro | reference: https://www.fpcomplete.com/blog/2013/01/why-im-investing-in-fp-complete/ |
| 16:15:45 | <gentauro> | perhaps his position will be BDFL of Haskell? |
| 16:18:22 | → | arahael joins (~arahael@203.221.121.242) |
| 16:19:07 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 16:19:08 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
| 16:19:08 | → | wroathe joins (~wroathe@user/wroathe) |
| 16:19:42 | <Hecate> | gentauro: he's already in such a place through the GHC Steering Committee :) |
| 16:22:08 | × | abhixec quits (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) (Ping timeout: 265 seconds) |
| 16:22:13 | × | martin02 quits (~silas@141.84.69.76) (Ping timeout: 252 seconds) |
| 16:23:37 | → | martin02 joins (~silas@141.84.69.76) |
| 16:24:39 | × | ec_ quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds) |
| 16:27:59 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:c1f1:b01b:5ae7:397c) (Remote host closed the connection) |
| 16:28:10 | × | slack1256 quits (~slack1256@2607:fb90:25d6:6d7f:a90a:2601:f9dc:3930) (Remote host closed the connection) |
| 16:28:15 | → | cafkafk joins (~cafkafk@user/cafkafk) |
| 16:28:46 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds) |
| 16:29:18 | → | favonia joins (~favonia@user/favonia) |
| 16:29:48 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:c1f1:b01b:5ae7:397c) |
| 16:30:03 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 16:31:29 | → | ec_ joins (~ec@gateway/tor-sasl/ec) |
| 16:31:32 | → | abhixec joins (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) |
| 16:31:50 | × | shapr quits (~user@c-69-138-21-57.hsd1.va.comcast.net) (Ping timeout: 260 seconds) |
| 16:32:54 | → | glguy_ joins (x@libera/staff/glguy) |
| 16:34:15 | × | glguy quits (x@libera/staff/glguy) (Read error: Connection reset by peer) |
| 16:34:39 | → | proofofkeags joins (~proofofke@205.209.28.54) |
| 16:34:54 | → | shapr joins (~user@c-69-138-21-57.hsd1.dc.comcast.net) |
| 16:35:00 | → | Erutuon joins (~Erutuon@user/erutuon) |
| 16:36:15 | × | Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer) |
| 16:37:35 | → | Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) |
| 16:37:39 | <monochrom> | "imperator" is better. |
| 16:38:14 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds) |
| 16:39:07 | → | burnsidesLlama joins (~burnsides@dhcp168-018.wadham.ox.ac.uk) |
| 16:41:59 | × | Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer) |
| 16:42:38 | → | Vajb joins (~Vajb@n1xq4ni1adi29tefj-2.v6.elisa-mobile.fi) |
| 16:43:53 | × | burnsidesLlama quits (~burnsides@dhcp168-018.wadham.ox.ac.uk) (Ping timeout: 265 seconds) |
| 16:44:42 | × | MQ-17J quits (~MQ-17J@2607:fb90:1d3a:e28c:515f:1bae:68b2:8409) (Read error: Connection reset by peer) |
| 16:44:59 | → | MQ-17J joins (~MQ-17J@d14-69-206-129.try.wideopenwest.com) |
| 16:48:29 | × | aman quits (~aman@user/aman) (Quit: aman) |
| 16:49:12 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 16:49:25 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 16:51:41 | × | hegstal quits (~hegstal@2a02:c7f:7608:d400:8959:ed5e:30f7:362a) (Remote host closed the connection) |
| 16:52:06 | × | MQ-17J quits (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 265 seconds) |
| 16:53:04 | glguy_ | is now known as glguy |
| 16:54:50 | → | aman joins (~aman@user/aman) |
| 16:56:30 | × | ec_ quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds) |
| 16:56:35 | → | MQ-17J joins (~MQ-17J@d14-69-206-129.try.wideopenwest.com) |
| 16:57:11 | × | sneedsfeed quits (~sneedsfee@rrcs-173-95-122-169.midsouth.biz.rr.com) (Ping timeout: 256 seconds) |
| 16:59:53 | × | hrnz quits (~ulli@vegan.im.it) (Quit: das ist mir zu bld hier; bb) |
| 17:00:37 | → | hrnz joins (~ulli@vegan.im.it) |
| 17:01:19 | × | hrnz quits (~ulli@vegan.im.it) (Client Quit) |
| 17:01:47 | → | hrnz joins (~ulli@vegan.im.it) |
| 17:03:28 | <maerwald> | SPJ working on stack? |
| 17:03:32 | → | ec_ joins (~ec@gateway/tor-sasl/ec) |
| 17:04:03 | → | zebrag joins (~chris@user/zebrag) |
| 17:08:07 | × | Vajb quits (~Vajb@n1xq4ni1adi29tefj-2.v6.elisa-mobile.fi) (Read error: Connection reset by peer) |
| 17:08:48 | → | Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) |
| 17:08:53 | <Hecate> | maerwald: uh? |
| 17:09:02 | <Hecate> | why are you giving me heart attacks like that |
| 17:09:11 | × | hnOsmium0001 quits (uid453710@id-453710.stonehaven.irccloud.com) (Quit: Connection closed for inactivity) |
| 17:09:41 | <monochrom> | I thought gentauro said it first. |
| 17:10:00 | <monochrom> | You didn't have a heart attack back then. Why now? |
| 17:10:00 | → | Pickchea joins (~private@user/pickchea) |
| 17:10:15 | <geekosaur> | I thought FPC had moved stack to community support more or less anyway |
| 17:11:58 | <maerwald> | geekosaur: you mean the issue tracker is dead? yeah |
| 17:14:47 | <maerwald> | I've been commenting on it for the past 2 weeks and fixed several bugs. Generally, there's not response to both issues and PRs, unless e.g. the metadata is broken. |
| 17:16:38 | → | lavaman joins (~lavaman@98.38.249.169) |
| 17:16:54 | → | econo joins (uid147250@user/econo) |
| 17:17:50 | × | tureba quits (~tureba@tureba.org) (Ping timeout: 252 seconds) |
| 17:18:17 | × | nshepperd2 quits (~nshepperd@li364-218.members.linode.com) (Quit: Ping timeout (120 seconds)) |
| 17:18:27 | → | nshepperd2 joins (~nshepperd@li364-218.members.linode.com) |
| 17:18:28 | → | abraham joins (~abraham@191.96.120.55) |
| 17:20:17 | <maerwald> | you may ask why... well, because I'm getting stack bug reports now. |
| 17:21:06 | × | lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 265 seconds) |
| 17:21:40 | × | shapr quits (~user@c-69-138-21-57.hsd1.dc.comcast.net) (Remote host closed the connection) |
| 17:21:53 | <geekosaur> | you can unsubscribe |
| 17:22:26 | <monochrom> | Or we can name you Imperator of Stack so you can act on the bug reports. >:) |
| 17:22:31 | <geekosaur> | auto-subscribing people to new issues is imo one of the weirder github-ism |
| 17:23:10 | <geekosaur> | *s |
| 17:23:19 | <monochrom> | Interesting. But I would think github learned it from Amazon. |
| 17:24:47 | <monochrom> | "You looked at a Logitech keyboard. We think you will be interested in all kinds of RGB gaming peripherals." |
| 17:25:20 | <monochrom> | "You submitted a bug report. We think you will be interested in all kinds of bug reports." |
| 17:25:50 | × | Pickchea quits (~private@user/pickchea) (Ping timeout: 260 seconds) |
| 17:25:56 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 265 seconds) |
| 17:28:26 | → | jangid joins (~user@2405:201:5c06:70a7:747e:edf:1970:bbdb) |
| 17:28:31 | <maerwald> | eh, worst thing is if you work on github hosted projects and can't distinguish the 200+ notifications from useful bug reports on your open source libs anymore |
| 17:32:13 | × | Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Ping timeout: 265 seconds) |
| 17:35:17 | <maerwald> | here... ppl complaining about emails and mailing lists |
| 17:35:26 | <maerwald> | at least there I can have a proper filter |
| 17:35:38 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:c1f1:b01b:5ae7:397c) (Remote host closed the connection) |
| 17:35:48 | <jangid> | The type of '(<)' is a function and type of 'compare' is a function. Then why compare works with backticks in infix format but this doesn't work: 4 `(<)` 5 |
| 17:35:48 | <jangid> | |
| 17:36:17 | <jangid> | what is the rule for backtics? |
| 17:36:53 | → | justsomeguy joins (~justsomeg@user/justsomeguy) |
| 17:37:44 | <dsal> | Functions made up of symbols are infix by default and functions made up of letters are prefix by default. |
| 17:37:52 | <dsal> | > (<) 4 5 |
| 17:37:54 | <lambdabot> | True |
| 17:37:58 | <dsal> | > 4 `compare` 5 |
| 17:38:00 | <lambdabot> | LT |
| 17:38:41 | <dsal> | Backticks allow you to use a prefix function infix and parens let you use an infix function prefix. |
| 17:38:57 | <dsal> | (hand wavy wording) |
| 17:39:23 | <mangoiv> | I think his question is specifically about why `(<)` doesn't work (as the brackets make "<" a prefix function) |
| 17:39:25 | <mangoiv> | m |
| 17:39:40 | <mangoiv> | *their |
| 17:40:53 | <dolio> | Because backticks are for making alphabetical names infix. |
| 17:41:03 | <awpr> | there are backquotes there, but some IRC clients are interpreting them as formatting; I think the question is why backquotes don't undo the effect of parens |
| 17:41:38 | <awpr> | and I think the answer is just that the syntax is defined so that backquotes around alphanumeric-style identifiers create an infix operator |
| 17:41:59 | <awpr> | as opposed to backquotes around "anything that would be a prefix function" |
| 17:42:29 | <awpr> | i.e., that's just how it is |
| 17:42:39 | × | ec_ quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds) |
| 17:44:15 | → | Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) |
| 17:49:05 | × | dhouthoo quits (~dhouthoo@178-117-36-167.access.telenet.be) (Quit: WeeChat 3.2) |
| 17:49:37 | × | favonia quits (~favonia@user/favonia) (Ping timeout: 252 seconds) |
| 17:49:44 | → | ec_ joins (~ec@gateway/tor-sasl/ec) |
| 17:50:03 | <jangid> | yes, I want to why backticks doesn't under the effect of parens. |
| 17:50:21 | <jangid> | I mean doesn't undo the effect of parens |
| 17:50:49 | <awpr> | that's just how the grammar is defined. (<) is an expression but not an identifier, but backquotes turn identifiers into infix operators |
| 17:51:41 | <jangid> | but calling :t with (<) shows it as a function |
| 17:51:53 | <awpr> | it sure is. but it's not an identifier |
| 17:51:59 | <mangoiv> | well, it is a function in any case. |
| 17:52:04 | <awpr> | this is about the Haskell syntax, not the type system |
| 17:52:31 | <jangid> | hmm, I think I am beginning to understand. |
| 17:53:50 | <jangid> | everything is function if we check types :t 5 reports 5 :: Num p => p |
| 17:54:40 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:c1f1:b01b:5ae7:397c) |
| 17:54:46 | <dminuoso> | It's not a function. |
| 17:54:58 | <iqubic> | No actually, that's just a single value. |
| 17:55:14 | <awpr> | it's got nothing to do with whether it's a function, you could just as well do "let x = True in 2 `x` 2". it'd be a type error, but still parsed as an infix operator |
| 17:55:23 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 17:55:32 | <awpr> | https://gitlab.haskell.org/ghc/ghc/-/blob/master/compiler/GHC/Parser.y#L3656 is where the grammar describes the backquote syntax; it specifically wants a "varid" inside the backquotes, not an expression |
| 17:55:35 | <dminuoso> | While, in the implementation, that might be compiled into being parametrized over a dictionary, that's an implementation detail and might not even happen. |
| 17:56:03 | <iqubic> | But actually, the way that number literals work is that haskell turns your 5 into "fromIntergral 5" |
| 17:56:29 | <awpr> | a "varid" is the alphanumeric-style identifier I was talking about earlier, basically a name made of text rather than symbols |
| 17:57:13 | <dolio> | Just like you're not allowed to write: (`isInfixOf`) |
| 17:57:25 | × | kuribas quits (~user@ptr-25vy0i7s9yl7nzqhecr.18120a2.ip6.access.telenet.be) (Remote host closed the connection) |
| 17:58:05 | <jangid> | dolio: exactly. that's how the grammar is. |
| 17:58:06 | → | kayprish joins (~kayprish@cable-188-2-153-140.dynamic.sbb.rs) |
| 17:58:18 | <jangid> | thnks for help, friends |
| 17:58:48 | <awpr> | I guess to get a bit more into "why", if you wanted backquotes to work on parenthesized operator names, you might define them as containing an expression rather than a varid. but then you'd have a problem: backquotes aren't matched pairs, so there's an ambiguity where the ending backquote could get parsed as another nested backquote operator. incoming GHC proposal: add guillemets as an operator delimiter that contains expressions |
| 17:58:48 | <awpr> | :) |
| 17:58:49 | <mangoiv> | iqubic: really? That's interesting, why does it parse it as an int in the first place? It could just parse it as "some number" as that's what it's kept as anyways? |
| 17:59:29 | <awpr> | iqubic: unless you're using https://hackage.haskell.org/package/dependent-literals-plugin :P |
| 17:59:29 | <iqubic> | :t fromIntegral |
| 17:59:30 | <lambdabot> | (Integral a, Num b) => a -> b |
| 17:59:49 | → | chisui joins (~chisui@200116b868aa4700d8770583f0c423d2.dip.versatel-1u1.de) |
| 18:00:22 | × | brandonh quits (brandonh@gateway/vpn/protonvpn/brandonh) (Ping timeout: 260 seconds) |
| 18:01:06 | <iqubic> | It's not actually parsing it as an Int. |
| 18:02:29 | <mangoiv> | Can you elaborate? Cause I think I didn't understand yet. If it isn't parsed to an Int, why does it have to use fromIntegral then? |
| 18:04:32 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 18:04:45 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 18:05:00 | <iqubic> | I'm both surprised and pleased that DataKinds and NumericUnderscores work well together, letting me use "2_147_483_647" as a thing of kind Nat. |
| 18:05:09 | → | beka joins (~beka@104.193.170.240) |
| 18:05:32 | × | abraham quits (~abraham@191.96.120.55) (Quit: Textual IRC Client: www.textualapp.com) |
| 18:05:36 | → | System123 joins (~System123@2c0f:f4c0:2202:6b94:9580:2b3e:eee5:e946) |
| 18:06:18 | <justsomeguy> | I have a linux filepath, and want to find out the UID or user name of the account that owns it. What module has functions for stuff like that? |
| 18:07:43 | <koala_man> | unix presumably. System.Posix.Files |
| 18:07:43 | <justsomeguy> | (I tried searching for getUser, getOwner, and a few different type signature on Hoogle but didn't come up with anything useful.) |
| 18:08:02 | × | enoq quits (~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7) (Quit: enoq) |
| 18:08:02 | <koala_man> | fileOwner :: FileStatus -> UserID |
| 18:08:14 | <awpr> | mangoiv: from GHC's perspective the literal value is an Integer, and the interpretation of that Integer as whatever particular numeric type is up to Haskell library code; that way libraries can define custom numeric types that work with integral literals by adding their own Num instance, without needing to modify the compiler to know about it. `fromInteger` is the hook that GHC uses to talk to the library side, so it turns |
| 18:08:14 | <awpr> | source-level literals `42` into `fromInteger 42`, which ends up calling whichever implementation is appropriate, including custom numeric types |
| 18:08:28 | × | mangoiv quits (~MangoIV@193.175.5.172) (Quit: WeeChat 3.2) |
| 18:08:45 | → | mangoiv joins (~MangoIV@193.175.5.172) |
| 18:08:54 | → | favonia joins (~favonia@user/favonia) |
| 18:09:15 | <awpr> | most of the time that gets optimized into something like `I# 42#` by inlining and simplifying and such, so it's almost like the compiler has built-in knowledge of every custom numeric type that will ever exist |
| 18:09:25 | × | abhixec quits (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) (Ping timeout: 252 seconds) |
| 18:10:10 | × | System123 quits (~System123@2c0f:f4c0:2202:6b94:9580:2b3e:eee5:e946) (Ping timeout: 260 seconds) |
| 18:10:20 | × | mangoiv quits (~MangoIV@193.175.5.172) (Client Quit) |
| 18:10:32 | → | mangoiv joins (~MangoIV@193.175.5.172) |
| 18:11:55 | <justsomeguy> | This seems to work in ghci ... s <- getFileStatus "testdir"; print $ fileOwner s |
| 18:12:25 | <justsomeguy> | Thanks for pointing me in the right direction, koala_man |
| 18:13:33 | <justsomeguy> | I should probably just do a search for likely module names from packages included with ghc and base next time. |
| 18:13:57 | <jangid> | (Integral a, Num b) => a -> b i.e. fromIntegral parses a as integer and converts it into more generic number so that it is easy to put it in expressions with Floating. |
| 18:14:59 | <awpr> | careful not to mix up fromIntegral and fromInteger -- `fromIntegral = fromInteger . toInteger` |
| 18:15:16 | <awpr> | :t (fromInteger, toInteger, fromIntegral) |
| 18:15:17 | <lambdabot> | (Integral a1, Integral a2, Num a3, Num b) => (Integer -> a3, a1 -> Integer, a2 -> b) |
| 18:15:36 | <awpr> | oof, that formatting is less useful than I had hoped |
| 18:16:51 | <awpr> | anyway fromInteger is the one GHC uses internally for integral literals, and fromIntegral is the one you'd usually use as a Haskell user for converting "whatever inty type" to "whatever numeric type" |
| 18:17:07 | <monochrom> | I# 42# means that the compiler knows it's Int. |
| 18:17:42 | <awpr> | yep, I'd contend that most of the time you use a literal it's for a statically known type |
| 18:19:29 | → | brandonh joins (brandonh@gateway/vpn/protonvpn/brandonh) |
| 18:21:00 | × | ec_ quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds) |
| 18:24:13 | <mangoiv> | Thanks awpr for the for the extensive answer! |
| 18:24:38 | × | justsomeguy quits (~justsomeg@user/justsomeguy) (Ping timeout: 260 seconds) |
| 18:26:19 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 18:26:19 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
| 18:26:19 | → | wroathe joins (~wroathe@user/wroathe) |
| 18:27:50 | → | ec_ joins (~ec@gateway/tor-sasl/ec) |
| 18:28:17 | <_bin> | What's the best way to retry a GET with wreq until it succeeds if I hit a 5xx error or similar? |
| 18:28:19 | → | lavaman joins (~lavaman@98.38.249.169) |
| 18:29:46 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds) |
| 18:30:23 | <iqubic> | How does fromInteger work for Word16? Does it just take the 16 lowest bits of the given Integer? |
| 18:30:53 | → | hnOsmium0001 joins (uid453710@id-453710.stonehaven.irccloud.com) |
| 18:31:16 | → | asivitz joins (uid178348@id-178348.tinside.irccloud.com) |
| 18:31:27 | <awpr> | generally fromInteger overflows, or sometimes throws. I don't know of any that saturate |
| 18:31:38 | <awpr> | > fromInteger 65537 :: Word16 |
| 18:31:40 | <lambdabot> | 1 |
| 18:32:06 | <awpr> | but GHC has warnings for out-of-range literals for a few types it has actual built-in knowledge of |
| 18:32:19 | <awpr> | > 65537 :: Word16 |
| 18:32:20 | <lambdabot> | 1 |
| 18:32:43 | <awpr> | hmm, lambdabot doesn't show them, but it's `-Woverflowed-literals` |
| 18:33:05 | → | justsomeguy joins (~justsomeg@user/justsomeguy) |
| 18:33:09 | <iqubic> | What I want is a way to convert an Integer to a Word16 by just taking the lowest 16 bits. How can I do that? |
| 18:33:36 | <awpr> | that should have the same effect as overflowing, i.e. fromInteger does that |
| 18:34:00 | <iqubic> | Cool! |
| 18:34:46 | × | ezzieyguywuf quits (~Unknown@user/ezzieyguywuf) (Ping timeout: 250 seconds) |
| 18:35:59 | × | jangid quits (~user@2405:201:5c06:70a7:747e:edf:1970:bbdb) (Quit: day over) |
| 18:37:53 | → | roboguy_ joins (~roboguy_@cpe-98-156-4-161.kc.res.rr.com) |
| 18:38:01 | → | vicfred joins (~vicfred@user/vicfred) |
| 18:39:25 | × | dyeplexer quits (~dyeplexer@user/dyeplexer) (Remote host closed the connection) |
| 18:41:20 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 260 seconds) |
| 18:41:25 | → | ephemient joins (uid407513@id-407513.lymington.irccloud.com) |
| 18:42:20 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:c1f1:b01b:5ae7:397c) (Remote host closed the connection) |
| 18:44:58 | × | lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection) |
| 18:47:06 | × | kstuart quits (~kstuart@85.203.34.2) (Remote host closed the connection) |
| 18:47:29 | → | alx741 joins (~alx741@186.178.109.214) |
| 18:49:22 | → | dschrempf joins (~dominik@070-207.dynamic.dsl.fonira.net) |
| 18:49:24 | → | mmohammadi9812 joins (~Mohammad@ip232.ip-51-222-214.net) |
| 18:56:22 | → | abraham joins (~abraham@143.244.185.86) |
| 18:57:11 | × | max22- quits (~maxime@2a01cb0883359800c86fdddfb8d9c63e.ipv6.abo.wanadoo.fr) (Quit: Leaving) |
| 18:59:24 | × | geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection) |
| 19:00:02 | → | thyriaen joins (~thyriaen@x4db77b69.dyn.telefonica.de) |
| 19:01:14 | × | alx741 quits (~alx741@186.178.109.214) (Quit: alx741) |
| 19:01:40 | → | geekosaur joins (~geekosaur@xmonad/geekosaur) |
| 19:03:56 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 19:05:45 | × | aman quits (~aman@user/aman) (Quit: aman) |
| 19:07:09 | × | ec_ quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds) |
| 19:08:53 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds) |
| 19:11:26 | × | mmohammadi9812 quits (~Mohammad@ip232.ip-51-222-214.net) (Killed (NickServ (GHOST command used by mohammadi9812m!~Mohammad@2.178.201.78))) |
| 19:11:39 | <_bin> | To clarify the above, I am attempting to make a number of requests and sometimes receive errors (timeouts, 5xx, etc.) I'd like to simply repeat the request indefinitely until I get a successful response; how should I go about doing this? |
| 19:11:46 | → | mmohammadi9812 joins (~Mohammad@2.178.201.78) |
| 19:12:16 | <maerwald> | _bin: there's a retry strategies thing |
| 19:12:18 | <maerwald> | sec |
| 19:13:02 | <maerwald> | _bin: https://hackage.haskell.org/package/retry-0.9.0.0/docs/Control-Retry.html |
| 19:13:10 | → | _ht joins (~quassel@82-169-194-8.biz.kpn.net) |
| 19:13:10 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:c1f1:b01b:5ae7:397c) |
| 19:13:11 | → | System123 joins (~System123@165-73-115-78.ip.afrihost.capetown) |
| 19:13:20 | × | brandonh quits (brandonh@gateway/vpn/protonvpn/brandonh) (Quit: brandonh) |
| 19:13:30 | <maerwald> | I use fullJitterBackoff http://www.awsarchitectureblog.com/2015/03/backoff.html |
| 19:14:02 | → | ec_ joins (~ec@gateway/tor-sasl/ec) |
| 19:14:21 | × | phma quits (~phma@host-67-44-209-67.hnremote.net) (Read error: Connection reset by peer) |
| 19:15:12 | → | phma joins (~phma@host-67-44-208-90.hnremote.net) |
| 19:15:25 | → | max22- joins (~maxime@2a01cb08833598004190beef1e8cf3bf.ipv6.abo.wanadoo.fr) |
| 19:19:58 | → | abhixec joins (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) |
| 19:20:28 | <_bin> | maerwald: Thanks, this looks promising. |
| 19:24:10 | <iqubic> | @pl \m -> m `mod` 5 == 0 |
| 19:24:10 | <lambdabot> | (0 ==) . (`mod` 5) |
| 19:25:20 | → | Guest|41 joins (~Guest|41@129.104.98.71) |
| 19:26:30 | → | Axma21295 joins (~Axman6@user/axman6) |
| 19:28:07 | × | Axman6 quits (~Axman6@user/axman6) (Ping timeout: 260 seconds) |
| 19:28:19 | → | System12_ joins (~System123@ec2-52-61-197-79.us-gov-west-1.compute.amazonaws.com) |
| 19:30:22 | <iqubic> | I think I'll just use the former version. |
| 19:30:37 | <teddyc> | lol |
| 19:31:21 | <monochrom> | This one is not too bad. |
| 19:31:36 | × | System123 quits (~System123@165-73-115-78.ip.afrihost.capetown) (Ping timeout: 265 seconds) |
| 19:31:50 | <monochrom> | But by the time you get "(g . ) . (. f)" then yeah, use a pointful lambda. |
| 19:32:11 | <maerwald> | :t (.).(.) |
| 19:32:12 | <lambdabot> | (b -> c) -> (a1 -> a2 -> b) -> a1 -> a2 -> c |
| 19:32:44 | <monochrom> | Unfortunately, playing with category theory too much does lead to "(g . ) . (. f)" |
| 19:33:40 | <awpr> | dimap @(->)? |
| 19:34:20 | <iqubic> | monochrom: I'm actually just using this: "divisible divisor = filter (\n -> n `mod` divisor == 0)" I take a list of numbers and return the same list, but with only the values divisible by divisor. |
| 19:34:58 | <monochrom> | Mathematicians think they have mitigated it with "g_{*} . f^{*}". |
| 19:34:59 | <iqubic> | I'm not sure that making the lambda into a pointfree version will be clearer. |
| 19:35:29 | <monochrom> | That only caused the bigger problem that no one remembers whether g_{*} means (g .) or (. g). |
| 19:35:45 | <monochrom> | In fact, I don't either. I might have mixed them up too. |
| 19:35:53 | → | tfeb joins (~tfb@host86-128-238-44.range86-128.btcentralplus.com) |
| 19:36:02 | <iqubic> | monochrom: I don't know which it is and I don't care. |
| 19:36:20 | <iqubic> | Either way (g .) and (. g) are weird to think about. |
| 19:36:27 | → | drguildo joins (~sjm@user/drguildo) |
| 19:36:32 | <roboguy_> | monochrom: IIRC, different sources have different conventions on those names, to make it even more confusing |
| 19:37:16 | <monochrom> | iqubic: I was not talking to you. |
| 19:37:17 | × | neo1 quits (~neo3@cpe-292712.ip.primehome.com) (Read error: Connection reset by peer) |
| 19:37:25 | <iqubic> | Ah. I'm sorry. |
| 19:37:43 | <monochrom> | I don't care about your divisible either. |
| 19:37:46 | <justsomeguy> | If I want to find out what a file handle is in depth, what it's structure is and what things it keeps track of, where would I read about it? Should I be consulting the C stdlib documentation? |
| 19:38:04 | → | neo1 joins (~neo3@cpe-292712.ip.primehome.com) |
| 19:38:35 | × | oxide quits (~lambda@user/oxide) (Quit: oxide) |
| 19:38:52 | <justsomeguy> | System.IO talks about file handles a little, but it seems like a wrapper around the linux syscalls. |
| 19:39:09 | <monochrom> | Perhaps every time you say something, I should reply "I don't know it and I don't care". Since you seem to like to do the same. |
| 19:39:46 | ← | drguildo parts (~sjm@user/drguildo) () |
| 19:40:22 | <maerwald> | my standard answer to support requests |
| 19:40:50 | × | abhixec quits (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) (Ping timeout: 260 seconds) |
| 19:42:10 | <monochrom> | justsomeguy: I think GHC.IO.* is a good start. |
| 19:42:23 | <geekosaur> | justsomeguy, there's some documentation in iirc GHC.IO.Handle |
| 19:42:26 | → | abhixec joins (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) |
| 19:43:24 | <monochrom> | You may also need the backdrop of https://github.com/takenobu-hs/haskell-ghc-illustrated |
| 19:43:27 | × | mniip quits (mniip@libera/staff/mniip) (Ping timeout: 600 seconds) |
| 19:43:58 | × | mei quits (~mei@user/mei) (Ping timeout: 260 seconds) |
| 19:44:32 | <maerwald> | GHC Handles are something entirely different though, no? |
| 19:44:36 | → | mniip joins (mniip@libera/staff/mniip) |
| 19:45:05 | <maerwald> | I mean, compared to File descriptor etc |
| 19:45:33 | <monochrom> | since every time I call getChar (say), it does not translate to a simple blocking FFI call, even disregarding buffering. |
| 19:45:39 | <maerwald> | can get GCed etc |
| 19:45:51 | × | abhixec quits (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) (Client Quit) |
| 19:46:08 | <monochrom> | Instead it translates to green-thread rescheduling, I/O manager thingies, etc. |
| 19:46:59 | <monochrom> | But no "descriptor" was mentioned. |
| 19:47:21 | <maerwald> | yeah, Handle is basically something low-level that isn't low-level |
| 19:50:12 | <roboguy_> | GHC Handles do look a bit different than file descriptors, based on the implementation. I always assumed it was a newtype around either an Int or a FILE pointer, but I guess not! |
| 19:50:28 | × | MQ-17J quits (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Remote host closed the connection) |
| 19:50:43 | → | MQ-17J joins (~MQ-17J@d14-69-206-129.try.wideopenwest.com) |
| 19:51:58 | <justsomeguy> | GHC.IO.* is pretty helpful so far. File handles seem internally complex, but I probably only have to worry about the operations I do on them and how to open/close them. |
| 19:52:23 | <justsomeguy> | At least that's the impression I get so far. |
| 19:52:24 | × | tfeb quits (~tfb@host86-128-238-44.range86-128.btcentralplus.com) (Quit: died) |
| 19:53:18 | × | ec_ quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds) |
| 19:54:02 | × | justsomeguy quits (~justsomeg@user/justsomeguy) (Quit: WeeChat 3.2) |
| 19:54:51 | × | kayprish quits (~kayprish@cable-188-2-153-140.dynamic.sbb.rs) (Read error: Connection reset by peer) |
| 19:56:20 | <Drew[m]> | Every `Handle` contains a `Handle__` which contains a `haDevice` field of an existentially qualified type variable which must be of the typeclass `IODevice` which provides the interface for "I/O operations required for implementing a Handle". There is one instance: `FD` |
| 19:56:39 | <Drew[m]> | https://hackage.haskell.org/package/base-4.15.0.0/docs/GHC-IO-FD.html#t:FD |
| 19:56:56 | <Drew[m]> | There's the file descriptor |
| 19:57:14 | <geekosaur> | a lot of the complexity is being compatible with both windows and posix |
| 19:57:52 | <geekosaur> | since for example a unix socket can be wrapped by a normal filehandle but a windows one can't |
| 19:58:13 | × | dschrempf quits (~dominik@070-207.dynamic.dsl.fonira.net) (Quit: WeeChat 3.2.1) |
| 19:58:20 | <geekosaur> | so it has some extra overhead to be able to handle a winsock handle |
| 20:00:15 | → | ec_ joins (~ec@gateway/tor-sasl/ec) |
| 20:01:23 | → | acidjnk_new joins (~acidjnk@p200300d0c7203080b5211f3083e4cecd.dip0.t-ipconnect.de) |
| 20:04:06 | → | unit73e joins (~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291) |
| 20:04:29 | × | mikoto-chan quits (~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be) (Ping timeout: 252 seconds) |
| 20:05:04 | × | juhp quits (~juhp@128.106.188.220) (Ping timeout: 252 seconds) |
| 20:06:30 | → | mikoto-chan joins (~mikoto-ch@83.137.2.242) |
| 20:06:34 | → | sneedsfeed joins (~sneedsfee@rrcs-173-95-122-169.midsouth.biz.rr.com) |
| 20:06:43 | → | juhp joins (~juhp@128.106.188.220) |
| 20:07:32 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:c1f1:b01b:5ae7:397c) (Remote host closed the connection) |
| 20:12:07 | → | acidjnk joins (~acidjnk@p200300d0c7203080c0b3f2662aa27c56.dip0.t-ipconnect.de) |
| 20:12:12 | × | mniip quits (mniip@libera/staff/mniip) (Ping timeout: 619 seconds) |
| 20:14:15 | → | mniip joins (mniip@libera/staff/mniip) |
| 20:14:52 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 20:15:11 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 20:15:31 | × | acidjnk_new quits (~acidjnk@p200300d0c7203080b5211f3083e4cecd.dip0.t-ipconnect.de) (Ping timeout: 252 seconds) |
| 20:16:34 | × | unit73e quits (~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291) (Remote host closed the connection) |
| 20:16:59 | × | _ht quits (~quassel@82-169-194-8.biz.kpn.net) (Remote host closed the connection) |
| 20:17:37 | → | Pickchea joins (~private@user/pickchea) |
| 20:19:24 | → | unit73e joins (~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291) |
| 20:19:54 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 260 seconds) |
| 20:21:49 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 20:21:51 | × | haykam1 quits (~haykam@static.100.2.21.65.clients.your-server.de) (Remote host closed the connection) |
| 20:22:05 | → | haykam1 joins (~haykam@static.100.2.21.65.clients.your-server.de) |
| 20:22:58 | × | tlaxkit quits (~hexchat@170.253.47.137) (Remote host closed the connection) |
| 20:23:12 | × | ec_ quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds) |
| 20:23:22 | → | tlaxkit joins (~hexchat@170.253.47.137) |
| 20:24:37 | × | tlaxkit quits (~hexchat@170.253.47.137) (Remote host closed the connection) |
| 20:25:02 | <lechner> | Hi, does servant allow dynamic APIs? It would be like /name/{database}, where some URLs are redirected and would them presumably have a different type. Any other solution to dynamic redirects is acceptable, too. Thanks! |
| 20:25:05 | <_bin> | Opinions on SQLite packages? sqlite-simple appears to be the best-maintained, but I haven't used it before. |
| 20:25:51 | × | fendor quits (~fendor@77.119.194.245.wireless.dyn.drei.com) (Remote host closed the connection) |
| 20:27:52 | × | System12_ quits (~System123@ec2-52-61-197-79.us-gov-west-1.compute.amazonaws.com) (Quit: Leaving...) |
| 20:27:55 | → | sm2n joins (~sm2n@user/sm2n) |
| 20:28:50 | → | fendor joins (~fendor@77.119.194.245.wireless.dyn.drei.com) |
| 20:29:01 | → | brandonh joins (brandonh@gateway/vpn/protonvpn/brandonh) |
| 20:29:35 | <maerwald> | anything, as long as it's not persistent |
| 20:30:33 | → | ec_ joins (~ec@gateway/tor-sasl/ec) |
| 20:31:09 | <_bin> | maerwald: Huh? |
| 20:31:24 | × | haykam1 quits (~haykam@static.100.2.21.65.clients.your-server.de) (Remote host closed the connection) |
| 20:31:37 | → | haykam1 joins (~haykam@static.100.2.21.65.clients.your-server.de) |
| 20:31:45 | <maerwald> | @hackage persistent |
| 20:31:45 | <lambdabot> | https://hackage.haskell.org/package/persistent |
| 20:32:11 | <Rembane> | _bin: Pick the simplest one possible, and get something working. |
| 20:32:22 | → | d34df00d joins (~d34df00d@2600:1700:8c60:3a10::3e) |
| 20:32:26 | <Rembane> | _bin: sqlite-simple is probably the simplest one possible. |
| 20:32:44 | → | shapr joins (~user@pool-100-36-247-68.washdc.fios.verizon.net) |
| 20:33:23 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:c1f1:b01b:5ae7:397c) |
| 20:33:38 | <d34df00d> | Hi folks. |
| 20:33:54 | <_bin> | maerwald: Oh, I thought you meant as long as the database didn't persist and was a bit confused. |
| 20:33:54 | <d34df00d> | What's the right channel about hls? I have a (user) question about whether it supports something. |
| 20:33:59 | <_bin> | Rembane: Sounds good, thanks. |
| 20:34:06 | <unit73e> | @maerwald, what's the problem with persistent? or advantage? I've never used it, just curious. |
| 20:34:06 | <lambdabot> | Unknown command, try @list |
| 20:34:11 | <unit73e> | maerwald, what's the problem with persistent? or advantage? I've never used it, just curious. |
| 20:34:34 | <unit73e> | I always forget that @ thing here is different.. |
| 20:35:07 | <geekosaur> | recent versions of persistent are kinda broken, as I understand it |
| 20:35:25 | <geekosaur> | it also doesn't deliver on its documented promises? |
| 20:35:26 | <maerwald> | it's just awful TH and there are better libraries if you really need handholding |
| 20:36:17 | × | Guest|41 quits (~Guest|41@129.104.98.71) (Quit: Ping timeout (120 seconds)) |
| 20:36:24 | <unit73e> | ok. so it's kind of like most serialization abstractions in other languages that end up being more of a nuisanse than an advantage |
| 20:36:38 | <unit73e> | like JPA in Java |
| 20:37:22 | <Rembane> | It's really hard getting it right. For some reason... |
| 20:38:12 | <unit73e> | yeah just like JPA. JPA does whatever it wants with SQL and lazy/eager transactions when it was supposed to deal with all the problems of ORM translation to SQL. |
| 20:38:41 | <unit73e> | so everyone ends up having to debug what JPA is doing |
| 20:40:40 | × | brandonh quits (brandonh@gateway/vpn/protonvpn/brandonh) (Ping timeout: 252 seconds) |
| 20:42:43 | → | brandonh joins (brandonh@gateway/vpn/protonvpn/brandonh) |
| 20:45:07 | <dsal> | _bin: sqlite-simple is pretty great. Has the features and stuff. |
| 20:47:33 | × | mangoiv quits (~MangoIV@193.175.5.172) (Quit: WeeChat 3.2) |
| 20:47:44 | → | mangoiv joins (~MangoIV@193.175.5.172) |
| 20:49:25 | → | nicbk joins (~nicbk@user/nicbk) |
| 20:53:32 | <roboguy_> | geekosaur: ah, that makes sense |
| 20:53:41 | <roboguy_> | (about file handles) |
| 20:55:12 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 20:55:25 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 20:55:43 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Client Quit) |
| 20:55:57 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 20:55:58 | <geekosaur> | d34df00d, #haskell-language-server I think |
| 20:56:54 | → | Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915) |
| 20:58:07 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 265 seconds) |
| 20:58:23 | × | favonia quits (~favonia@user/favonia) (Ping timeout: 252 seconds) |
| 20:59:31 | Lord_of_Life_ | is now known as Lord_of_Life |
| 21:01:11 | <unit73e> | btw I read a bit about Rust and traits are kind of like type classes but not sure how similar |
| 21:01:23 | <unit73e> | seems to be using a system more keen to scala than haskell |
| 21:01:39 | <unit73e> | or swift, has the same kind of type system |
| 21:01:43 | <monochrom> | Yeah. |
| 21:02:13 | <dolio> | Are Rust traits like Scala traits, or something else? |
| 21:02:59 | <unit73e> | I'm not sure. I know kinds are hidden in Rust so I can't tell. |
| 21:03:57 | <awpr> | AIUI traits are almost exactly typeclasses, except that rustc will always monomorphize them (like C++ templates) whereas GHC is willing to pass around pointers to instance records if necessary |
| 21:04:43 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 21:06:10 | <dolio> | Okay, so they're actually like Scala implicits. |
| 21:06:30 | <d34df00d> | geekosaur: thanks! |
| 21:07:17 | <unit73e> | looks like it's like scala implicits, yes, but in Java there's type erasure |
| 21:07:28 | <unit73e> | or JVM to be precise |
| 21:07:29 | <awpr> | I don't see much similarity between traits/typeclasses and implicit params. I guess GHC's implementation of typeclass resolution is a bit like filling an implicit param based on the type? |
| 21:07:58 | <awpr> | leaving aside the fact that Haskell ImplicitParams are a magical typeclass, lol |
| 21:08:03 | × | ec_ quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds) |
| 21:08:09 | → | acidjnk_new joins (~acidjnk@p5487d0ba.dip0.t-ipconnect.de) |
| 21:08:31 | × | brandonh quits (brandonh@gateway/vpn/protonvpn/brandonh) (Quit: brandonh) |
| 21:08:50 | × | mikoto-chan quits (~mikoto-ch@83.137.2.242) (Ping timeout: 252 seconds) |
| 21:10:53 | → | mikoto-chan joins (~mikoto-ch@83.137.2.241) |
| 21:11:37 | × | acidjnk quits (~acidjnk@p200300d0c7203080c0b3f2662aa27c56.dip0.t-ipconnect.de) (Ping timeout: 252 seconds) |
| 21:12:35 | × | mikoto-chan quits (~mikoto-ch@83.137.2.241) (Client Quit) |
| 21:13:17 | → | neo2 joins (~neo3@cpe-292712.ip.primehome.com) |
| 21:13:22 | <unit73e> | I guess it's similar more on implicit functions, where you add functionality. |
| 21:13:35 | <unit73e> | the similarities are much more clear in rust vs haskell |
| 21:14:02 | <unit73e> | because scala has a complex mixed bag of everything |
| 21:14:36 | <unit73e> | so rustc monomorphizes everything but doesn't that end up being more limited? that's the part I'm wondering |
| 21:14:50 | → | ec_ joins (~ec@gateway/tor-sasl/ec) |
| 21:15:05 | <awpr> | yeah, I don't know enough Scala to be of much use there. just a moderate level of Rust knowledge and plenty of Haskell |
| 21:15:18 | → | shriekingnoise_ joins (~shrieking@186.137.144.80) |
| 21:15:48 | <awpr> | Rust does have a trait-based dynamic dispatch feature, but it's more like C++ objects with vtables rather than Haskell's polymorphic code with instance records |
| 21:15:49 | × | thyriaen quits (~thyriaen@x4db77b69.dyn.telefonica.de) (Quit: Leaving) |
| 21:15:49 | → | mikoto-c1 joins (~mikoto-ch@83.137.2.241) |
| 21:15:49 | → | proofofkeags_ joins (~proofofke@205.209.28.54) |
| 21:15:49 | → | yaroot9 joins (~yaroot@125.30.3.6) |
| 21:15:49 | × | proofofkeags quits (~proofofke@205.209.28.54) (Read error: Connection reset by peer) |
| 21:15:49 | × | shriekingnoise quits (~shrieking@186.137.144.80) (Read error: Connection reset by peer) |
| 21:16:09 | <unit73e> | to be it's just kind of interesting. haskell syntax is much more cleaner than rust for sure and doesn't allow mixed paradigms that end up resulting in newbies making not so great code. |
| 21:16:22 | × | neo1 quits (~neo3@cpe-292712.ip.primehome.com) (Ping timeout: 260 seconds) |
| 21:16:22 | × | cheater quits (~Username@user/cheater) (Ping timeout: 260 seconds) |
| 21:16:22 | × | yaroot quits (~yaroot@6.3.30.125.dy.iij4u.or.jp) (Ping timeout: 260 seconds) |
| 21:16:22 | yaroot9 | is now known as yaroot |
| 21:16:42 | → | cheater joins (~Username@user/cheater) |
| 21:16:45 | <awpr> | to be more specific Rust monomorphizes all generic functions, and in the process of doing that, it resolves all the trait dispatch |
| 21:17:35 | <awpr> | if that becomes a limitation, there's "trait objects", which take a trait and turn it into a type of objects with vtables |
| 21:17:50 | <awpr> | in which case the function isn't generic, it just takes a trait object parameter |
| 21:18:12 | → | favonia joins (~favonia@user/favonia) |
| 21:19:59 | <unit73e> | at least C++ finally has competition |
| 21:20:06 | <unit73e> | in pratice |
| 21:20:19 | <unit73e> | not just in theory |
| 21:21:06 | <awpr> | yeah, Rust is a huge leap forward IMO. it feels like Haskell's type system with C++' capacity for manual control |
| 21:21:35 | × | ubert quits (~Thunderbi@178.115.42.105.wireless.dyn.drei.com) (Quit: ubert) |
| 21:21:36 | <maerwald[m]> | Rust has HKT? |
| 21:21:52 | → | ubert joins (~Thunderbi@178.115.42.105.wireless.dyn.drei.com) |
| 21:22:03 | <Rembane> | maerwald[m]: Nope, they've carefully avoided adding them for many years now. |
| 21:22:19 | <awpr> | Rust has all kinds of Haskell features, but they're always very careful not to call anything by its Haskell name when adding it to Rust |
| 21:22:42 | <maerwald[m]> | So it's barely Haskell type system, except for ADTs |
| 21:23:31 | <awpr> | parametric-ish polymorphism, typeclasses, ADTs, it's pretty similar to basic level Haskell |
| 21:23:53 | × | jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection) |
| 21:23:56 | <roboguy_> | Rembane: is there a resource that gives info on why they've avoided them? I've never used Rust, but I've heard about that and I've always wondered |
| 21:24:04 | <maerwald[m]> | Monads are basic, are they not? |
| 21:24:28 | <unit73e> | I'd say so but in the functional programming world. in imperative you can cheat |
| 21:24:58 | <unit73e> | that's the part I don't like in Rust |
| 21:25:09 | <unit73e> | but than it would be called Haskell |
| 21:25:41 | <awpr> | sure, I guess a more reasonable phrasing would be that it feels a lot more comfortable coming from Haskell than C++ does |
| 21:25:42 | <roboguy_> | monads don't have the best PR in some circles, which is pretty unfortunate |
| 21:26:03 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 21:26:18 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 21:26:38 | × | ubert quits (~Thunderbi@178.115.42.105.wireless.dyn.drei.com) (Ping timeout: 265 seconds) |
| 21:26:50 | <unit73e> | in my crappy anedoctal experience newbies always try to somehow pretend monads are like the ; of purely functional programming and that's part of the bad PR |
| 21:26:56 | <Rembane> | roboguy_: They went for some other design choices that gave them almost the same power but without letting loose the powers of HKTs, there were some years ago now that I looked into it, so I don't remember. |
| 21:27:30 | → | jpds joins (~jpds@gateway/tor-sasl/jpds) |
| 21:28:06 | × | MQ-17J quits (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 265 seconds) |
| 21:28:11 | × | chisui quits (~chisui@200116b868aa4700d8770583f0c423d2.dip.versatel-1u1.de) (Quit: Client closed) |
| 21:28:14 | → | jess joins (~jess@libera/staff/jess) |
| 21:28:21 | × | takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection) |
| 21:28:32 | <roboguy_> | it really feels like there should be a good way to improve the situation with monad PR, but I'm not quite sure how. kinda frustrating! |
| 21:29:09 | <unit73e> | I just used monads until I understood how it works lol |
| 21:29:12 | <sm> | > I always forget that @ thing here is different.. |
| 21:29:12 | <sm> | same here.. it would be nice if lambdabot used ! instead |
| 21:29:13 | <lambdabot> | <hint>:1:17: error: |
| 21:29:13 | <lambdabot> | Pattern syntax in expression context: that@thing |
| 21:29:13 | <lambdabot> | Did you mean to enable TypeApplications? |
| 21:29:25 | <awpr> | lol |
| 21:29:38 | <sm> | bot wins again :) |
| 21:30:02 | <geekosaur> | lb actually has ? as an alternative |
| 21:30:18 | <sm> | @nick is something that is just going to keep happening for ever |
| 21:30:28 | <geekosaur> | but I don't think you can disable @ |
| 21:31:12 | <yushyin> | it's a good reminder that this is IRC |
| 21:31:16 | <unit73e> | I'd just leave it. It's not annoying enough. It's like the "return" of IRC for people that come from C like languages. |
| 21:31:50 | <unit73e> | you learn in 5 min that it's not the same |
| 21:32:20 | <sm> | more people will be viewing this channel from matrix than IRC . Already are, perhaps |
| 21:32:20 | <geekosaur> | eh, I see folks who ought to be used to IRC make the same mistake |
| 21:32:31 | <sm> | I do it regularly and I'm trying not to |
| 21:32:33 | <geekosaur> | often folks who spend more time on matrix than direct irc |
| 21:32:46 | <roboguy_> | hmm is there a Discord version of lambdabot? I looked a little while ago and I didn't see anything |
| 21:33:10 | <geekosaur> | iirc there have been a few attempts at one but no success yet |
| 21:33:14 | <hpc> | [~geekosaur] real nerds use jira markup |
| 21:33:14 | <sm> | and > is just too valuable a convention for quoting replies |
| 21:33:28 | <mangoiv> | There's a bot in the haskell discord which is pretty good as far as I can tell. |
| 21:33:46 | <geekosaur> | there was at one point an attempt to refactor lb itself to better support alternatives but it failed, irc's too deeply woven into it |
| 21:34:00 | <roboguy_> | ah, I didn't even know there was a Haskell discord. I wonder if the bot could be used in other servers |
| 21:34:10 | × | wonko quits (~wjc@62.115.229.50) (Ping timeout: 252 seconds) |
| 21:34:19 | <mangoiv> | *FP discord (for me it's the haskell discord tho :D) |
| 21:34:23 | <roboguy_> | ah, hah |
| 21:34:47 | <mangoiv> | is it allowed/considered good practise to share links here? |
| 21:35:02 | <mangoiv> | if so, I'd send an invite. |
| 21:35:10 | <roboguy_> | I think I found it |
| 21:37:53 | <unit73e> | to bad discord has insane rules imo. you can be banned for any reason discord feels like. it's not uncommon for you to be banned simply because you were in a server discord doesn't like. |
| 21:39:05 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds) |
| 21:39:47 | × | michalz quits (~michalz@185.246.204.37) (Remote host closed the connection) |
| 21:39:51 | <ldlework> | I'm doing the "Keypad translator" exercise in HFFP and it's throwing me for a loop |
| 21:40:31 | × | sneedsfeed quits (~sneedsfee@rrcs-173-95-122-169.midsouth.biz.rr.com) (Ping timeout: 256 seconds) |
| 21:41:36 | <roboguy_> | unit73e: I've heard that. I mainly use it to talk with some of my friends, although I'm in a couple of other servers that I rarely really look at (which is why I'm wondering if the bot could be used in other servers) |
| 21:41:59 | <roboguy_> | ldlework: literally? |
| 21:44:49 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 21:44:49 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
| 21:44:49 | → | wroathe joins (~wroathe@user/wroathe) |
| 21:46:23 | <ldlework> | roboguy_: my head just hurts |
| 21:46:40 | <ldlework> | I think I need a function which will parse runs of characters or something. |
| 21:46:53 | <ldlework> | The challenge seems quite harder than the rest nearby lol |
| 21:48:49 | → | MQ-17J joins (~MQ-17J@d14-69-206-129.try.wideopenwest.com) |
| 21:49:08 | × | mangoiv quits (~MangoIV@193.175.5.172) (Quit: WeeChat 3.2) |
| 21:49:19 | → | mangoiv joins (~MangoIV@193.175.5.172) |
| 21:50:24 | × | gehmehgeh quits (~user@user/gehmehgeh) (Quit: Leaving) |
| 21:52:04 | <roboguy_> | ldlework: did you try to write that function? |
| 21:52:15 | × | ec_ quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds) |
| 21:52:21 | <ldlework> | i'm trying to think about how it might work |
| 21:52:33 | <ldlework> | I'm thinking that maybe mapAccumL could work? |
| 21:52:39 | <ldlework> | create some kind of type to hold the parsing state |
| 21:52:50 | × | fendor quits (~fendor@77.119.194.245.wireless.dyn.drei.com) (Read error: Connection reset by peer) |
| 21:53:29 | <ldlework> | when the letter changes to the one we've been seeing, then translate the number of consecutive characters (5555) into the corresponding keypad character, then establish the newly seen character as the one to expect on the next iteration |
| 21:53:30 | <ldlework> | something like this |
| 21:53:50 | <ldlework> | changes from the one we've been seeing* |
| 21:54:58 | → | chisui joins (~chisui@2001:16b8:68aa:4700:b819:7f5a:e91c:7e7c) |
| 21:55:35 | <awpr> | it might be more beneficial to do it without this, but I coincidentally just publish a package that'd make this easier |
| 21:55:38 | × | MQ-17J quits (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 265 seconds) |
| 21:55:39 | <awpr> | @hackage rle |
| 21:55:39 | <lambdabot> | https://hackage.haskell.org/package/rle |
| 21:56:23 | <ldlework> | hehe |
| 21:56:25 | <roboguy_> | ldlework: you might try implementing it directly at first, without something like mapAccumL. A helper function will likely be useful |
| 21:56:56 | <ldlework> | roboguy_: in the past days, I have implemented other challenges which were refactored with mapAccumL as per the advice of some in here |
| 21:56:56 | <mangoiv> | Can anybody tell me whether there are efforts being made to get haskell running on microcontrollers? I know on old ones it was probably not feasible, but maybe more modern ones? |
| 21:57:08 | <ldlework> | roboguy_: so I have that badge already |
| 21:57:39 | <ldlework> | hehe |
| 21:59:02 | → | ec_ joins (~ec@gateway/tor-sasl/ec) |
| 21:59:05 | <geekosaur> | mangoiv, microcontrollers are probably not appropriate since haskell needs garbage collection |
| 21:59:18 | × | Pickchea quits (~private@user/pickchea) (Ping timeout: 260 seconds) |
| 21:59:23 | <roboguy_> | mangoiv: I don't know if this counts as too old, but there is Haskino |
| 21:59:24 | × | hololeap quits (~hololeap@user/hololeap) (Ping timeout: 276 seconds) |
| 21:59:48 | → | hololeap joins (~hololeap@user/hololeap) |
| 22:00:02 | <geekosaur> | more common is using haskell to program microcontrollers via something like atom or clash |
| 22:00:42 | <mangoiv> | geekosaur: well, I am aware of that, but Controllers nrF52840 run OSes so I thought that this might be an option |
| 22:01:26 | × | mikoto-c1 quits (~mikoto-ch@83.137.2.241) (Quit: mikoto-c1) |
| 22:01:29 | <mangoiv> | I think I already looked at Haskino but didn't consider it worth digging into, so maybe I'll have to do that :D |
| 22:06:24 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 22:06:38 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 22:08:04 | → | MQ-17J joins (~MQ-17J@d14-69-206-129.try.wideopenwest.com) |
| 22:08:15 | → | tinhatcat joins (~manjaro-g@2620:103:a000:2201:8e4c:af6a:e11c:11a1) |
| 22:08:38 | × | jtomas quits (~jtomas@95.red-88-11-64.dynamicip.rima-tde.net) (Ping timeout: 260 seconds) |
| 22:11:05 | × | tinhatcat quits (~manjaro-g@2620:103:a000:2201:8e4c:af6a:e11c:11a1) (Client Quit) |
| 22:12:24 | <sm> | mangoiv, https://www.reddit.com/r/haskell/comments/pjmktr/ann_copilot_35/ |
| 22:12:28 | <sm> | oops |
| 22:12:38 | × | MQ-17J quits (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 252 seconds) |
| 22:12:45 | → | Pickchea joins (~private@user/pickchea) |
| 22:12:57 | → | MQ-17J joins (~MQ-17J@d14-69-206-129.try.wideopenwest.com) |
| 22:18:13 | × | roboguy_ quits (~roboguy_@cpe-98-156-4-161.kc.res.rr.com) () |
| 22:20:51 | × | ec_ quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds) |
| 22:20:53 | <ldlework> | Hmm mapAccumL wont actually work for me here because I need to translate runs of Char into a single Char which mapAccumL doesn't fit for |
| 22:21:30 | <ldlework> | I wonder if I just need a "fold" |
| 22:21:32 | → | AlistairB joins (~AlistairB@121-200-5-212.79c805.syd.nbn.aussiebb.net) |
| 22:22:27 | <ldlework> | hmm |
| 22:27:59 | → | ec_ joins (~ec@gateway/tor-sasl/ec) |
| 22:28:26 | × | shapr quits (~user@pool-100-36-247-68.washdc.fios.verizon.net) (Remote host closed the connection) |
| 22:29:10 | × | favonia quits (~favonia@user/favonia) (Ping timeout: 260 seconds) |
| 22:29:32 | × | AlistairB quits (~AlistairB@121-200-5-212.79c805.syd.nbn.aussiebb.net) (Quit: Client closed) |
| 22:31:49 | <mniip> | RLE is not really a stock recursion scheme |
| 22:32:51 | <ldlework> | almost feel like i should just stop what i'm doing and learn how parser combinators work :P |
| 22:33:50 | <mniip> | an easy way to see the problem is |
| 22:33:59 | × | chisui quits (~chisui@2001:16b8:68aa:4700:b819:7f5a:e91c:7e7c) (Quit: Client closed) |
| 22:34:03 | <mniip> | if you know `rle xs` and `rle ys`, how do you compute `rle (xs ++ ys)` |
| 22:34:06 | × | unit73e quits (~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291) (Quit: Leaving) |
| 22:34:18 | × | MQ-17J quits (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 265 seconds) |
| 22:34:23 | <mniip> | the answer is nuanced and reflects the non-trivial structure of the transformation |
| 22:34:28 | → | unit73e joins (~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291) |
| 22:35:01 | → | shapr joins (~user@pool-100-36-247-68.washdc.fios.verizon.net) |
| 22:35:26 | → | MQ-17J joins (~MQ-17J@d14-69-206-129.try.wideopenwest.com) |
| 22:35:51 | → | Tuplanolla joins (~Tuplanoll@91-159-69-50.elisa-laajakaista.fi) |
| 22:35:58 | <unit73e> | finally got to the ugly part of SDL2 examples: https://paste.tomsmeding.com/yCUq2s3R |
| 22:36:06 | <unit73e> | I really dislike that function |
| 22:36:44 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 22:36:58 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 22:39:54 | <unit73e> | maybe some new types can fix that function |
| 22:42:04 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 22:42:17 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 22:43:46 | <ldlework> | man fp hurts my head |
| 22:44:34 | × | cheater quits (~Username@user/cheater) (Ping timeout: 252 seconds) |
| 22:44:47 | × | mmohammadi9812 quits (~Mohammad@2.178.201.78) (Read error: Connection reset by peer) |
| 22:45:00 | <unit73e> | ldlework, you'll get used to it. it's not that hard to grasp once you understand the fundamental principles, imo. |
| 22:45:00 | → | cheater joins (~Username@user/cheater) |
| 22:45:27 | <unit73e> | the issue is understandint those |
| 22:45:41 | <unit73e> | college should focus on that |
| 22:47:57 | <ldlework> | I'm 20 years into my career heh |
| 22:48:10 | × | L29Ah quits (~L29Ah@wikipedia/L29Ah) (Ping timeout: 240 seconds) |
| 22:49:32 | <geekosaur> | I was around 25 years in |
| 22:49:58 | <geekosaur> | although admittedly I'd been exposed to Lisp and Scheme before SML and Haskell |
| 22:51:03 | <monochrom> | It is possible that age itself hurts learning. |
| 22:51:21 | <ldlework> | I definitely think so |
| 22:51:47 | <ldlework> | I'm also an emacs user so I have also written a bunch of lisp. But I have had similar pains in the past there too. |
| 22:51:48 | <monochrom> | Wanna bet a 50yo FPer learning imperative programming for the first time feeling hurt? |
| 22:52:22 | <ldlework> | FP feels like distilling an implementation down to exactly what you want |
| 22:52:24 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 22:52:38 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 22:52:45 | <ldlework> | I guess the challenge comes from waffling between various possibilities down at the bottom |
| 22:53:24 | <monochrom> | As a corollary, if you have 50 year experience in Pascal and then you learn C, it doesn't count as learning. Not enough difference. What's there to learn? |
| 22:53:32 | <ldlework> | I am OK thinking conceptually about the problem right until it comes to expressing that exact function which I really need |
| 22:54:10 | <ldlework> | When I did F# I leaned a lot on its support for for-loops |
| 22:54:37 | <monochrom> | Let's first correct some of your wording to illuminate the issue. s/conceptually/decompositionally/ |
| 22:54:48 | <monochrom> | Ah but now we see the problem. |
| 22:55:19 | <ldlework> | Even lisp has such constructs |
| 22:55:28 | <monochrom> | Decomposing a problem with C at the back of your mind is different from decomposing a problem with Haskell at the back of your mind. |
| 22:55:58 | <ldlework> | (that's not a criticism of Haskell, only observing the for-loop has always been at arms reach for me) |
| 22:56:07 | <monochrom> | John Hughes's "why functional programming matters" in fact shows that it is the opposite kind of decomposition. |
| 22:56:15 | <geekosaur> | it is in Haskell as well. flip map{,M} |
| 22:57:01 | × | pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Ping timeout: 265 seconds) |
| 22:57:15 | × | Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer) |
| 22:57:27 | → | Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) |
| 22:57:32 | <unit73e> | 23 pages? I'll read it. I just starting coding and understood along the way |
| 22:57:44 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 22:57:48 | <c_wraith> | :t for |
| 22:57:49 | <lambdabot> | (Traversable t, Applicative f) => t a -> (a -> f b) -> f (t b) |
| 22:58:02 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 22:58:19 | <c_wraith> | geekosaur: you have to admit, that requires at least a couple new concepts coming from C. Unlike lispian for macros |
| 22:59:09 | <unit73e> | not sure if it's the best method because I had to figure out what each symbols and whatnot meant one by one |
| 22:59:31 | <unit73e> | I just find it a less boring method |
| 22:59:36 | → | pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) |
| 23:00:31 | → | AlistairB joins (~AlistairB@121-200-5-212.79c805.syd.nbn.aussiebb.net) |
| 23:03:25 | <unit73e> | there's no formula tbh. In java channel they recommend programming with a notepad first and I think they're crazy. |
| 23:04:06 | <geekosaur> | that actually can work with haskell |
| 23:04:23 | <unit73e> | I agree but not with java |
| 23:04:29 | <geekosaur> | there's a lot to be said for just doing some lambda calculus reductions by hand before diving in |
| 23:04:38 | <unit73e> | java is too verbose to work with notepad |
| 23:04:47 | × | Pickchea quits (~private@user/pickchea) (Quit: Leaving) |
| 23:05:34 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 260 seconds) |
| 23:06:02 | <monochrom> | I had classmates who programmed with pico, even in their final year. |
| 23:06:18 | <geekosaur> | a notepad, not windows notepad |
| 23:06:24 | <monochrom> | Oh heh. |
| 23:07:31 | × | cafkafk quits (~cafkafk@user/cafkafk) (Ping timeout: 252 seconds) |
| 23:07:32 | <unit73e> | interestingly I did learn lamdba calculus in college but I didn't know it had anything to do with programming at the time |
| 23:08:22 | <unit73e> | the teacher didn't really care and neither did I at the time lol |
| 23:09:36 | × | vicfred quits (~vicfred@user/vicfred) (Quit: Leaving) |
| 23:12:17 | <hpc> | i learned function composition in algebra when i was 14 |
| 23:12:55 | <hpc> | it was never mentioned again, even in the cs classes |
| 23:13:15 | <hpc> | to this day i have no idea why they had it on the schedule |
| 23:13:30 | × | hendursaga quits (~weechat@user/hendursaga) (Ping timeout: 276 seconds) |
| 23:13:58 | → | [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470) |
| 23:14:09 | × | ChaiTRex quits (~ChaiTRex@user/chaitrex) (Ping timeout: 276 seconds) |
| 23:14:23 | <monochrom> | It could be used in stating the chain rule of differentiation. Then again how many teachers are capable of that level of point-free abstraction? |
| 23:14:42 | <hpc> | it wasn't mentioned even then |
| 23:14:51 | <hpc> | actually, that was another thing i had to notice on my own |
| 23:14:58 | <monochrom> | Right, they only know how to show you the pointful version. |
| 23:15:01 | <hpc> | that the chain rule was just recursion |
| 23:15:04 | → | hendursaga joins (~weechat@user/hendursaga) |
| 23:15:31 | → | wroathe joins (~wroathe@c-75-72-98-163.hsd1.mn.comcast.net) |
| 23:15:31 | × | wroathe quits (~wroathe@c-75-72-98-163.hsd1.mn.comcast.net) (Changing host) |
| 23:15:31 | → | wroathe joins (~wroathe@user/wroathe) |
| 23:15:42 | → | ChaiTRex joins (~ChaiTRex@user/chaitrex) |
| 23:16:04 | <hpc> | they also taught the "big {" syntax for pattern matching in math notation, but then never used it to show the whole differentiation formula either |
| 23:16:20 | <hpc> | they just went "here's half a dozen rules, pick which one looks right and repeat" |
| 23:16:40 | <[itchyjunk]> | :o chain rule is recursion? |
| 23:17:17 | <hpc> | derivative(f) = something * derivative(a smaller part of f) |
| 23:17:45 | → | lavaman joins (~lavaman@98.38.249.169) |
| 23:18:11 | → | favonia joins (~favonia@user/favonia) |
| 23:18:38 | × | acidjnk_new quits (~acidjnk@p5487d0ba.dip0.t-ipconnect.de) (Ping timeout: 252 seconds) |
| 23:21:18 | × | ec_ quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds) |
| 23:21:56 | × | MQ-17J quits (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 252 seconds) |
| 23:22:29 | → | MQ-17J joins (~MQ-17J@d14-69-206-129.try.wideopenwest.com) |
| 23:22:30 | × | lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 260 seconds) |
| 23:23:46 | × | Gurkenglas quits (~Gurkengla@dslb-002-207-014-195.002.207.pools.vodafone-ip.de) (Ping timeout: 260 seconds) |
| 23:23:47 | × | MQ-17J quits (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Read error: Connection reset by peer) |
| 23:24:09 | × | max22- quits (~maxime@2a01cb08833598004190beef1e8cf3bf.ipv6.abo.wanadoo.fr) (Remote host closed the connection) |
| 23:24:46 | → | ic2000_ joins (~ic2000_@cpc108265-brom11-2-0-cust119.16-1.cable.virginm.net) |
| 23:26:07 | → | MQ-17J joins (~MQ-17J@d14-69-206-129.try.wideopenwest.com) |
| 23:26:53 | → | cafkafk joins (~cafkafk@user/cafkafk) |
| 23:28:32 | × | zaquest quits (~notzaques@5.128.210.178) (Remote host closed the connection) |
| 23:29:10 | <[itchyjunk]> | oh |
| 23:29:45 | → | zaquest joins (~notzaques@5.128.210.178) |
| 23:31:28 | → | L29Ah joins (~L29Ah@wikipedia/L29Ah) |
| 23:35:41 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 23:36:31 | × | amahl quits (~amahl@dsl-jklbng12-54fbca-64.dhcp.inet.fi) (Remote host closed the connection) |
| 23:37:10 | × | TheCoffeMaker quits (~TheCoffeM@user/thecoffemaker) (Ping timeout: 240 seconds) |
| 23:37:59 | × | cafkafk quits (~cafkafk@user/cafkafk) (Quit: WeeChat 3.1) |
| 23:39:25 | × | favonia quits (~favonia@user/favonia) (Ping timeout: 260 seconds) |
| 23:39:44 | → | TheCoffeMaker joins (~TheCoffeM@user/thecoffemaker) |
| 23:40:19 | <monochrom> | Or rather, differential calculus uses recursion. |
| 23:40:55 | <monochrom> | diff(f + g) = diff(f) + diff(g) is a recursive rule, too. |
| 23:41:23 | <monochrom> | Differentiation is one of the early recursive algorithms everyone had to learn to do by hand. |
| 23:43:07 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 23:43:22 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 260 seconds) |
| 23:43:31 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 23:44:28 | → | roboguy_ joins (~roboguy_@cpe-98-156-4-161.kc.res.rr.com) |
| 23:44:51 | <hpc> | that's a better way to explain it |
| 23:47:49 | × | TheCoffeMaker quits (~TheCoffeM@user/thecoffemaker) (Ping timeout: 252 seconds) |
| 23:48:35 | → | falafel joins (~falafel@2603-8000-d801-2d68-1d6d-bf72-eba2-a20e.res6.spectrum.com) |
| 23:49:12 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 23:49:12 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
| 23:49:12 | → | wroathe joins (~wroathe@user/wroathe) |
| 23:50:15 | → | TheCoffeMaker joins (~TheCoffeM@user/thecoffemaker) |
| 23:52:25 | × | Tuplanolla quits (~Tuplanoll@91-159-69-50.elisa-laajakaista.fi) (Quit: Leaving.) |
| 23:57:01 | × | Axma21295 quits (~Axman6@user/axman6) (Remote host closed the connection) |
| 23:57:15 | → | Axman6 joins (~Axman6@user/axman6) |
All times are in UTC on 2021-09-09.