2022/01/11

2022-01-11 00:00:30 +0100 <Raito_Bezarius> but hm whenever I do that, it seems like hls is complaining:
2022-01-11 00:00:33 +0100 <Raito_Bezarius> [typecheck] [E] Parse error: module header, import declaration
2022-01-11 00:00:35 +0100 <Raito_Bezarius> or top-level declaration expected.
2022-01-11 00:00:56 +0100 <glguy> Did you turn on the TemplateHaskell extension in that module?
2022-01-11 00:01:31 +0100 <Raito_Bezarius> indeed, that did the trick… thanks a lot glguy !
2022-01-11 00:01:58 +0100 <Raito_Bezarius> that's really super neaaaat
2022-01-11 00:04:38 +0100 <hololeap> I'm working on a long-running program that will need to have suspend/resume functionality. I've heard that ContT allows for this, but I've also heard that it has issues and should be avoided. Thoughts?
2022-01-11 00:05:26 +0100 <glguy> suspend/resume like all one process or across multiple processes?
2022-01-11 00:05:30 +0100wyrd(~wyrd@gateway/tor-sasl/wyrd) (Ping timeout: 276 seconds)
2022-01-11 00:06:34 +0100 <hololeap> just one process. it's going to have an updating work queue that should be saved so that it can resume if it stops for whatever reason
2022-01-11 00:06:35 +0100 <jkaye> What issues have you heard about with ContT? Interested just because I haven't heard that before
2022-01-11 00:06:41 +0100wyrd(~wyrd@gateway/tor-sasl/wyrd)
2022-01-11 00:06:55 +0100wyrd(~wyrd@gateway/tor-sasl/wyrd) (Client Quit)
2022-01-11 00:07:08 +0100 <hololeap> jkaye: I honestly don't remember. I've never used it and what I read was probably years ago when I didn't understand much
2022-01-11 00:07:33 +0100 <EvanR> you want the work queue persisted to disk and reloaded after the program reboots?
2022-01-11 00:07:49 +0100 <hololeap> yeah
2022-01-11 00:08:20 +0100 <glguy> oh, that's "multiple processes" then
2022-01-11 00:08:35 +0100 <hololeap> oh, I see what you meant now, glguy
2022-01-11 00:08:37 +0100 <glguy> ContT probably isn't related to your answer
2022-01-11 00:09:01 +0100notzmv(~zmv@user/notzmv) (Ping timeout: 240 seconds)
2022-01-11 00:09:39 +0100 <hololeap> ok, yeah as I think of it StateT makes sense to use. but then what _is_ ContT useful for?
2022-01-11 00:09:47 +0100coot(~coot@89-64-85-93.dynamic.chello.pl) (Quit: coot)
2022-01-11 00:09:52 +0100 <glguy> StateT isn't particularly related, either
2022-01-11 00:10:13 +0100 <glguy> You just need your work queue to be serializable and then save/restore it to/from disk when you need to do that
2022-01-11 00:10:27 +0100 <glguy> so don't save functions in it, for example
2022-01-11 00:11:08 +0100 <EvanR> unless you want to get fancy with higher order abstract syntax or something xD
2022-01-11 00:11:20 +0100 <hololeap> really? I would think that `StateT WorkQueue IO a` would make sense, where you save the queue to disk each time it updates
2022-01-11 00:11:20 +0100 <dolio> ContT, in particular, is just notation for using higher-order functions, so it's not going to help with serializing things to disk.
2022-01-11 00:11:37 +0100 <glguy> hololeap: StateT isn't doing anything there, you just happen to be using it
2022-01-11 00:11:49 +0100 <glguy> WorkQueue being serializable or not is what matters
2022-01-11 00:12:02 +0100 <hololeap> sure
2022-01-11 00:12:11 +0100 <EvanR> implement working Read and Show and you're golden xD
2022-01-11 00:12:42 +0100 <EvanR> *YMMV
2022-01-11 00:13:13 +0100 <hololeap> haha. I don't know if I'll ever find a use for ContT. it just never seems to fit anywhere
2022-01-11 00:14:15 +0100random-jellyfish(~random-je@user/random-jellyfish) (Quit: Client closed)
2022-01-11 00:14:45 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2022-01-11 00:15:04 +0100 <hpc> i almost had a use for it once, but it turns out i needed to short-circuit the start of the computation instead, and switched to some goofy StateT IO thing
2022-01-11 00:15:19 +0100 <hpc> someday though...
2022-01-11 00:15:32 +0100 <hololeap> lol so it isn't just me then
2022-01-11 00:15:46 +0100 <hpc> knowing it is more important than actually using it though
2022-01-11 00:16:04 +0100 <monochrom> Firstly it depends on your answer to "resume from what?". For example, resuming from disk is very different from resuming from memory.
2022-01-11 00:16:24 +0100 <hpc> you can recognize the continuations in ParsecT and such, once you know the "base case" of ContT
2022-01-11 00:16:48 +0100 <hpc> https://hackage.haskell.org/package/parsec-3.1.15.0/docs/src/Text.Parsec.Prim.html#ParsecT - the consumed/empty ok/err stuff
2022-01-11 00:17:08 +0100 <hpc> that's just a really elaborate (stuff -> m b) -> m b
2022-01-11 00:17:21 +0100 <hpc> foralled and etc
2022-01-11 00:17:29 +0100ensyde(~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
2022-01-11 00:17:53 +0100infinity0(~infinity0@occupy.ecodis.net) (Killed (zirconium.libera.chat (Nickname regained by services)))
2022-01-11 00:18:07 +0100infinity0(~infinity0@occupy.ecodis.net)
2022-01-11 00:18:37 +0100 <hololeap> ok, sure. I've been using and slowly grokking LogicT, which someone pointed out is `forall r. ContT r (ContT r)`, if I remember correctly
2022-01-11 00:19:20 +0100 <hpc> oh, another funny thing to note
2022-01-11 00:19:25 +0100CiaoSen(~Jura@p200300c957347b002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
2022-01-11 00:19:29 +0100wyrd(~wyrd@gateway/tor-sasl/wyrd)
2022-01-11 00:19:34 +0100 <hpc> there's no difference between s and u, in that ParsecT definition
2022-01-11 00:19:55 +0100 <hpc> just that every function on it has Stream s m t in the class context
2022-01-11 00:20:38 +0100__monty__(~toonn@user/toonn) (Quit: leaving)
2022-01-11 00:20:41 +0100 <jackdk> ContT is good for taming callback pyramids
2022-01-11 00:21:05 +0100 <hpc> yeah, i think if i had ever messed with ghcjs i would have a dozen uses for it
2022-01-11 00:21:35 +0100 <hpc> webapps are callback city
2022-01-11 00:23:05 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-01-11 00:23:05 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-01-11 00:23:05 +0100wroathe(~wroathe@user/wroathe)
2022-01-11 00:23:12 +0100 <hololeap> doesn't FRP do a better job of taming callbacks, by making them unneeded?
2022-01-11 00:24:17 +0100 <monochrom> In the case of ParsecT and LogicT, you are looking at more Codensity. "Codensity m a" = forall r. (a -> m r) -> m r
2022-01-11 00:24:37 +0100cheater(~Username@user/cheater) (Ping timeout: 240 seconds)
2022-01-11 00:24:37 +0100 <monochrom> ContT lacks that forall over r.
2022-01-11 00:25:30 +0100 <monochrom> If you like to think of ContT and then slaps on "forall r", that's OK, but the extra forall makes a whole lot of difference.
2022-01-11 00:26:28 +0100 <hpc> heh, that's true
2022-01-11 00:26:32 +0100 <hpc> like comparing ST to State
2022-01-11 00:27:06 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-01-11 00:27:21 +0100 <hololeap> "Abuse of the Continuation monad can produce code that is impossible to understand and maintain." -- this is probably why I avoided it, jkaye
2022-01-11 00:27:47 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2022-01-11 00:27:49 +0100 <monochrom> The benefit of the extra forall can be explained by looking at how System F manages to provide all algebraic data types.
2022-01-11 00:28:25 +0100 <monochrom> Suppose my ADT is "data T = C0 | C1 Int | C2 T T".
2022-01-11 00:28:33 +0100 <hololeap> it's the only monad that mentions abuse in the docs
2022-01-11 00:28:55 +0100 <glguy> don't get too comfortable, though; you can write unmaintainable code no matter what libraries you use
2022-01-11 00:29:22 +0100 <monochrom> In System F, it becomes "forall r. (r, Int, (r,r)) -> r", or after currying my tuples, "forall r. r -> Int -> (r -> r -> r) -> r".
2022-01-11 00:29:35 +0100haysh_
2022-01-11 00:29:35 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-01-11 00:29:36 +0100 <hpc> glguy: heh, as proof i submit acme-php
2022-01-11 00:29:57 +0100 <hpc> zero-import horribleness
2022-01-11 00:30:22 +0100puke(~puke@user/puke) (Quit: puke)
2022-01-11 00:30:51 +0100 <hololeap> "ContT is not a functor on the category of monads, and many operations cannot be lifted through it." -- this is also one of the other thorns that scared me. it reminds me of ListT's warnings
2022-01-11 00:30:58 +0100AlexNoo_(~AlexNoo@178.34.151.107)
2022-01-11 00:31:13 +0100cheater(~Username@user/cheater)
2022-01-11 00:31:29 +0100 <monochrom> If you do a similar decoding to ParsecT, you can recover the original Leijen-Meijer "4 cases: {consumed, unconsumed} x {OK, error}" ADT in the original parsec.
2022-01-11 00:31:57 +0100 <monochrom> If you do a similar decoding to LogicT, you can recover the ADT of "ListT done right".
2022-01-11 00:32:35 +0100Midjak(~Midjak@may53-1-78-226-116-92.fbx.proxad.net) (Quit: This computer has gone to sleep)
2022-01-11 00:32:44 +0100 <monochrom> So LogicT and today's ParsecT are just doing a CPS or System-F encoding of very vanilla ADTs.
2022-01-11 00:33:15 +0100 <hololeap> isn't that called church encoding?
2022-01-11 00:33:26 +0100 <monochrom> Why do they do it? The answer is efficiency, or believed efficiency.
2022-01-11 00:34:13 +0100 <monochrom> Because which way is more efficient is pretty sensitive to which GHC version you use. Very old GHC, probably ADTs are slower.
2022-01-11 00:34:34 +0100 <monochrom> Today's GHC? I don't think anyone has any actual data. I bet ADTs are not slower.
2022-01-11 00:34:35 +0100AlexZenon(~alzenon@178.34.162.219) (Ping timeout: 256 seconds)
2022-01-11 00:34:37 +0100Alex_test(~al_test@178.34.162.219) (Ping timeout: 240 seconds)
2022-01-11 00:34:44 +0100AlexNoo(~AlexNoo@178.34.162.219) (Ping timeout: 256 seconds)
2022-01-11 00:35:13 +0100 <dolio> That's not a very good bet.
2022-01-11 00:35:26 +0100 <hpc> also would you want strict data or lazy data?
2022-01-11 00:35:42 +0100 <hololeap> I've wondered why there were church-encoded versions of e.g. Free and why it would affect performance
2022-01-11 00:36:43 +0100 <monochrom> Oleg would say that the untyped-lambda-calculus version is Church encoding, the System-F version is Böhm-Berarducci encoding.
2022-01-11 00:37:07 +0100 <dolio> It's kind of like betting that (co)yoneda is no longer faster in certain use cases, because GHC somehow figures out how to fuse fmap at runtime, without inlining.
2022-01-11 00:38:11 +0100 <jackdk> I remember seeing a talk presented by someone who worked at Seek, saying they used to use the `data Free f a = Return a | Free (f (Free f a))`, had poor performance, and switched to the "Church Encoded" version. This would've been 2015 or so, though.
2022-01-11 00:38:46 +0100Alex_test(~al_test@178.34.151.107)
2022-01-11 00:38:49 +0100Tuplanolla(~Tuplanoll@91-159-69-16.elisa-laajakaista.fi) (Quit: Leaving.)
2022-01-11 00:38:49 +0100AlexZenon(~alzenon@178.34.151.107)
2022-01-11 00:40:07 +0100 <hololeap> if anyone can point me to something that goes into more detail on this, I'd be grateful: https://stackoverflow.com/a/9806770
2022-01-11 00:41:04 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2022-01-11 00:42:03 +0100 <hololeap> otherwise I'll just continue reading what pops up in a search
2022-01-11 00:42:15 +0100mikoto-chan(~mikoto-ch@185.25.79.189)
2022-01-11 00:42:37 +0100machinedgod(~machinedg@24.105.81.50) (Ping timeout: 240 seconds)
2022-01-11 00:43:36 +0100 <monochrom> Yikes haha "aka Visitor Pattern"
2022-01-11 00:45:05 +0100ensyde(~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Quit: Leaving)
2022-01-11 00:45:12 +0100 <jackdk> that's an interesting parallel that I'd never noticed before
2022-01-11 00:45:35 +0100ensyde(~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
2022-01-11 00:46:15 +0100 <monochrom> Yeah, "yikes" means "I see it's true but oh god". ("haha" means "god help us")
2022-01-11 00:46:43 +0100ensyde(~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Client Quit)
2022-01-11 00:46:47 +0100cemg(~cemguresc@2001:a61:11ff:a001:9a1b:dd7d:413d:f699) (Quit: Leaving)
2022-01-11 00:47:00 +0100ensyde(~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
2022-01-11 00:47:53 +0100 <jackdk> hololeap: https://slides.yowconference.com/yowlambdajam2017/Humphries-ContinuationsAllTheWayDown.pdf this shows the performance angle somewhat, but may be unintelligible if you didn't see the actual presentation (a recording of which never seemed to be published)
2022-01-11 00:48:48 +0100 <jackdk> but there are at least benchmarks, and if you trace the reductions of DList appends or whatever, you can see the right-association pop out. I remember going home after the talk and grabbing pen and paper to convince myself that it worked
2022-01-11 00:52:51 +0100 <dolio> Encoding the data type isn't always better, of course. They're bad for repeatedly peeling off just the outermost layer.
2022-01-11 00:53:18 +0100 <dolio> Unless you get really elaborate with the encodings.
2022-01-11 00:53:50 +0100little_mac(~little_ma@2601:410:4300:3ce0:5835:5767:1aa7:b5ec) (Quit: Leaving)
2022-01-11 00:54:11 +0100 <hololeap> jackdk: the syntax trees are neat, I think I might get something out of those slides
2022-01-11 00:54:26 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2022-01-11 00:54:34 +0100 <dolio> Point being, you need to know what you're optimizing for.
2022-01-11 00:57:37 +0100Erutuon(~Erutuon@user/erutuon) (Ping timeout: 240 seconds)
2022-01-11 00:59:56 +0100n3rdy1(~n3rdy1@2600:1700:4570:3480::41)
2022-01-11 01:06:27 +0100 <Axman6> hololeap: monochrom: jackdk: https://ibb.co/2KmCCHF
2022-01-11 01:07:13 +0100 <jackdk> Axman6...
2022-01-11 01:07:15 +0100little_mac(~little_ma@2601:410:4300:3ce0:5835:5767:1aa7:b5ec)
2022-01-11 01:08:24 +0100 <monochrom> Haha congrats
2022-01-11 01:09:24 +0100 <Axman6> f it, it's going on reddit
2022-01-11 01:09:35 +0100 <hololeap> heh
2022-01-11 01:09:35 +0100acidjnk_new(~acidjnk@p200300d0c7271e155922c761977fca48.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
2022-01-11 01:09:35 +0100acidjnk(~acidjnk@p200300d0c7271e155922c761977fca48.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
2022-01-11 01:09:45 +0100 <monochrom> There is also a connection with dependency injection, may I add...
2022-01-11 01:10:13 +0100euandreh(~euandreh@2804:14c:33:9fe5:cb46:c04b:665a:c687) (Ping timeout: 240 seconds)
2022-01-11 01:11:10 +0100machinedgod(~machinedg@24.105.81.50)
2022-01-11 01:11:39 +0100 <Axman6> Image posts not allowed :'( don't they know I have @ in here!
2022-01-11 01:12:59 +0100 <monochrom> It is still draft but my https://www.vex.net/~trebla/haskell/abs-type-param.html opens with a church encoding example but I relate it to dependency injection instead. >:)
2022-01-11 01:14:06 +0100falafel(~falafel@2603-8000-d800-688c-54f8-65c3-409b-d4a1.res6.spectrum.com)
2022-01-11 01:15:40 +0100 <dolio> This 100 year old thing is just a more general version of this much newer thing I came up with because I didn't know about the much older thing. :þ
2022-01-11 01:16:01 +0100 <jackdk> that's my favourite genre of conference talks
2022-01-11 01:16:26 +0100 <jackdk> particularly if the speaker invented the less general thing, and you get to follow along the path of dawning realisation
2022-01-11 01:17:52 +0100 <hpc> when that happens to me i just think "oh phew, it was a good idea after all"
2022-01-11 01:18:39 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-01-11 01:18:49 +0100 <Axman6> so I used church encoding yesterday to try and speed up somecode that would allocate IORefs when really State should be enough. I was surprised to find that the IORefs were both faster and ended up allocating less: https://paste.tomsmeding.com/h6aIktOI
2022-01-11 01:19:55 +0100puke(~puke@user/puke)
2022-01-11 01:20:06 +0100 <Axman6> using the normal newtype S s a = S (a -> IO (a,s)) was even worse
2022-01-11 01:20:13 +0100puke(~puke@user/puke) (Client Quit)
2022-01-11 01:20:50 +0100 <Axman6> edwardk: ^ I came up with another way to write memo with discrimination, but I'm surprised it performed worse than the IORef version
2022-01-11 01:24:08 +0100max22-(~maxime@lfbn-ren-1-1026-62.w92-139.abo.wanadoo.fr) (Remote host closed the connection)
2022-01-11 01:24:23 +0100 <jackdk> Axman6: you gonna PR this thing at any point?
2022-01-11 01:24:36 +0100 <Axman6> perhaps...
2022-01-11 01:26:29 +0100 <jackdk> Does this monadic variant of `local` have a common name? `localM :: MonadReader r m => (r -> m r) -> m a -> m a`
2022-01-11 01:27:13 +0100 <[itchyjunk]> can i use something and define after in list comprehension? [y | y <- x, x <- xs] ?
2022-01-11 01:27:17 +0100hud(~hud@uwyo-129-72-161-67.uwyo.edu) (Ping timeout: 256 seconds)
2022-01-11 01:27:20 +0100 <Axman6> why do I want to call that locum
2022-01-11 01:27:31 +0100 <Axman6> no
2022-01-11 01:28:57 +0100 <Axman6> "locum-tenens: A person, especially a physician or cleric, who substitutes temporarily for another." seems apt
2022-01-11 01:29:10 +0100 <[itchyjunk]> can i nest it ? [y | y <- [x | x <- xs]]
2022-01-11 01:29:38 +0100 <Axman6> yes
2022-01-11 01:29:40 +0100 <Axman6> uh
2022-01-11 01:29:47 +0100puke(~puke@user/puke)
2022-01-11 01:29:49 +0100 <Axman6> I mean, that will do something, but not the same thing
2022-01-11 01:29:56 +0100 <[itchyjunk]> :<
2022-01-11 01:30:20 +0100 <Axman6> in the firt one, xs :: [[a]], in the second it onlt needs to be [a] because the inner comprehension is id
2022-01-11 01:30:48 +0100 <Axman6> > ( \xs -> [x | x <- xs]) [1..10]
2022-01-11 01:30:50 +0100 <lambdabot> [1,2,3,4,5,6,7,8,9,10]
2022-01-11 01:32:38 +0100Inst(~delicacie@2601:6c4:4080:3f80:35fa:dcbe:dd4e:5a43)
2022-01-11 01:36:07 +0100notzmv(~zmv@user/notzmv)
2022-01-11 01:37:45 +0100 <jackdk> Axman6: I dunno why you want to call it locum, but given the amazonka refactor I'm considering, having `localEnvM :: MonadAmazonka m => (Env -> m Env) -> m a -> m a` is going to be so useful that I think it's worth naming (consider `localEnvM (fromAssumedRole "arn:aws:..." "assumed-role") $ do ...`)
2022-01-11 01:39:53 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-01-11 01:39:53 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-01-11 01:39:53 +0100wroathe(~wroathe@user/wroathe)
2022-01-11 01:40:22 +0100 <Axman6> looks lovely
2022-01-11 01:40:36 +0100 <Axman6> and i think the name is fine
2022-01-11 01:40:36 +0100jkaye_(~qicruser@2604:ca00:158:98c7::662:b620)
2022-01-11 01:41:27 +0100 <jackdk> it's like almost under the Fairbairn threshold, but its implementation is a little awkward
2022-01-11 01:41:30 +0100 <monochrom> locum tenet: A person whose time is backwards temporarily >:)
2022-01-11 01:41:41 +0100 <hololeap> prependKleisli
2022-01-11 01:42:02 +0100tomboy64(~tomboy64@user/tomboy64) (Ping timeout: 240 seconds)
2022-01-11 01:42:28 +0100 <hpc> monochrom: coforwards
2022-01-11 01:42:36 +0100burnsidesLlama(~burnsides@dhcp168-013.wadham.ox.ac.uk) (Remote host closed the connection)
2022-01-11 01:43:09 +0100burnsidesLlama(~burnsides@client-8-69.eduroam.oxuni.org.uk)
2022-01-11 01:43:47 +0100jkaye_(~qicruser@2604:ca00:158:98c7::662:b620) (Read error: Connection reset by peer)
2022-01-11 01:44:15 +0100jkaye_(~qicruser@2604:ca00:158:98c7::662:b620)
2022-01-11 01:45:29 +0100 <hololeap> appendMonadicEndomorphism
2022-01-11 01:46:17 +0100 <hololeap> oh, I guess it would still be prepending
2022-01-11 01:46:26 +0100jgeerds(~jgeerds@55d4bbed.access.ecotel.net) (Ping timeout: 252 seconds)
2022-01-11 01:47:50 +0100burnsidesLlama(~burnsides@client-8-69.eduroam.oxuni.org.uk) (Ping timeout: 256 seconds)
2022-01-11 01:48:17 +0100n3rdy1(~n3rdy1@2600:1700:4570:3480::41) (Ping timeout: 240 seconds)
2022-01-11 01:50:00 +0100shapr(~user@2601:7c0:c202:5190:cc12:44b:f211:c38f)
2022-01-11 01:50:49 +0100jkaye_(~qicruser@2604:ca00:158:98c7::662:b620) (Read error: Connection reset by peer)
2022-01-11 01:59:32 +0100TonyStone(~TonyStone@2603-7080-8607-c36a-9cdb-69bc-753b-1e50.res6.spectrum.com) (Read error: Connection reset by peer)
2022-01-11 02:01:22 +0100n3rdy1(~n3rdy1@2600:1700:4570:3480:1b88:50f:dae0:9293)
2022-01-11 02:11:17 +0100albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
2022-01-11 02:11:38 +0100euandreh(~euandreh@2804:14c:33:9fe5:87d8:fa0a:4d3d:df57)
2022-01-11 02:12:57 +0100falafel(~falafel@2603-8000-d800-688c-54f8-65c3-409b-d4a1.res6.spectrum.com) (Ping timeout: 240 seconds)
2022-01-11 02:13:54 +0100Gurkenglas(~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) (Ping timeout: 256 seconds)
2022-01-11 02:17:24 +0100albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8)
2022-01-11 02:17:46 +0100falafel(~falafel@2603-8000-d800-688c-54f8-65c3-409b-d4a1.res6.spectrum.com)
2022-01-11 02:23:29 +0100DNH(~DNH@2a02:8108:1100:16d8:80ee:56b1:c7cc:d16d) (Quit: Textual IRC Client: www.textualapp.com)
2022-01-11 02:23:57 +0100jkaye(~jkaye@2601:281:8300:7530:d171:6c14:e395:f91b) (Ping timeout: 240 seconds)
2022-01-11 02:27:37 +0100falafel(~falafel@2603-8000-d800-688c-54f8-65c3-409b-d4a1.res6.spectrum.com) (Ping timeout: 240 seconds)
2022-01-11 02:30:45 +0100ProfSimm(~ProfSimm@87.227.196.109) (Ping timeout: 256 seconds)
2022-01-11 02:34:33 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Quit: WeeChat 3.4)
2022-01-11 02:35:17 +0100Inst(~delicacie@2601:6c4:4080:3f80:35fa:dcbe:dd4e:5a43) (Ping timeout: 240 seconds)
2022-01-11 02:35:24 +0100 <albet70> how to get all k from Map k v?
2022-01-11 02:35:48 +0100 <Axman6> @hoogle keys
2022-01-11 02:35:48 +0100 <lambdabot> Data.IntMap.Internal keys :: IntMap a -> [Key]
2022-01-11 02:35:48 +0100 <lambdabot> Data.IntMap.Lazy keys :: IntMap a -> [Key]
2022-01-11 02:35:48 +0100 <lambdabot> Data.IntMap.Strict keys :: IntMap a -> [Key]
2022-01-11 02:35:56 +0100 <Axman6> @hoogle Map k a -> [k]
2022-01-11 02:35:57 +0100 <lambdabot> Data.Map.Internal keys :: Map k a -> [k]
2022-01-11 02:35:57 +0100 <lambdabot> Data.Map.Lazy keys :: Map k a -> [k]
2022-01-11 02:35:57 +0100 <lambdabot> Data.Map.Strict keys :: Map k a -> [k]
2022-01-11 02:37:11 +0100Inst(~delicacie@c-98-208-218-119.hsd1.fl.comcast.net)
2022-01-11 02:39:58 +0100xsperry(~xs@user/xsperry) (Ping timeout: 256 seconds)
2022-01-11 02:41:05 +0100 <albet70> \k -> lookup k target == flip lookup target?
2022-01-11 02:42:14 +0100 <Axman6> yep
2022-01-11 02:42:24 +0100 <albet70> how to $ to express this?
2022-01-11 02:42:33 +0100 <Axman6> or (`lookup` target)
2022-01-11 02:42:49 +0100 <Axman6> I don't understand the question
2022-01-11 02:43:03 +0100 <albet70> "Axman6 :or (`lookup` target)", could with $?
2022-01-11 02:44:04 +0100 <Axman6> I don't know what that means. what code are you trying to write that doesn't work?
2022-01-11 02:45:18 +0100 <albet70> never mind, just a little wounder if $ can change the argument order
2022-01-11 02:46:01 +0100 <Axman6> :t ($)
2022-01-11 02:46:02 +0100 <lambdabot> (a -> b) -> a -> b
2022-01-11 02:47:35 +0100 <albet70> :t const
2022-01-11 02:47:36 +0100 <lambdabot> a -> b -> a
2022-01-11 02:56:59 +0100 <ephemient> :t \target -> ($ target) . lookup
2022-01-11 02:57:00 +0100 <lambdabot> Eq a => [(a, b)] -> a -> Maybe b
2022-01-11 02:57:55 +0100 <ephemient> so sure, you can find a way to express (flip lookup target) using ($), but it doesn't feel natural
2022-01-11 03:02:27 +0100 <monochrom> It's pretty contrived.
2022-01-11 03:05:52 +0100ub(~Thunderbi@p200300ecdf0994f52db7d35c756e5286.dip0.t-ipconnect.de)
2022-01-11 03:06:57 +0100TonyStone(~TonyStone@2603-7080-8607-c36a-9cdb-69bc-753b-1e50.res6.spectrum.com)
2022-01-11 03:07:22 +0100ubert(~Thunderbi@p200300ecdf0994f82db7d35c756e5286.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
2022-01-11 03:07:22 +0100ububert
2022-01-11 03:08:52 +0100machinedgod(~machinedg@24.105.81.50) (Ping timeout: 256 seconds)
2022-01-11 03:13:34 +0100califax-(~califax@user/califx)
2022-01-11 03:13:58 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2022-01-11 03:14:39 +0100califax(~califax@user/califx) (Ping timeout: 276 seconds)
2022-01-11 03:14:40 +0100califax-califax
2022-01-11 03:18:28 +0100euandreh(~euandreh@2804:14c:33:9fe5:87d8:fa0a:4d3d:df57) (Ping timeout: 268 seconds)
2022-01-11 03:22:13 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-01-11 03:22:13 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-01-11 03:22:13 +0100wroathe(~wroathe@user/wroathe)
2022-01-11 03:23:19 +0100little_mac(~little_ma@2601:410:4300:3ce0:5835:5767:1aa7:b5ec) (Remote host closed the connection)
2022-01-11 03:24:24 +0100little_mac(~little_ma@2601:410:4300:3ce0:55c5:5707:fdcb:78cd)
2022-01-11 03:28:02 +0100neurocyte09175(~neurocyte@IP-045143079193.dynamic.medianet-world.de)
2022-01-11 03:28:02 +0100neurocyte09175(~neurocyte@IP-045143079193.dynamic.medianet-world.de) (Changing host)
2022-01-11 03:28:02 +0100neurocyte09175(~neurocyte@user/neurocyte)
2022-01-11 03:29:16 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2022-01-11 03:30:15 +0100neurocyte0917(~neurocyte@user/neurocyte) (Ping timeout: 256 seconds)
2022-01-11 03:30:15 +0100neurocyte09175neurocyte0917
2022-01-11 03:30:20 +0100cheater(~Username@user/cheater) (Read error: Connection reset by peer)
2022-01-11 03:30:37 +0100xff0x(~xff0x@2001:1a81:5310:700:28af:ed1a:1e0a:acc) (Ping timeout: 240 seconds)
2022-01-11 03:32:37 +0100xff0x(~xff0x@2001:1a81:534d:9900:3a80:4bac:7552:9848)
2022-01-11 03:33:12 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-01-11 03:33:12 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-01-11 03:33:12 +0100wroathe(~wroathe@user/wroathe)
2022-01-11 03:33:47 +0100cheater(~Username@user/cheater)
2022-01-11 03:34:51 +0100lavaman(~lavaman@98.38.249.169)
2022-01-11 03:37:17 +0100raym(~raym@user/raym)
2022-01-11 03:39:01 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 240 seconds)
2022-01-11 03:43:16 +0100xsperry(~xs@user/xsperry)
2022-01-11 03:43:26 +0100Akiva(~Akiva@user/Akiva) (Ping timeout: 256 seconds)
2022-01-11 03:53:29 +0100lavaman(~lavaman@98.38.249.169)
2022-01-11 03:58:58 +0100xkuru(~xkuru@user/xkuru) (Read error: Connection reset by peer)
2022-01-11 03:59:04 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-01-11 03:59:21 +0100lavaman(~lavaman@98.38.249.169)
2022-01-11 04:04:49 +0100tomboy64(~tomboy64@user/tomboy64)
2022-01-11 04:05:32 +0100mikoto-chan(~mikoto-ch@185.25.79.189) (Ping timeout: 256 seconds)
2022-01-11 04:07:34 +0100mikoto-chan(~mikoto-ch@185.25.79.189)
2022-01-11 04:07:39 +0100jushur(~human@user/jushur) (Quit: ¯\_(ツ)_/¯)
2022-01-11 04:08:25 +0100BrokenClutch(~pioneer@2804:d41:c292:6c00:33d8:d2f1:d8af:153e)
2022-01-11 04:09:07 +0100 <BrokenClutch> I've learned the difference between srfi-1's fold and haskell
2022-01-11 04:09:12 +0100 <BrokenClutch> \o/
2022-01-11 04:12:03 +0100 <EvanR> which is what
2022-01-11 04:13:24 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
2022-01-11 04:13:24 +0100finn_elija(~finn_elij@user/finn-elija/x-0085643)
2022-01-11 04:13:24 +0100finn_elijaFinnElija
2022-01-11 04:16:26 +0100 <Axman6> you haven't truly learnt it if you can't teach us :)
2022-01-11 04:17:09 +0100pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.4)
2022-01-11 04:18:03 +0100 <shapr> Is Axman6 still the king of the channel?
2022-01-11 04:18:13 +0100mikoto-chan(~mikoto-ch@185.25.79.189) (Ping timeout: 240 seconds)
2022-01-11 04:18:45 +0100 <Axman6> yes, and no one know why D:
2022-01-11 04:18:48 +0100 <Axman6> except you
2022-01-11 04:18:56 +0100shaprcackles evilly
2022-01-11 04:20:28 +0100bitmapper(uid464869@id-464869.lymington.irccloud.com)
2022-01-11 04:20:33 +0100 <Axman6> I was very good and refrained from weilding my power yesterday when someone was talking _a lot_ of nonsense
2022-01-11 04:20:50 +0100 <Axman6> got very close to @where ops'ing though
2022-01-11 04:20:55 +0100 <shapr> well, if you got the ops
2022-01-11 04:21:07 +0100 <shapr> you've been around to know the right thing to do
2022-01-11 04:29:42 +0100 <BrokenClutch> the struct of foldl on srfi-1 is just a reverse of foldr
2022-01-11 04:30:06 +0100 <BrokenClutch> like, foldr is a_1 to a_n and foldl is a_n to a_1
2022-01-11 04:30:19 +0100 <BrokenClutch> with almost the same algorithm
2022-01-11 04:31:12 +0100 <BrokenClutch> foldl f i l = (f a_n (foldl f i (cdr l))
2022-01-11 04:32:18 +0100 <BrokenClutch> foldr f i l = (f a_1 (foldr f i (cdr l)))
2022-01-11 04:32:35 +0100 <BrokenClutch> with l on foldl being (a_n ... a_1)
2022-01-11 04:32:36 +0100 <EvanR> that seems backwards
2022-01-11 04:32:45 +0100 <BrokenClutch> and l on foldr being (a_1 ... a_n)
2022-01-11 04:32:50 +0100 <BrokenClutch> yeah, it's backwards
2022-01-11 04:33:26 +0100jkaye_(~qicruser@2604:ca00:158:98c7::662:b620)
2022-01-11 04:34:30 +0100 <Axman6> there is a funcamental difference between foldl and foldr - one can run in constant space, the other allows for laziness in a lazy language, but leads to stack overflows in a strict language or when using strict functions
2022-01-11 04:38:08 +0100 <BrokenClutch> you can't have infinite loops with foldr
2022-01-11 04:38:16 +0100 <BrokenClutch> in eager languages (obviosly)
2022-01-11 04:38:29 +0100 <BrokenClutch> it would be a infinite loop
2022-01-11 04:38:33 +0100 <BrokenClutch> which is a big nono
2022-01-11 04:40:22 +0100gabiruh(~gabiruh@vps19177.publiccloud.com.br) (Ping timeout: 260 seconds)
2022-01-11 04:40:37 +0100gabiruh(~gabiruh@vps19177.publiccloud.com.br)
2022-01-11 04:40:40 +0100mikoto-chan(~mikoto-ch@185.25.79.189)
2022-01-11 04:41:03 +0100Erutuon(~Erutuon@user/erutuon)
2022-01-11 04:41:29 +0100 <dibblego> well you can, if you fix the foldr implementation
2022-01-11 04:42:56 +0100td_(~td@94.134.91.23) (Ping timeout: 256 seconds)
2022-01-11 04:44:32 +0100td_(~td@94.134.91.153)
2022-01-11 04:44:47 +0100 <BrokenClutch> srfi is dumb
2022-01-11 04:44:51 +0100 <BrokenClutch> there are others
2022-01-11 04:45:07 +0100 <BrokenClutch> actually, fold is dumb
2022-01-11 04:45:12 +0100terrorjack(~terrorjac@2a01:4f8:1c1e:509a::1) (Quit: The Lounge - https://thelounge.chat)
2022-01-11 04:45:21 +0100 <BrokenClutch> (i'm sorry, just joking, don't kill me)
2022-01-11 04:46:26 +0100terrorjack(~terrorjac@2a01:4f8:1c1e:509a::1)
2022-01-11 04:47:53 +0100noddy(~user@user/noddy) (Quit: WeeChat 3.4)
2022-01-11 04:49:09 +0100noddy(~user@user/noddy)
2022-01-11 04:51:53 +0100 <dibblego> already dead to me bro
2022-01-11 04:52:17 +0100n3rdy1(~n3rdy1@2600:1700:4570:3480:1b88:50f:dae0:9293) (Ping timeout: 240 seconds)
2022-01-11 05:01:00 +0100yauhsien_(~yauhsien@61-231-29-214.dynamic-ip.hinet.net)
2022-01-11 05:01:00 +0100yauhsien(~yauhsien@61-231-29-214.dynamic-ip.hinet.net) (Read error: Connection reset by peer)
2022-01-11 05:05:54 +0100n3rdy1(~n3rdy1@2600:1700:4570:3480::41)
2022-01-11 05:06:15 +0100user322(~user322@75-32-237-142.lightspeed.rnpsca.sbcglobal.net)
2022-01-11 05:06:48 +0100Jing(~hedgehog@240e:390:7c53:a7e1:69b8:e285:4414:d6cb)
2022-01-11 05:07:18 +0100bontaq(~user@ool-45779fe5.dyn.optonline.net) (Ping timeout: 256 seconds)
2022-01-11 05:08:42 +0100 <Axman6> does anyone have a relatively modern document on binding to C libraries from Haskell? I'd love to automate as much as possible (.h in, .hs out) and not sure what the current state of the art is.
2022-01-11 05:14:15 +0100wyrd(~wyrd@gateway/tor-sasl/wyrd) (Ping timeout: 276 seconds)
2022-01-11 05:15:48 +0100wyrd(~wyrd@gateway/tor-sasl/wyrd)
2022-01-11 05:22:02 +0100 <BrokenClutch> Axman6 capi ftw
2022-01-11 05:23:17 +0100waleee(~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4) (Ping timeout: 240 seconds)
2022-01-11 05:24:28 +0100 <c_wraith> starting at the .h file is too late. start from the specification, create bindings from that. (only works for one C library: https://github.com/ekmett/gl )
2022-01-11 05:25:00 +0100 <Axman6> I'm just not sure what tools exist these days to help automate things
2022-01-11 05:25:46 +0100mbuf(~Shakthi@122.178.183.53)
2022-01-11 05:28:38 +0100user322(~user322@75-32-237-142.lightspeed.rnpsca.sbcglobal.net) (Remote host closed the connection)
2022-01-11 05:35:40 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-01-11 05:35:57 +0100lavaman(~lavaman@98.38.249.169)
2022-01-11 05:39:10 +0100 <ephemient> hsc2hs still exists
2022-01-11 05:39:36 +0100wyrd(~wyrd@gateway/tor-sasl/wyrd) (Ping timeout: 276 seconds)
2022-01-11 05:45:54 +0100deadmarshal(~deadmarsh@95.38.231.124)
2022-01-11 05:48:28 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
2022-01-11 05:50:36 +0100wyrd(~wyrd@gateway/tor-sasl/wyrd)
2022-01-11 05:53:36 +0100jkaye_(~qicruser@2604:ca00:158:98c7::662:b620) (Read error: Connection reset by peer)
2022-01-11 05:55:28 +0100yauhsien_(~yauhsien@61-231-29-214.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-01-11 05:56:19 +0100yauhsien(~yauhsien@61-231-29-214.dynamic-ip.hinet.net)
2022-01-11 05:56:26 +0100Jing(~hedgehog@240e:390:7c53:a7e1:69b8:e285:4414:d6cb) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2022-01-11 05:57:34 +0100sim590(~simon@modemcable090.207-203-24.mc.videotron.ca) (Ping timeout: 268 seconds)
2022-01-11 06:01:12 +0100pavonia(~user@user/siracusa)
2022-01-11 06:02:57 +0100n3rdy1(~n3rdy1@2600:1700:4570:3480::41) (Ping timeout: 240 seconds)
2022-01-11 06:03:33 +0100HotblackDesiato(~HotblackD@gateway/tor-sasl/hotblackdesiato) (Remote host closed the connection)
2022-01-11 06:03:52 +0100HotblackDesiato(~HotblackD@gateway/tor-sasl/hotblackdesiato)
2022-01-11 06:05:50 +0100nhatanh02(~satori@123.24.172.30)
2022-01-11 06:05:58 +0100yauhsien(~yauhsien@61-231-29-214.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-01-11 06:06:07 +0100tommd(~tommd@75-164-130-101.ptld.qwest.net)
2022-01-11 06:06:39 +0100yauhsien(~yauhsien@61-231-29-214.dynamic-ip.hinet.net)
2022-01-11 06:10:17 +0100ensyde(~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 240 seconds)
2022-01-11 06:10:35 +0100sim590(~simon@modemcable090.207-203-24.mc.videotron.ca)
2022-01-11 06:15:53 +0100n3rdy1(~n3rdy1@2600:1700:4570:3480:1b88:50f:dae0:9293)
2022-01-11 06:16:28 +0100yauhsien(~yauhsien@61-231-29-214.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-01-11 06:17:01 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 240 seconds)
2022-01-11 06:17:09 +0100yauhsien(~yauhsien@61-231-29-214.dynamic-ip.hinet.net)
2022-01-11 06:19:13 +0100 <jackdk> Axman6: try frase on #bfpg - he gave a talk on it a couple of years back
2022-01-11 06:21:25 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.4)
2022-01-11 06:24:58 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
2022-01-11 06:25:09 +0100takuan(~takuan@178-116-218-225.access.telenet.be)
2022-01-11 06:25:10 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-01-11 06:25:10 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-01-11 06:25:10 +0100wroathe(~wroathe@user/wroathe)
2022-01-11 06:26:59 +0100yauhsien(~yauhsien@61-231-29-214.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-01-11 06:27:40 +0100yauhsien(~yauhsien@61-231-29-214.dynamic-ip.hinet.net)
2022-01-11 06:29:53 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2022-01-11 06:33:26 +0100deadmarshal(~deadmarsh@95.38.231.124) (Ping timeout: 256 seconds)
2022-01-11 06:35:06 +0100 <Axman6> Found it! thanks jackdk
2022-01-11 06:36:16 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Ping timeout: 256 seconds)
2022-01-11 06:37:29 +0100yauhsien(~yauhsien@61-231-29-214.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-01-11 06:38:10 +0100yauhsien(~yauhsien@61-231-29-214.dynamic-ip.hinet.net)
2022-01-11 06:40:08 +0100puke(~puke@user/puke) ()
2022-01-11 06:42:11 +0100 <EvanR> is there every a downside to putting ~ on pair pattern match
2022-01-11 06:42:30 +0100 <EvanR> is there a performance hit
2022-01-11 06:44:03 +0100nhatanh02(~satori@123.24.172.30) (Ping timeout: 256 seconds)
2022-01-11 06:44:22 +0100 <EvanR> just realized I don't know the difference between ~ and no ~ on deconstructing a pair in a let binding
2022-01-11 06:45:03 +0100 <EvanR> and I'm using that annoying speech pattern. What is the different between ~ and no ~ on deconstructing a pair in a let binding?
2022-01-11 06:48:33 +0100 <c_wraith> nothing
2022-01-11 06:48:54 +0100 <c_wraith> using a let binding and a ~ both do the same thing.
2022-01-11 06:49:21 +0100 <c_wraith> In that they both mean the (,) constructor isn't evaluated until one of its arguments is demanded
2022-01-11 06:51:16 +0100 <EvanR> but if used in do notation or in a lambda argument, it does something right
2022-01-11 06:51:32 +0100 <c_wraith> pattern matches in a let expression are irrefutable by default.
2022-01-11 06:51:45 +0100 <c_wraith> Pattern matches in a function definition, case, or lambda are not
2022-01-11 06:53:25 +0100 <EvanR> cool
2022-01-11 06:54:07 +0100 <c_wraith> oh. and pattern matches in a <- are refutable by default, with special desugaring to use MonadFail if they are refuted.
2022-01-11 06:55:04 +0100moet(~moet@mobile-166-170-41-195.mycingular.net)
2022-01-11 06:56:40 +0100 <int-e> > fix (\ ~(a,b) -> (b+19, 23))
2022-01-11 06:56:42 +0100 <lambdabot> (42,23)
2022-01-11 06:56:49 +0100 <int-e> > fix (\(a,b) -> (b+19, 23))
2022-01-11 06:56:51 +0100 <lambdabot> *Exception: <<loop>>
2022-01-11 06:58:54 +0100wyrd(~wyrd@gateway/tor-sasl/wyrd) (Ping timeout: 276 seconds)
2022-01-11 06:59:30 +0100vysn(~vysn@user/vysn)
2022-01-11 07:00:04 +0100Codaraxis_(~Codaraxis@user/codaraxis) (Ping timeout: 256 seconds)
2022-01-11 07:00:10 +0100wyrd(~wyrd@gateway/tor-sasl/wyrd)
2022-01-11 07:03:00 +0100h_(rootvegeta@fsf/member/hays) (Quit: h_)
2022-01-11 07:05:35 +0100Inst(~delicacie@c-98-208-218-119.hsd1.fl.comcast.net) (Ping timeout: 256 seconds)
2022-01-11 07:06:09 +0100moet(~moet@mobile-166-170-41-195.mycingular.net) (Ping timeout: 256 seconds)
2022-01-11 07:06:53 +0100slowButPresent(~slowButPr@user/slowbutpresent) (Quit: leaving)
2022-01-11 07:07:10 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
2022-01-11 07:07:47 +0100yauhsien(~yauhsien@61-231-29-214.dynamic-ip.hinet.net) (Read error: Connection reset by peer)
2022-01-11 07:08:19 +0100yauhsien(~yauhsien@61-231-29-214.dynamic-ip.hinet.net)
2022-01-11 07:11:36 +0100deadmarshal(~deadmarsh@95.38.231.124)
2022-01-11 07:11:59 +0100hays(rootvegeta@fsf/member/hays)
2022-01-11 07:15:35 +0100Guest72(~Guest72@82-132-214-147.dab.02.net) (Quit: Client closed)
2022-01-11 07:16:43 +0100puke(~puke@user/puke)
2022-01-11 07:18:12 +0100deadmarshal(~deadmarsh@95.38.231.124) (Ping timeout: 256 seconds)
2022-01-11 07:19:52 +0100deadmarshal(~deadmarsh@95.38.231.124)
2022-01-11 07:25:01 +0100mikoto-chan(~mikoto-ch@185.25.79.189) (Ping timeout: 240 seconds)
2022-01-11 07:31:01 +0100kaph(~kaph@net-2-38-107-19.cust.vodafonedsl.it) (Ping timeout: 240 seconds)
2022-01-11 07:32:22 +0100vglfr(~vglfr@88.155.96.35) (Ping timeout: 256 seconds)
2022-01-11 07:44:11 +0100michalz(~michalz@185.246.204.104)
2022-01-11 07:50:21 +0100tommd(~tommd@75-164-130-101.ptld.qwest.net) (Ping timeout: 256 seconds)
2022-01-11 07:51:20 +0100nattiestnate(~nate@2001:448a:20a0:4134:25e:715f:d637:5263)
2022-01-11 07:52:44 +0100_ht(~quassel@82-169-194-8.biz.kpn.net)
2022-01-11 07:53:57 +0100shapr(~user@2601:7c0:c202:5190:cc12:44b:f211:c38f) (Ping timeout: 240 seconds)
2022-01-11 07:55:28 +0100shriekingnoise(~shrieking@186.137.144.80) (Quit: Quit)
2022-01-11 07:56:14 +0100zaquest(~notzaques@5.130.79.72) (Remote host closed the connection)
2022-01-11 07:58:26 +0100Erutuon(~Erutuon@user/erutuon) (Ping timeout: 256 seconds)
2022-01-11 08:01:33 +0100mcglk(~mcglk@131.191.49.120) (Read error: Connection reset by peer)
2022-01-11 08:01:59 +0100mcglk(~mcglk@131.191.49.120)
2022-01-11 08:05:02 +0100nhatanh02(~satori@123.24.172.30)
2022-01-11 08:09:16 +0100Erutuon(~Erutuon@user/erutuon)
2022-01-11 08:09:54 +0100nattiestnate(~nate@2001:448a:20a0:4134:25e:715f:d637:5263) (Quit: WeeChat 3.4)
2022-01-11 08:12:17 +0100xff0x(~xff0x@2001:1a81:534d:9900:3a80:4bac:7552:9848) (Ping timeout: 240 seconds)
2022-01-11 08:12:57 +0100xff0x(~xff0x@2001:1a81:534d:9900:3a80:4bac:7552:9848)
2022-01-11 08:23:03 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Quit: Leaving)
2022-01-11 08:23:20 +0100 <jackdk> > fix error
2022-01-11 08:23:21 +0100 <lambdabot> "*Exception: *Exception: *Exception: *Exception: *Exception: *Exception: *Ex...
2022-01-11 08:23:28 +0100 <jackdk> Alas, my error was not fixed.
2022-01-11 08:27:17 +0100yangby(~secret@115.199.105.217)
2022-01-11 08:28:35 +0100Jing(~hedgehog@240e:390:7c53:a7e1:2c67:7cfa:cdb8:6538)
2022-01-11 08:34:14 +0100 <ephemient> speaking of pattern matches in let expressions… this order isn't defined, is it?
2022-01-11 08:34:14 +0100 <ephemient> > let !_ = error "1"; !_ = error "2" in ()
2022-01-11 08:34:15 +0100 <lambdabot> *Exception: 2
2022-01-11 08:34:33 +0100 <c_wraith> it is in fact explicitly undefined
2022-01-11 08:35:12 +0100 <c_wraith> ghc is allowed to treat all bottoms as equivalent
2022-01-11 08:35:57 +0100little_mac(~little_ma@2601:410:4300:3ce0:55c5:5707:fdcb:78cd) (Ping timeout: 240 seconds)
2022-01-11 08:36:07 +0100BrokenClutch(~pioneer@2804:d41:c292:6c00:33d8:d2f1:d8af:153e) ()
2022-01-11 08:37:24 +0100mikoto-chan(~mikoto-ch@95.214.66.65)
2022-01-11 08:39:08 +0100little_mac(~little_ma@2601:410:4300:3ce0:55c5:5707:fdcb:78cd)
2022-01-11 08:39:34 +0100`2jt(~jtomas@10.red-83-58-228.dynamicip.rima-tde.net)
2022-01-11 08:47:01 +0100mikoto-chan(~mikoto-ch@95.214.66.65) (Ping timeout: 256 seconds)
2022-01-11 08:47:24 +0100mikoto-chan(~mikoto-ch@95.214.66.65)
2022-01-11 08:51:24 +0100mc47(~mc47@xmonad/TheMC47)
2022-01-11 08:51:51 +0100Akiva(~Akiva@user/Akiva)
2022-01-11 08:55:47 +0100yangby(~secret@115.199.105.217) (Quit: Go out for a walk and buy a drink.)
2022-01-11 08:57:26 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-01-11 08:58:05 +0100gehmehgeh(~user@user/gehmehgeh)
2022-01-11 09:00:04 +0100jonathanx(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
2022-01-11 09:02:12 +0100Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2022-01-11 09:03:00 +0100fef(~thedawn@user/thedawn)
2022-01-11 09:03:35 +0100coot(~coot@89-64-85-93.dynamic.chello.pl)
2022-01-11 09:03:36 +0100mikoto-chan(~mikoto-ch@95.214.66.65) (Ping timeout: 256 seconds)
2022-01-11 09:04:29 +0100lortabac(~lortabac@2a01:e0a:541:b8f0:d6ff:672a:8ae7:74fd)
2022-01-11 09:05:06 +0100mikoto-chan(~mikoto-ch@95.214.66.65)
2022-01-11 09:05:20 +0100machinedgod(~machinedg@24.105.81.50)
2022-01-11 09:11:17 +0100mvk(~mvk@2607:fea8:5cdd:f000::55f8) (Ping timeout: 240 seconds)
2022-01-11 09:14:32 +0100califax(~califax@user/califx) (Remote host closed the connection)
2022-01-11 09:15:43 +0100califax(~califax@user/califx)
2022-01-11 09:18:45 +0100kjak(~kjak@pool-108-45-56-21.washdc.fios.verizon.net) (Ping timeout: 256 seconds)
2022-01-11 09:27:06 +0100max22-(~maxime@2a01cb08833598007fce73d4e7f21a7b.ipv6.abo.wanadoo.fr)
2022-01-11 09:27:38 +0100dhouthoo(~dhouthoo@178-117-36-167.access.telenet.be)
2022-01-11 09:28:49 +0100cfricke(~cfricke@user/cfricke)
2022-01-11 09:30:35 +0100MajorBiscuit(~MajorBisc@c-001-007-038.client.tudelft.eduvpn.nl)
2022-01-11 09:31:44 +0100sektor|2(~kvirc@87.227.175.182)
2022-01-11 09:33:30 +0100jonathanx(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Remote host closed the connection)
2022-01-11 09:33:47 +0100jonathanx(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
2022-01-11 09:37:05 +0100mvk(~mvk@2607:fea8:5cdd:f000::55f8)
2022-01-11 09:38:13 +0100jonathanx(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Ping timeout: 240 seconds)
2022-01-11 09:38:19 +0100jonathanx_(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
2022-01-11 09:38:46 +0100jonathanx_(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Remote host closed the connection)
2022-01-11 09:39:05 +0100jonathanx_(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
2022-01-11 09:40:26 +0100econo(uid147250@user/econo) (Quit: Connection closed for inactivity)
2022-01-11 09:48:13 +0100yauhsien(~yauhsien@61-231-29-214.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-01-11 09:48:53 +0100yauhsien(~yauhsien@61-231-29-214.dynamic-ip.hinet.net)
2022-01-11 09:51:32 +0100joel135(sid136450@id-136450.hampstead.irccloud.com) (Ping timeout: 240 seconds)
2022-01-11 09:53:18 +0100little_mac(~little_ma@2601:410:4300:3ce0:55c5:5707:fdcb:78cd) (Remote host closed the connection)
2022-01-11 09:55:07 +0100jgeerds(~jgeerds@55d4bbed.access.ecotel.net)
2022-01-11 09:55:29 +0100joel135(sid136450@id-136450.hampstead.irccloud.com)
2022-01-11 09:56:08 +0100sus(zero@user/zeromomentum) (Quit: the lounge - https://webirc.envs.net)
2022-01-11 09:56:44 +0100sus(zero@user/zeromomentum)
2022-01-11 09:58:43 +0100yauhsien(~yauhsien@61-231-29-214.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-01-11 09:59:24 +0100yauhsien(~yauhsien@61-231-29-214.dynamic-ip.hinet.net)
2022-01-11 10:00:08 +0100surgeon[m](~surge9nma@2001:470:69fc:105::f585) (Quit: You have been kicked for being idle)
2022-01-11 10:02:47 +0100ouestbillie(~gallup@192-222-138-215.qc.cable.ebox.net) (Remote host closed the connection)
2022-01-11 10:03:40 +0100cheater(~Username@user/cheater) (Ping timeout: 256 seconds)
2022-01-11 10:03:49 +0100ubert(~Thunderbi@p200300ecdf0994f52db7d35c756e5286.dip0.t-ipconnect.de) (Remote host closed the connection)
2022-01-11 10:03:50 +0100cheater(~Username@user/cheater)
2022-01-11 10:04:38 +0100tzh(~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz)
2022-01-11 10:09:13 +0100yauhsien(~yauhsien@61-231-29-214.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-01-11 10:09:54 +0100yauhsien(~yauhsien@61-231-29-214.dynamic-ip.hinet.net)
2022-01-11 10:10:20 +0100coot(~coot@89-64-85-93.dynamic.chello.pl) (Quit: coot)
2022-01-11 10:11:47 +0100acidjnk(~acidjnk@p200300d0c7271e155922c761977fca48.dip0.t-ipconnect.de)
2022-01-11 10:11:47 +0100acidjnk_new(~acidjnk@p200300d0c7271e155922c761977fca48.dip0.t-ipconnect.de)
2022-01-11 10:11:47 +0100_ht(~quassel@82-169-194-8.biz.kpn.net) (Remote host closed the connection)
2022-01-11 10:12:06 +0100neurocyte0917(~neurocyte@user/neurocyte) (Quit: The Lounge - https://thelounge.chat)
2022-01-11 10:14:34 +0100_ht(~quassel@82-169-194-8.biz.kpn.net)
2022-01-11 10:14:45 +0100neurocyte0917(~neurocyte@IP-045143079193.dynamic.medianet-world.de)
2022-01-11 10:14:45 +0100neurocyte0917(~neurocyte@IP-045143079193.dynamic.medianet-world.de) (Changing host)
2022-01-11 10:14:45 +0100neurocyte0917(~neurocyte@user/neurocyte)
2022-01-11 10:17:36 +0100geekosaur(~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b)))
2022-01-11 10:17:36 +0100allbery_b(~geekosaur@xmonad/geekosaur)
2022-01-11 10:17:39 +0100allbery_bgeekosaur
2022-01-11 10:18:24 +0100mikoto-chan(~mikoto-ch@95.214.66.65) (Ping timeout: 256 seconds)
2022-01-11 10:19:15 +0100mmhat(~mmh@55d441e1.access.ecotel.net)
2022-01-11 10:28:28 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-01-11 10:35:12 +0100madjestic(~madjestic@88-159-247-120.fixed.kpn.net)
2022-01-11 10:35:56 +0100_FlawLess_(~user@2a01:e0a:a4:7098::10)
2022-01-11 10:41:03 +0100zaquest(~notzaques@5.130.79.72)
2022-01-11 10:41:45 +0100coot(~coot@89-64-85-93.dynamic.chello.pl)
2022-01-11 10:43:05 +0100kuribas(~user@ptr-25vy0ia1hzdpftx2lxu.18120a2.ip6.access.telenet.be)
2022-01-11 10:50:13 +0100Akiva(~Akiva@user/Akiva) (Ping timeout: 240 seconds)
2022-01-11 10:53:47 +0100the_last_immorta(~thelastim@2001:470:69fc:105::1:4d57) (Quit: You have been kicked for being idle)
2022-01-11 10:54:13 +0100xff0x(~xff0x@2001:1a81:534d:9900:3a80:4bac:7552:9848) (Ping timeout: 240 seconds)
2022-01-11 10:54:35 +0100InternetManaging(~imjmatrix@2001:470:69fc:105::1:2ea5) (Quit: You have been kicked for being idle)
2022-01-11 10:55:05 +0100Erutuon(~Erutuon@user/erutuon) (Ping timeout: 256 seconds)
2022-01-11 10:55:08 +0100xff0x(~xff0x@2001:1a81:534d:9900:e459:15a9:4623:d8a6)
2022-01-11 10:58:31 +0100jkaye_(~qicruser@2601:281:8300:7530:81c9:15c5:1001:5f30)
2022-01-11 10:59:07 +0100jkaye_(~qicruser@2601:281:8300:7530:81c9:15c5:1001:5f30) (Read error: Connection reset by peer)
2022-01-11 11:05:17 +0100jgeerds(~jgeerds@55d4bbed.access.ecotel.net) (Ping timeout: 256 seconds)
2022-01-11 11:05:55 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2022-01-11 11:07:29 +0100syrkis(syrkis@gateway/vpn/protonvpn/syrkis)
2022-01-11 11:09:36 +0100kjak(~kjak@pool-108-45-56-21.washdc.fios.verizon.net)
2022-01-11 11:10:02 +0100maroloccio(~marolocci@151.75.59.229)
2022-01-11 11:10:48 +0100ubert(~Thunderbi@2a02:8109:9880:303c:4371:6bef:aafb:f58d)
2022-01-11 11:11:00 +0100n8chan(~nate@108-233-125-227.lightspeed.sntcca.sbcglobal.net) (Read error: Connection reset by peer)
2022-01-11 11:11:58 +0100n8chan(~nate@108-233-125-227.lightspeed.sntcca.sbcglobal.net)
2022-01-11 11:15:38 +0100chele(~chele@user/chele)
2022-01-11 11:16:32 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2022-01-11 11:18:19 +0100Gurkenglas(~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de)
2022-01-11 11:22:17 +0100mikoto-chan(~mikoto-ch@91-157-120-246.elisa-laajakaista.fi)
2022-01-11 11:23:10 +0100Topsi(~Tobias@dyndsl-095-033-027-133.ewe-ip-backbone.de)
2022-01-11 11:25:23 +0100euandreh(~euandreh@2804:14c:33:9fe5:4f29:e68c:50c9:fe2)
2022-01-11 11:29:36 +0100yauhsien(~yauhsien@61-231-29-214.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-01-11 11:30:16 +0100yauhsien(~yauhsien@61-231-29-214.dynamic-ip.hinet.net)
2022-01-11 11:30:41 +0100troydm(~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)
2022-01-11 11:33:29 +0100DNH(~DNH@2a02:8108:1100:16d8:a92f:4d2f:4882:4db9)
2022-01-11 11:33:47 +0100troydm(~troydm@host-176-37-124-197.b025.la.net.ua)
2022-01-11 11:35:06 +0100 <madjestic> hey guys, I have uploaded a package candidate to hackage to check if everything is ok, but it looks like hackage failed generate the documentation, even though when I generate the documentation locally (using `cabal haddock`), everything seems to be ok. Is there a way to upload hackage documentation for a hackage candidate manually?
2022-01-11 11:35:19 +0100monochrom(trebla@216.138.220.146) (Ping timeout: 256 seconds)
2022-01-11 11:36:52 +0100lavaman(~lavaman@98.38.249.169)
2022-01-11 11:36:56 +0100Lord_of_Life_(~Lord@user/lord-of-life/x-2819915)
2022-01-11 11:37:01 +0100Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 256 seconds)
2022-01-11 11:37:05 +0100ouestbillie(~gallup@192-222-138-215.qc.cable.ebox.net)
2022-01-11 11:37:28 +0100 <merijn> Yes, same 'cabal upload' command, just with -d flag
2022-01-11 11:37:30 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-01-11 11:37:43 +0100 <merijn> Also, I don't think hackage builds docs for candidates?
2022-01-11 11:38:16 +0100Lord_of_Life_Lord_of_Life
2022-01-11 11:45:50 +0100 <madjestic> merijn: just to make sure (I don't want to screw up by uploading anything permanent yet, as I am just testing), the upload command will work with the candidate upload, or documentation upload is something separate and can be updated?
2022-01-11 11:47:44 +0100__monty__(~toonn@user/toonn)
2022-01-11 11:48:11 +0100pera(~pera@user/pera)
2022-01-11 11:48:23 +0100 <madjestic> (I am reading https://hackage.haskell.org/upload as a guide, but it is not clear, if there's a distinction between candidate and normal upload)
2022-01-11 11:48:30 +0100puke(~puke@user/puke) (Ping timeout: 256 seconds)
2022-01-11 11:52:49 +0100 <madjestic> also, is there an IRC channel, dedicated to hackage?
2022-01-11 11:53:22 +0100comerijn(~merijn@83-160-49-249.ip.xs4all.nl)
2022-01-11 11:54:06 +0100 <geekosaur> #hackage but I'm not sure about user questions there
2022-01-11 11:54:57 +0100 <geekosaur> ok, looks like they're fine with it
2022-01-11 11:55:05 +0100max22-(~maxime@2a01cb08833598007fce73d4e7f21a7b.ipv6.abo.wanadoo.fr) (Remote host closed the connection)
2022-01-11 11:55:52 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
2022-01-11 12:01:15 +0100 <madjestic> geekosaur: thanks!
2022-01-11 12:01:38 +0100burnsidesLlama(~burnsides@dhcp168-021.wadham.ox.ac.uk)
2022-01-11 12:05:48 +0100maroloccio(~marolocci@151.75.59.229) (Quit: WeeChat 3.0)
2022-01-11 12:06:31 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-01-11 12:07:20 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2022-01-11 12:08:01 +0100lavaman(~lavaman@98.38.249.169)
2022-01-11 12:08:16 +0100jakalx(~jakalx@base.jakalx.net) ()
2022-01-11 12:09:37 +0100mvk(~mvk@2607:fea8:5cdd:f000::55f8) (Ping timeout: 240 seconds)
2022-01-11 12:10:17 +0100n3rdy1(~n3rdy1@2600:1700:4570:3480:1b88:50f:dae0:9293) (Ping timeout: 240 seconds)
2022-01-11 12:10:27 +0100syrkis(syrkis@gateway/vpn/protonvpn/syrkis) (Ping timeout: 256 seconds)
2022-01-11 12:11:10 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 256 seconds)
2022-01-11 12:11:59 +0100random(~random@185.219.68.251)
2022-01-11 12:12:17 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 240 seconds)
2022-01-11 12:12:44 +0100 <random> hey guys
2022-01-11 12:12:55 +0100 <geekosaur> o/
2022-01-11 12:13:07 +0100 <random> can anyone help with a probably very simple Conduit question
2022-01-11 12:13:19 +0100 <random> we have a `ConduitT () thing m result`
2022-01-11 12:13:38 +0100 <random> and need to get ([thing], result) out of it
2022-01-11 12:13:50 +0100 <random> we used to have `ConduitT () thing m ()` and used `sourceToList`
2022-01-11 12:14:20 +0100 <random> but now that it also has a result we need that as well, I found runConduitRes that just gives you the result, and sourceToList that gives you [thing], but nothing that combines both
2022-01-11 12:16:42 +0100SummerSonw(~The_viole@203.77.49.232)
2022-01-11 12:17:24 +0100comerijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
2022-01-11 12:18:37 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2022-01-11 12:19:51 +0100 <random> no actually runConduit requires a () output
2022-01-11 12:20:19 +0100jakalx(~jakalx@base.jakalx.net)
2022-01-11 12:23:12 +0100puke(~puke@user/puke)
2022-01-11 12:23:18 +0100pieguy12-(~pieguy128@bras-base-mtrlpq5031w-grc-48-67-70-102-17.dsl.bell.ca) (Ping timeout: 260 seconds)
2022-01-11 12:23:19 +0100 <geekosaur> runConduit :: Monad m => ConduitT () Void m r -> m r -- looks like r, not () ? (similar to runConduitRes)
2022-01-11 12:23:49 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2022-01-11 12:23:50 +0100 <random> it has () as the output value
2022-01-11 12:24:06 +0100 <random> Void I meant
2022-01-11 12:24:17 +0100xff0x(~xff0x@2001:1a81:534d:9900:e459:15a9:4623:d8a6) (Ping timeout: 240 seconds)
2022-01-11 12:24:23 +0100 <random> we have `ConduitT () CustomType m CustomResult`
2022-01-11 12:24:35 +0100 <random> and need [CustomType] and CustomResult
2022-01-11 12:24:38 +0100 <geekosaur> runConduitRes has Void in the same position
2022-01-11 12:24:44 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2022-01-11 12:24:48 +0100 <random> yeah
2022-01-11 12:24:51 +0100 <geekosaur> the "Res" in runConduitRes is ResourceT, not result
2022-01-11 12:24:57 +0100 <random> exactly but I misread
2022-01-11 12:25:04 +0100 <random> so I can't get it to work at all
2022-01-11 12:25:21 +0100xff0x(~xff0x@2001:1a81:534d:9900:ecd7:329:7ff4:5aa6)
2022-01-11 12:25:58 +0100 <geekosaur> I'm not a conduit expert so doubt I can help much., not sure anyone else is around this time of day/night/whatever :)
2022-01-11 12:26:27 +0100 <random> it's lunchtime over here haha
2022-01-11 12:27:33 +0100 <geekosaur> breakfast here
2022-01-11 12:28:17 +0100emf(~emf@2620:10d:c090:400::5:b9c2) (Ping timeout: 240 seconds)
2022-01-11 12:28:19 +0100 <random> damn this feels weird :D
2022-01-11 12:28:21 +0100 <random> looking at https://hackage.haskell.org/package/conduit-1.3.4.2/docs/Data-Conduit.html
2022-01-11 12:28:29 +0100 <geekosaur> and getting ready for a trip which will cost me pretty much all day
2022-01-11 12:28:30 +0100n3rdy1(~n3rdy1@2600:1700:4570:3480::41)
2022-01-11 12:28:47 +0100 <random> have fun!
2022-01-11 12:29:24 +0100 <polyphem> geekosaur: day/night/whatever ... i recently had the idea of a "mob time" , like the average time for all clients in a channel , what do you think about that concept ?
2022-01-11 12:29:49 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2022-01-11 12:29:55 +0100emf(~emf@2620:10d:c090:400::5:b9c2)
2022-01-11 12:30:51 +0100lavaman(~lavaman@98.38.249.169)
2022-01-11 12:30:53 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2022-01-11 12:31:00 +0100 <Axman6> you could hack something by turning Conduit () thing m r into Conduit () thing (StateT [thing] m) r, push each thing onto the list, then reverse at the end
2022-01-11 12:31:12 +0100 <geekosaur> polyphem, see https://ircbrowse.tomsmeding.com/lchaskell
2022-01-11 12:31:32 +0100 <random> Axman6: that sounds like fun
2022-01-11 12:31:37 +0100dschrempf(~dominik@070-207.dynamic.dsl.fonira.net)
2022-01-11 12:31:42 +0100fef(~thedawn@user/thedawn) (Ping timeout: 276 seconds)
2022-01-11 12:32:13 +0100 <random> Axman6: but it seems so weird that it's not trivial to get both the source as list and the result
2022-01-11 12:32:40 +0100 <Axman6> I feel like getting a list of results is often a code smell when it comes to stream libraries
2022-01-11 12:33:05 +0100 <polyphem> geekosaur: oh, cool , thanks
2022-01-11 12:35:00 +0100 <random> Axman6: need to serve the results through the API
2022-01-11 12:35:32 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 256 seconds)
2022-01-11 12:35:35 +0100 <Axman6> how are you building he API?
2022-01-11 12:35:49 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2022-01-11 12:36:00 +0100 <Axman6> servant IIRC has ways to stream data in the reesponse
2022-01-11 12:36:06 +0100 <random> Axman6: just a regular servant thing, the usecase is to stream a large db query
2022-01-11 12:36:16 +0100 <random> Axman6: need to check about that
2022-01-11 12:36:33 +0100 <Axman6> It may or moy not exist because I complained and asked for it :)
2022-01-11 12:37:02 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2022-01-11 12:37:41 +0100 <random> Axman6: haha
2022-01-11 12:37:55 +0100 <random> I'd still need both the [thing] and the result though, so probably that's where the codesmell is
2022-01-11 12:38:06 +0100 <random> I need the stream and the length
2022-01-11 12:38:13 +0100acidjnk(~acidjnk@p200300d0c7271e155922c761977fca48.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
2022-01-11 12:38:13 +0100acidjnk_new(~acidjnk@p200300d0c7271e155922c761977fca48.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
2022-01-11 12:38:31 +0100 <Axman6> https://hackage.haskell.org/package/servant-0.18.3/docs/Servant-API.html#t:ToSourceIO
2022-01-11 12:38:47 +0100 <Axman6> needing the length is lamesauce
2022-01-11 12:39:20 +0100whatsupdoc(uid509081@id-509081.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
2022-01-11 12:39:25 +0100xff0x(~xff0x@2001:1a81:534d:9900:ecd7:329:7ff4:5aa6) (Ping timeout: 240 seconds)
2022-01-11 12:39:38 +0100 <random> Axman6: need to calculate the "total pages" available
2022-01-11 12:39:48 +0100 <Axman6> https://hackage.haskell.org/package/servant-0.18.3/docs/Servant-API-Stream.html#t:Stream is probably a better link
2022-01-11 12:39:57 +0100 <Axman6> where's the data comming from?
2022-01-11 12:39:57 +0100 <random> everything I've been doing so far feels like lamesauce tbh :D
2022-01-11 12:40:23 +0100 <random> Axman6: postgres
2022-01-11 12:40:29 +0100 <random> we basically have
2022-01-11 12:40:32 +0100xff0x(~xff0x@2001:1a81:534d:9900:8e73:9611:d4ed:ad69)
2022-01-11 12:40:50 +0100 <Axman6> can you run two queries?
2022-01-11 12:41:22 +0100 <random> (postgresQuery .| CL.map fancyTransformation .| CL.length (we need the length before the filters) .| CL.filter someFilters) `fuseUpstream` paginate
2022-01-11 12:41:46 +0100 <random> Axman6: lol yeah of course, it's just that it's very overengineered and not very straightforward
2022-01-11 12:41:49 +0100 <random> not sure how much I can change
2022-01-11 12:42:09 +0100 <random> we don't need the length of the query, but the length of the query after some mapping
2022-01-11 12:42:13 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2022-01-11 12:42:33 +0100 <random> in (postgresQuery .| CL.map fancyMap) the query might have had 2000 results, but fancy map will return 350
2022-01-11 12:42:48 +0100 <random> we need that 350 count before CL.filer-ing the thing
2022-01-11 12:42:53 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2022-01-11 12:43:25 +0100fef(~thedawn@user/thedawn)
2022-01-11 12:44:37 +0100dschrempf(~dominik@070-207.dynamic.dsl.fonira.net) (Ping timeout: 240 seconds)
2022-01-11 12:44:40 +0100 <random> nvm I'll just take a couple of hours break and plan towards simplifying the whole thing
2022-01-11 12:44:52 +0100 <random> it's just way too complicated for what it's doing
2022-01-11 12:45:59 +0100mc47(~mc47@xmonad/TheMC47) (Remote host closed the connection)
2022-01-11 12:47:17 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 240 seconds)
2022-01-11 12:47:19 +0100 <Axman6> good luck
2022-01-11 12:47:38 +0100 <random> Axman6: I teared up while typing that
2022-01-11 12:47:49 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2022-01-11 12:48:56 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2022-01-11 12:49:01 +0100cfricke(~cfricke@user/cfricke) (Ping timeout: 240 seconds)
2022-01-11 12:53:49 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2022-01-11 12:54:37 +0100xff0x(~xff0x@2001:1a81:534d:9900:8e73:9611:d4ed:ad69) (Ping timeout: 240 seconds)
2022-01-11 12:55:01 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2022-01-11 12:55:37 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.4)
2022-01-11 12:55:43 +0100xff0x(~xff0x@2001:1a81:534d:9900:c522:bda4:b63a:6841)
2022-01-11 12:57:51 +0100briandaed(~briandaed@185.234.208.208.r.toneticgroup.pl)
2022-01-11 12:58:09 +0100acidjnk_new(~acidjnk@p200300d0c7271e153d27ba4f49b7fa4a.dip0.t-ipconnect.de)
2022-01-11 12:58:12 +0100acidjnk(~acidjnk@p200300d0c7271e153d27ba4f49b7fa4a.dip0.t-ipconnect.de)
2022-01-11 12:59:15 +0100cfricke(~cfricke@user/cfricke)
2022-01-11 12:59:57 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2022-01-11 13:00:39 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2022-01-11 13:01:32 +0100lavaman(~lavaman@98.38.249.169)
2022-01-11 13:01:42 +0100benin(~benin@183.82.176.241)
2022-01-11 13:02:13 +0100SummerSonw(~The_viole@203.77.49.232) (Ping timeout: 240 seconds)
2022-01-11 13:05:23 +0100biog(~user1@static.39.160.132.142.clients.your-server.de)
2022-01-11 13:05:37 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2022-01-11 13:06:33 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2022-01-11 13:11:48 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
2022-01-11 13:12:25 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2022-01-11 13:14:17 +0100n3rdy1(~n3rdy1@2600:1700:4570:3480::41) (Ping timeout: 240 seconds)
2022-01-11 13:14:37 +0100random_(~random@185.219.68.251)
2022-01-11 13:16:13 +0100dschrempf(~dominik@070-207.dynamic.dsl.fonira.net)
2022-01-11 13:17:14 +0100xb0o2(~xb0o2@user/xb0o2)
2022-01-11 13:17:25 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2022-01-11 13:17:28 +0100random(~random@185.219.68.251) (Ping timeout: 256 seconds)
2022-01-11 13:18:12 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2022-01-11 13:18:50 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2022-01-11 13:18:52 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
2022-01-11 13:19:33 +0100SummerSonw(~The_viole@203.77.49.232)
2022-01-11 13:21:21 +0100mc47(~mc47@xmonad/TheMC47)
2022-01-11 13:23:25 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2022-01-11 13:24:15 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2022-01-11 13:24:20 +0100dschrempf(~dominik@070-207.dynamic.dsl.fonira.net) (Quit: WeeChat 3.3)
2022-01-11 13:25:47 +0100unyu(~pyon@user/pyon) (Quit: Reboot.)
2022-01-11 13:27:14 +0100max22-(~maxime@lfbn-ren-1-1026-62.w92-139.abo.wanadoo.fr)
2022-01-11 13:29:25 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2022-01-11 13:30:05 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2022-01-11 13:32:53 +0100califax-(~califax@user/califx)
2022-01-11 13:34:06 +0100califax(~califax@user/califx) (Ping timeout: 276 seconds)
2022-01-11 13:34:07 +0100califax-califax
2022-01-11 13:36:40 +0100monochrom(trebla@216.138.220.146)
2022-01-11 13:37:46 +0100AlexNoo_AlexNoo
2022-01-11 13:39:16 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2022-01-11 13:40:57 +0100monochrom(trebla@216.138.220.146) (Ping timeout: 240 seconds)
2022-01-11 13:42:00 +0100mikoto-chan(~mikoto-ch@91-157-120-246.elisa-laajakaista.fi) (Quit: mikoto-chan)
2022-01-11 13:42:14 +0100jgeerds(~jgeerds@55d4bbed.access.ecotel.net)
2022-01-11 13:42:31 +0100Franciman(~Franciman@mx1.fracta.dev)
2022-01-11 13:42:55 +0100Franciman(~Franciman@mx1.fracta.dev) (haskell has no up to date standard, hence it's relegated to ghc slavery)
2022-01-11 13:44:42 +0100Franciman(~Franciman@mx1.fracta.dev)
2022-01-11 13:46:56 +0100xff0x(~xff0x@2001:1a81:534d:9900:c522:bda4:b63a:6841) (Ping timeout: 252 seconds)
2022-01-11 13:48:17 +0100gehmehgeh(~user@user/gehmehgeh) (Remote host closed the connection)
2022-01-11 13:48:40 +0100pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
2022-01-11 13:48:59 +0100gehmehgeh(~user@user/gehmehgeh)
2022-01-11 13:49:03 +0100nhatanh02(~satori@123.24.172.30) (Ping timeout: 256 seconds)
2022-01-11 13:53:17 +0100slack1256(~slack1256@191.126.227.94)
2022-01-11 14:02:08 +0100random__(~random@185.219.68.251)
2022-01-11 14:02:39 +0100max22-(~maxime@lfbn-ren-1-1026-62.w92-139.abo.wanadoo.fr) (Ping timeout: 256 seconds)
2022-01-11 14:02:46 +0100monochrom(trebla@216.138.220.146)
2022-01-11 14:03:47 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 256 seconds)
2022-01-11 14:04:37 +0100random_(~random@185.219.68.251) (Ping timeout: 240 seconds)
2022-01-11 14:06:26 +0100 <slack1256> I am asking for a friend that uses VSCode on ubuntu 21.10. Does the haskell extension for that editor autoinstall the haskell-language-server? It seems to have conflict with the native install via ghcup.
2022-01-11 14:06:45 +0100 <slack1256> If so, is there a way to configure the extension to choose the local/native install?
2022-01-11 14:10:27 +0100burnsidesLlama(~burnsides@dhcp168-021.wadham.ox.ac.uk) (Remote host closed the connection)
2022-01-11 14:11:00 +0100burnsidesLlama(~burnsides@dhcp168-021.wadham.ox.ac.uk)
2022-01-11 14:15:01 +0100burnsidesLlama(~burnsides@dhcp168-021.wadham.ox.ac.uk) (Ping timeout: 240 seconds)
2022-01-11 14:18:12 +0100Everything(~Everythin@37.115.210.35)
2022-01-11 14:22:36 +0100haask(~harry@user/haask) (Remote host closed the connection)
2022-01-11 14:23:58 +0100 <[itchyjunk]> I imagine people who use that editor/vscode would know more but maybe i am wrong
2022-01-11 14:24:31 +0100unyu(~pyon@user/pyon)
2022-01-11 14:24:50 +0100CiaoSen(~Jura@p200300c957347b002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
2022-01-11 14:25:21 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
2022-01-11 14:28:54 +0100xff0x(~xff0x@2001:1a81:534d:9900:c522:bda4:b63a:6841)
2022-01-11 14:29:49 +0100mc47(~mc47@xmonad/TheMC47) (Remote host closed the connection)
2022-01-11 14:31:44 +0100Inst(~delicacie@c-98-208-218-119.hsd1.fl.comcast.net)
2022-01-11 14:34:12 +0100slowButPresent(~slowButPr@user/slowbutpresent)
2022-01-11 14:41:54 +0100sim590(~simon@modemcable090.207-203-24.mc.videotron.ca) (Ping timeout: 256 seconds)
2022-01-11 14:46:16 +0100burnsidesLlama(~burnsides@dhcp168-021.wadham.ox.ac.uk)
2022-01-11 14:49:38 +0100jgeerds(~jgeerds@55d4bbed.access.ecotel.net) (Ping timeout: 252 seconds)
2022-01-11 14:50:22 +0100jgeerds(~jgeerds@55d4bbed.access.ecotel.net)
2022-01-11 14:50:33 +0100mc47(~mc47@xmonad/TheMC47)
2022-01-11 14:52:12 +0100waleee(~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4)
2022-01-11 14:55:55 +0100jgeerds(~jgeerds@55d4bbed.access.ecotel.net) (Ping timeout: 256 seconds)
2022-01-11 14:56:37 +0100burnsidesLlama(~burnsides@dhcp168-021.wadham.ox.ac.uk) (Ping timeout: 240 seconds)
2022-01-11 14:56:52 +0100michalz(~michalz@185.246.204.104) (Remote host closed the connection)
2022-01-11 14:57:03 +0100Gurkenglas(~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) (Ping timeout: 256 seconds)
2022-01-11 14:57:12 +0100fizbin(~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
2022-01-11 14:58:17 +0100waleee(~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4) (Ping timeout: 240 seconds)
2022-01-11 15:01:00 +0100waleee(~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4)
2022-01-11 15:07:44 +0100ksqsf(~user@2001:da8:d800:604:6d71:4647:806f:d6e9)
2022-01-11 15:08:00 +0100ksqsf(~user@2001:da8:d800:604:6d71:4647:806f:d6e9) (Remote host closed the connection)
2022-01-11 15:09:06 +0100ouestbillie(~gallup@192-222-138-215.qc.cable.ebox.net) (Remote host closed the connection)
2022-01-11 15:12:47 +0100sim590(~simon@modemcable090.207-203-24.mc.videotron.ca)
2022-01-11 15:18:57 +0100Midjak(~Midjak@may53-1-78-226-116-92.fbx.proxad.net)
2022-01-11 15:19:57 +0100xkuru(~xkuru@user/xkuru)
2022-01-11 15:20:17 +0100jlamothe(~jlamothe@198.251.61.229) (Quit: leaving)
2022-01-11 15:21:09 +0100michalz(~michalz@185.246.204.104)
2022-01-11 15:21:49 +0100fizbin(~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Ping timeout: 240 seconds)
2022-01-11 15:22:41 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-01-11 15:27:16 +0100burnsidesLlama(~burnsides@dhcp168-021.wadham.ox.ac.uk)
2022-01-11 15:29:12 +0100max22-(~maxime@2a01cb0883359800510125e1acff834b.ipv6.abo.wanadoo.fr)
2022-01-11 15:31:59 +0100lavaman(~lavaman@98.38.249.169)
2022-01-11 15:33:32 +0100 <byorgey> repl.it works with Nix now (https://blog.replit.com/nix), and I'd like to see if it's possible to use Nix to set up a custom REPL for a language implemented in Haskell. Anyone have experience with something like this that could offer advice or pointers to examples, etc?
2022-01-11 15:33:37 +0100emf(~emf@2620:10d:c090:400::5:b9c2) (Read error: Connection reset by peer)
2022-01-11 15:33:42 +0100 <byorgey> I don't have any experience with Nix but I'm willing to learn.
2022-01-11 15:33:53 +0100SummerSonw(~The_viole@203.77.49.232) (Ping timeout: 256 seconds)
2022-01-11 15:33:59 +0100emf_(~emf@2620:10d:c090:400::5:b9c2)
2022-01-11 15:34:30 +0100jlamothe(~jlamothe@198.251.61.229)
2022-01-11 15:34:35 +0100 <byorgey> to be more concrete, I want to try to set things up so that students can work with https://github.com/disco-lang/disco/ in repl.it
2022-01-11 15:36:43 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 256 seconds)
2022-01-11 15:37:52 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-01-11 15:37:52 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-01-11 15:37:52 +0100wroathe(~wroathe@user/wroathe)
2022-01-11 15:40:37 +0100burnsidesLlama(~burnsides@dhcp168-021.wadham.ox.ac.uk) (Ping timeout: 240 seconds)
2022-01-11 15:42:44 +0100 <Inst> gah
2022-01-11 15:42:48 +0100 <Inst> i can't finish my "homework"
2022-01-11 15:43:06 +0100 <Inst> it turns out I don't know how to apply a type constructor wrapped function to a type constructor wrapped value
2022-01-11 15:45:16 +0100 <byorgey> Inst: try pattern matching on both of them to get the function and the value out
2022-01-11 15:45:36 +0100 <byorgey> myFunction (Constructor1 f) (Constructor2 value) = ... f value ...
2022-01-11 15:45:38 +0100 <Inst> i'm trying to do it with just fmap / <*> machinery
2022-01-11 15:45:53 +0100 <Inst> IO is not a Data Constructor, though
2022-01-11 15:46:03 +0100 <byorgey> Inst: ah, in that case, <*> does exactly what you just said
2022-01-11 15:46:06 +0100 <byorgey> :type (<*>)
2022-01-11 15:46:09 +0100 <Inst> it's nested
2022-01-11 15:46:20 +0100 <Inst> i can work with one level of TCs using <*>
2022-01-11 15:46:24 +0100 <Inst> I can't work with two levels
2022-01-11 15:46:26 +0100 <Inst> IO Maybe
2022-01-11 15:46:41 +0100 <byorgey> you can, actually, but I agree it's not as straightforward.
2022-01-11 15:46:49 +0100 <Inst> dialogedFileOpenSanity = ((pure (pure openFile <*>) <*> openFilePath)) <*> (pure (<*> (Just ReadMode)))
2022-01-11 15:47:06 +0100vysn(~vysn@user/vysn) (Ping timeout: 268 seconds)
2022-01-11 15:47:07 +0100 <Inst> openFilePath delivers IO (Maybe String)
2022-01-11 15:47:30 +0100jkaye(~jkaye@2601:281:8300:7530:7cb5:a22f:ba66:1688)
2022-01-11 15:47:36 +0100 <Inst> but it's the very fact that it's not as straightforward that's worth learning how to do
2022-01-11 15:47:38 +0100 <Axman6> :t liftA2 (<*>)
2022-01-11 15:47:39 +0100 <lambdabot> (Applicative f1, Applicative f2) => f1 (f2 (a -> b)) -> f1 (f2 a) -> f1 (f2 b)
2022-01-11 15:47:43 +0100 <Inst> sorry axman6
2022-01-11 15:47:44 +0100 <Inst> :(
2022-01-11 15:47:55 +0100 <Inst> oh
2022-01-11 15:49:02 +0100acidjnk(~acidjnk@p200300d0c7271e153d27ba4f49b7fa4a.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
2022-01-11 15:49:02 +0100acidjnk_new(~acidjnk@p200300d0c7271e153d27ba4f49b7fa4a.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
2022-01-11 15:49:16 +0100 <Axman6> :t \mf ma -> (<*>) <$> (mf :: IO (Maybe (Int -> Bool)) <*> ma
2022-01-11 15:49:17 +0100 <lambdabot> error:
2022-01-11 15:49:17 +0100 <lambdabot> parse error (possibly incorrect indentation or mismatched brackets)
2022-01-11 15:49:23 +0100 <Axman6> :t \mf ma -> (<*>) <$> (mf :: IO (Maybe (Int -> Bool))) <*> ma
2022-01-11 15:49:24 +0100 <lambdabot> IO (Maybe (Int -> Bool)) -> IO (Maybe Int) -> IO (Maybe Bool)
2022-01-11 15:49:49 +0100 <Inst> well, you still didn't walk me through this
2022-01-11 15:50:03 +0100 <Axman6> I thought we went through exactly this a few days ago?
2022-01-11 15:50:05 +0100 <Inst> i mean, in the sense that I want to be able to do this with just (<*>), fmap
2022-01-11 15:50:53 +0100 <Axman6> do you see anything other than fmap and <*> in \mf ma -> (<*>) <$> mf <*> ma?
2022-01-11 15:51:14 +0100henninb(~henninb@97-116-147-100.mpls.qwest.net)
2022-01-11 15:51:31 +0100henninb(~henninb@97-116-147-100.mpls.qwest.net) (Client Quit)
2022-01-11 15:51:48 +0100 <Inst> this was my old solution, mind you
2022-01-11 15:51:49 +0100 <Inst> join $ fmap sequence (fmap (fmap (ReadMode &)) (fmap (fmap openFile) openFilePath))
2022-01-11 15:52:20 +0100 <sshine> traverse?
2022-01-11 15:52:20 +0100 <Axman6> what on earth
2022-01-11 15:52:29 +0100henninb(~henninb@97-116-147-100.mpls.qwest.net)
2022-01-11 15:52:33 +0100 <sshine> or maybe several steps back :-D
2022-01-11 15:53:02 +0100 <Inst> the point is that I end up generating IO (Maybe (IO Handle))
2022-01-11 15:53:16 +0100 <Inst> traverse gets it to IO (IO (Maybe Handle)) so I can join it to IO (Maybe Handle)
2022-01-11 15:53:17 +0100shriekingnoise(~shrieking@186.137.144.80)
2022-01-11 15:54:59 +0100 <Axman6> I need to go to bed, good luck!
2022-01-11 15:56:05 +0100 <Inst> cya, enjoy your sleep
2022-01-11 15:56:13 +0100waleee(~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4) (Ping timeout: 240 seconds)
2022-01-11 15:57:00 +0100jgeerds(~jgeerds@55d4bbed.access.ecotel.net)
2022-01-11 15:57:16 +0100deadmarshal(~deadmarsh@95.38.231.124) (Ping timeout: 256 seconds)
2022-01-11 15:57:27 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
2022-01-11 15:59:01 +0100jgeerds_(~jgeerds@55d4bbed.access.ecotel.net)
2022-01-11 16:01:28 +0100MasseR(~MasseR@51.15.143.128) (Quit: The Lounge - https://thelounge.chat)
2022-01-11 16:01:32 +0100jgeerds(~jgeerds@55d4bbed.access.ecotel.net) (Ping timeout: 240 seconds)
2022-01-11 16:02:05 +0100MasseR(~MasseR@51.15.143.128)
2022-01-11 16:02:57 +0100 <janus> now is your chance to get rid of spurious Maybe's in amazonka: https://github.com/brendanhay/amazonka/issues/739
2022-01-11 16:04:35 +0100Gurkenglas(~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de)
2022-01-11 16:05:49 +0100slack1256(~slack1256@191.126.227.94) (Ping timeout: 240 seconds)
2022-01-11 16:07:25 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 240 seconds)
2022-01-11 16:08:44 +0100burnsidesLlama(~burnsides@dhcp168-021.wadham.ox.ac.uk)
2022-01-11 16:11:24 +0100Sgeo(~Sgeo@user/sgeo)
2022-01-11 16:11:30 +0100stiell(~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection)
2022-01-11 16:11:55 +0100stiell(~stiell@gateway/tor-sasl/stiell)
2022-01-11 16:13:49 +0100burnsidesLlama(~burnsides@dhcp168-021.wadham.ox.ac.uk) (Ping timeout: 240 seconds)
2022-01-11 16:13:50 +0100kaph(~kaph@net-2-38-107-19.cust.vodafonedsl.it)
2022-01-11 16:15:36 +0100jonathanx__(~jonathan@c-5eea34e7-74736162.cust.telenor.se)
2022-01-11 16:16:26 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-01-11 16:16:26 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-01-11 16:16:26 +0100wroathe(~wroathe@user/wroathe)
2022-01-11 16:17:49 +0100jonathanx_(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Ping timeout: 240 seconds)
2022-01-11 16:18:05 +0100pottsy(~pottsy@129.227.183.244)
2022-01-11 16:18:46 +0100nschoe(~quassel@2a01:e0a:8e:a190:4c27:e379:35e8:63af)
2022-01-11 16:20:13 +0100waleee(~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4)
2022-01-11 16:20:33 +0100jonathanx__(~jonathan@c-5eea34e7-74736162.cust.telenor.se) (Read error: Connection reset by peer)
2022-01-11 16:21:04 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2022-01-11 16:21:08 +0100nhatanh02(~satori@123.24.172.30)
2022-01-11 16:22:03 +0100jonathanx__(~jonathan@h-178-174-176-109.a357.priv.bahnhof.se)
2022-01-11 16:22:08 +0100 <gentauro> anybody know why `stack` emits this warning "Warning: Installation path /home/johndoe/.local/bin not found on the PATH environment variable" but is able to install binaries to that folder? "Copied executables to /home/johndoe/.local/bin:"
2022-01-11 16:22:12 +0100 <gentauro> it's a bit strange
2022-01-11 16:23:49 +0100 <peutri> the directory exists
2022-01-11 16:23:53 +0100 <peutri> it's just not on your $PATH
2022-01-11 16:24:13 +0100 <peutri> so it won't find them by default when you try to run them without specifying the path
2022-01-11 16:24:27 +0100 <peutri> which is likely a cause of surprise right after “installing”, hence the warning
2022-01-11 16:29:08 +0100schweers(~user@2001:16b8:e94a:ef00:aaa1:59ff:fe3f:235c)
2022-01-11 16:29:42 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-01-11 16:31:31 +0100 <schweers> Is there something I should know about where embedFile from Data.FileEmbed looks for files? I’m using it in my tests and it works fine, but when I try to use it in the library or executable of the same cabal project, I always get a message that the file was not found. I’m using plain Cabal, not Stack.
2022-01-11 16:34:41 +0100 <gentauro> 16:24 < peutri> it's just not on your $PATH
2022-01-11 16:34:46 +0100 <gentauro> peutri: it is !!!
2022-01-11 16:35:30 +0100Henson(~kvirc@107-179-133-201.cpe.teksavvy.com)
2022-01-11 16:35:41 +0100 <gentauro> conent of `.bashrc` -> `export PATH="$HOME/.local/bin:$PATH"`
2022-01-11 16:35:54 +0100 <gentauro> that's why it's a bit `meh`
2022-01-11 16:36:03 +0100 <peutri> how about `echo $PATH` ?
2022-01-11 16:38:51 +0100 <Henson> I'm writing a library that contains a whole bunch of functions, but one main function that is exported. I also want to write tests in a separate module for this library. There doesn't seem to be a way to export all functions from the main library to the test library alone. What is the standard way of doing this in Haskell? Do I write a parent library with two child libraries? One child..
2022-01-11 16:39:05 +0100 <gentauro> peutri: yeah it's there
2022-01-11 16:39:06 +0100 <Henson> is the main library that exports all functions. The other child is the test library that then import all functions from the main child library. Then the parent only exports the one function from the main child that I want other libraries to be able to use?
2022-01-11 16:39:30 +0100 <gentauro> is it me or is `stack` a "bit" buggy for the time being?
2022-01-11 16:39:31 +0100 <gentauro> xD
2022-01-11 16:39:52 +0100zer0bitz(~zer0bitz@2001:2003:f444:a000:2d06:fff0:d105:7c1)
2022-01-11 16:40:41 +0100 <polyphem> Henson: put all functions in a n .Internal module export them all, reexport only api functions from main module , test should use the .Internal module
2022-01-11 16:41:39 +0100 <Henson> polyphem: great, thank you
2022-01-11 16:43:41 +0100 <schweers> polyphem: I’ve asked myself the same question as Henson. With your solution, the internal module would be visible to users of the package, correct?
2022-01-11 16:44:05 +0100 <peutri> gentauro: well, it works for me :)
2022-01-11 16:44:14 +0100 <gentauro> peutri: I get that :)
2022-01-11 16:44:19 +0100 <polyphem> schweers: yes but its marked Internal
2022-01-11 16:44:35 +0100waleee(~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4) (Ping timeout: 252 seconds)
2022-01-11 16:45:02 +0100 <schweers> polyphem: by “marked” you mean that it’s a mere convention? Not that that’s a bad thing.
2022-01-11 16:45:33 +0100 <polyphem> schweers: its "unsafe" and can change wheras the main api should stay stable and is safe to use
2022-01-11 16:46:13 +0100 <schweers> Thanks for the explanation. It seems to be a quite reasonable solution.
2022-01-11 16:46:22 +0100 <polyphem> schweers: its a common idiom, have seen it in some libraries
2022-01-11 16:46:31 +0100 <Henson> schweers: I've seen other packages with an "Internal" module
2022-01-11 16:47:37 +0100 <schweers> polyphem: I’ve seen it too, I just didn’t know how common the practice is.
2022-01-11 16:47:41 +0100coot(~coot@89-64-85-93.dynamic.chello.pl) (Remote host closed the connection)
2022-01-11 16:49:04 +0100coot(~coot@2a02:a310:e03f:8500:5cc8:47c:8ec0:b827)
2022-01-11 16:53:04 +0100unyu(~pyon@user/pyon) (Quit: brb)
2022-01-11 16:54:22 +0100 <EvanR> also common is to hide the internal bits, then the user is screwed if they need access
2022-01-11 16:54:30 +0100razetime(~quassel@49.207.203.87)
2022-01-11 16:56:03 +0100 <polyphem> Henson , schweers : Here is a fine talk about structuring idioms in haskell projects : https://skillsmatter.com/skillscasts/10832-how-to-architect-medium-to-large-scale-haskell-applicat…
2022-01-11 16:57:02 +0100burnsidesLlama(~burnsides@dhcp168-021.wadham.ox.ac.uk)
2022-01-11 16:57:22 +0100 <schweers> polyphem: Thanks, I’ll give it a read.
2022-01-11 16:58:19 +0100 <schweers> Or rather a watch as it seems.
2022-01-11 16:58:20 +0100 <polyphem> schweers: its a video talk :)
2022-01-11 16:58:21 +0100 <Henson> polyphem: thanks for the pointer!
2022-01-11 16:59:10 +0100 <oxytocat> The internal modules pattern is mentioned here: https://lhbg-book.link/03-html/07-internal_modules.html
2022-01-11 16:59:14 +0100nvmd(~nvmd@user/nvmd)
2022-01-11 17:06:02 +0100emf(~emf@2620:10d:c090:400::5:b9c2)
2022-01-11 17:07:37 +0100emf_(~emf@2620:10d:c090:400::5:b9c2) (Ping timeout: 240 seconds)
2022-01-11 17:08:23 +0100burnsidesLlama(~burnsides@dhcp168-021.wadham.ox.ac.uk) (Remote host closed the connection)
2022-01-11 17:08:51 +0100burnsidesLlama(~burnsides@dhcp168-021.wadham.ox.ac.uk)
2022-01-11 17:09:27 +0100futh14(~futh14@c90-143-137-255.bredband.tele2.se)
2022-01-11 17:10:04 +0100 <futh14> I have seen this function from the course cis194. I have a hard time understanding what the oneTwo = 1:2:oneTwo means, is this something infinitely recursive, just to adjust oneTwo's length to xs? https://pastebin.com/3mMnH7uJ
2022-01-11 17:10:58 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-01-11 17:11:01 +0100deadmarshal(~deadmarsh@95.38.231.124)
2022-01-11 17:11:49 +0100lortabac(~lortabac@2a01:e0a:541:b8f0:d6ff:672a:8ae7:74fd) (Ping timeout: 240 seconds)
2022-01-11 17:12:30 +0100pieguy128(~pieguy128@bras-base-mtrlpq5031w-grc-46-67-70-100-227.dsl.bell.ca)
2022-01-11 17:12:49 +0100lortabac(~lortabac@2a01:e0a:541:b8f0:2c52:4b9f:7e82:ac3e)
2022-01-11 17:12:55 +0100burnside_(~burnsides@dhcp168-021.wadham.ox.ac.uk)
2022-01-11 17:13:01 +0100burnsidesLlama(~burnsides@dhcp168-021.wadham.ox.ac.uk) (Ping timeout: 240 seconds)
2022-01-11 17:13:05 +0100 <polyphem> futh14: to double every other element in xs you multiply first element with one , next element with two ,next element with one again, fourth with 2 .....
2022-01-11 17:13:26 +0100 <oxytocat> it is infinitely recursive. it prepends 1 and 2 to oneTwo, which is prepending 1 and 2 to oneTwo, which is ...
2022-01-11 17:13:53 +0100 <oxytocat> so you get: 1 : 2 : 1 : 2 : 1 : 2 : ...
2022-01-11 17:14:04 +0100 <polyphem> zipWith takes a combining function (*) and two lists xs and [1,2,1,2,1,2,1,2....
2022-01-11 17:14:13 +0100 <futh14> in the end, oneTwo's length becomes equal to xs
2022-01-11 17:14:18 +0100 <futh14> okay, thanks
2022-01-11 17:14:31 +0100 <EvanR> oneTwo's length is infinite
2022-01-11 17:14:41 +0100 <polyphem> zip familiy of functions stop after ind of shortest list
2022-01-11 17:14:53 +0100 <polyphem> *end*
2022-01-11 17:15:01 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 240 seconds)
2022-01-11 17:15:03 +0100cfricke(~cfricke@user/cfricke) (Quit: WeeChat 3.3)
2022-01-11 17:15:15 +0100chele(~chele@user/chele) (Remote host closed the connection)
2022-01-11 17:15:25 +0100deadmarshal(~deadmarsh@95.38.231.124) (Ping timeout: 240 seconds)
2022-01-11 17:15:46 +0100 <futh14> its length is infinite, but only the length that is required by the calculation is made to a list though? EvanR
2022-01-11 17:15:53 +0100unyu(~pyon@user/pyon)
2022-01-11 17:16:02 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 256 seconds)
2022-01-11 17:16:27 +0100lortabac(~lortabac@2a01:e0a:541:b8f0:2c52:4b9f:7e82:ac3e) (Client Quit)
2022-01-11 17:16:31 +0100 <EvanR> well, what will probably happen is oneTwo becomes a circular object in memory
2022-01-11 17:16:37 +0100 <EvanR> doesn't always happen but it's nice when it does
2022-01-11 17:16:55 +0100 <EvanR> that's an implementation detail though
2022-01-11 17:17:52 +0100 <EvanR> in other circumstances you will get some finite prefix demanded by the program, unless you screw up
2022-01-11 17:19:05 +0100 <EvanR> i.e. demand the whole infinite list
2022-01-11 17:19:17 +0100pieguy128(~pieguy128@bras-base-mtrlpq5031w-grc-46-67-70-100-227.dsl.bell.ca) (Ping timeout: 256 seconds)
2022-01-11 17:19:41 +0100 <merijn> futh14: Do you know any C, by any chance?
2022-01-11 17:20:37 +0100jgeerds_(~jgeerds@55d4bbed.access.ecotel.net) (Ping timeout: 240 seconds)
2022-01-11 17:21:46 +0100 <EvanR> also I want to point out a cool way to interpret equations of the form oneTwo = 1:2:oneTwo. A minimal assumption is that oneTwo is undefined, i.e. ⊥. Then you can take the formula literally and see what happens in steps:
2022-01-11 17:22:00 +0100 <EvanR> oneTwo = ⊥
2022-01-11 17:22:07 +0100 <EvanR> oneTwo = 1:2:⊥
2022-01-11 17:22:13 +0100justsomeguy(~justsomeg@user/justsomeguy) (Ping timeout: 240 seconds)
2022-01-11 17:22:13 +0100 <EvanR> oneTwo = 1:2:1:2:⊥
2022-01-11 17:22:17 +0100 <EvanR> etc
2022-01-11 17:24:55 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-01-11 17:24:57 +0100n3rdy1(~n3rdy1@2600:1700:4570:3480:1b88:50f:dae0:9293)
2022-01-11 17:25:55 +0100henninb(~henninb@97-116-147-100.mpls.qwest.net) (Quit: leaving)
2022-01-11 17:26:22 +0100 <EvanR> substitution taken to a logical extreme
2022-01-11 17:26:36 +0100tzh(~tzh@c-24-21-73-154.hsd1.or.comcast.net)
2022-01-11 17:28:02 +0100yauhsien(~yauhsien@61-231-29-214.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-01-11 17:28:53 +0100yauhsien(~yauhsien@61-231-29-214.dynamic-ip.hinet.net)
2022-01-11 17:30:22 +0100 <tomsmeding> ghc-vis representation of oneTwo: https://tomsmeding.com/ss/get/tomsmeding/tB2wIw
2022-01-11 17:31:02 +0100 <EvanR> :successbaby:
2022-01-11 17:34:01 +0100pieguy128(~pieguy128@bras-base-mtrlpq5031w-grc-46-67-70-100-183.dsl.bell.ca)
2022-01-11 17:34:47 +0100 <futh14> @mer
2022-01-11 17:34:47 +0100 <lambdabot> Maybe you meant: vera msg more metar let arr
2022-01-11 17:34:57 +0100 <futh14> merijn yes I do
2022-01-11 17:35:31 +0100mc47(~mc47@xmonad/TheMC47) (Remote host closed the connection)
2022-01-11 17:35:57 +0100 <futh14> tomsmeding is this some kind of doubly-linked list? :D
2022-01-11 17:36:07 +0100 <tomsmeding> singly-linked
2022-01-11 17:36:17 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2022-01-11 17:36:18 +0100 <tomsmeding> it's just circular :)
2022-01-11 17:36:21 +0100 <futh14> how do you generate such implementations?
2022-01-11 17:36:29 +0100 <tomsmeding> the visualisation?
2022-01-11 17:36:32 +0100 <futh14> yep
2022-01-11 17:36:38 +0100 <tomsmeding> https://www.youtube.com/watch?v=I4lnCG18TaY
2022-01-11 17:38:33 +0100pieguy128(~pieguy128@bras-base-mtrlpq5031w-grc-46-67-70-100-183.dsl.bell.ca) (Ping timeout: 256 seconds)
2022-01-11 17:47:06 +0100_xor(~xor@dsl-50-5-233-169.fuse.net) (Quit: brb)
2022-01-11 17:47:34 +0100DNH(~DNH@2a02:8108:1100:16d8:a92f:4d2f:4882:4db9) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2022-01-11 17:48:23 +0100ubert(~Thunderbi@2a02:8109:9880:303c:4371:6bef:aafb:f58d) (Ping timeout: 252 seconds)
2022-01-11 17:51:40 +0100CiaoSen(~Jura@p200300c957347b002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
2022-01-11 17:55:10 +0100alx741(~alx741@157.100.93.160)
2022-01-11 17:58:39 +0100MajorBiscuit(~MajorBisc@c-001-007-038.client.tudelft.eduvpn.nl) (Quit: WeeChat 3.3)
2022-01-11 18:09:55 +0100econo(uid147250@user/econo)
2022-01-11 18:11:26 +0100Guest42(~Guest42@563BEF60.catv.pool.telekom.hu)
2022-01-11 18:11:45 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2022-01-11 18:13:30 +0100michalz(~michalz@185.246.204.104) (Remote host closed the connection)
2022-01-11 18:13:45 +0100oo_migue1(~pi@77.252.47.226) (Quit: WeeChat 2.3)
2022-01-11 18:13:54 +0100DNH(~DNH@2a02:8108:1100:16d8:259f:1db:61a3:46e1)
2022-01-11 18:14:27 +0100little_mac(~little_ma@2601:410:4300:3ce0:86d:17f:4605:4c9d)
2022-01-11 18:16:40 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
2022-01-11 18:17:43 +0100 <Inst> i mean it should work, no?
2022-01-11 18:18:07 +0100 <Inst> f a <*> f b = f (a b)?
2022-01-11 18:18:13 +0100DNH(~DNH@2a02:8108:1100:16d8:259f:1db:61a3:46e1) (Ping timeout: 240 seconds)
2022-01-11 18:18:15 +0100 <EvanR> that doesn't look right
2022-01-11 18:18:26 +0100Akiva(~Akiva@user/Akiva)
2022-01-11 18:19:06 +0100 <byorgey> Inst: it looks like you are mixing up types and values.
2022-01-11 18:19:16 +0100shapr(~user@2601:7c0:c202:5190:c2c1:1b44:a2c4:880c)
2022-01-11 18:19:17 +0100 <monochrom> That's very intuitive and very wrong.
2022-01-11 18:19:17 +0100 <EvanR> (f <*> g) x = f x (g x)
2022-01-11 18:19:54 +0100 <EvanR> monochrom, there you go again </reagan>
2022-01-11 18:20:12 +0100 <byorgey> (<*>) has type f (a -> b) -> f a -> f b, so intuitively it takes a function and an argument both "inside" an f, and applies the function to the value "in the f context".
2022-01-11 18:20:14 +0100 <polux> Hi all, if I have a String that is a valid haskell function declaration, is there a way to turn that into an actual function declaration using template haskell?
2022-01-11 18:20:23 +0100 <monochrom> Except for the Identity functor and f = Identity (the data constructor)
2022-01-11 18:20:35 +0100 <byorgey> However, f a is not valid syntax for a value of type f (a -> b)
2022-01-11 18:21:20 +0100 <polux> I know of generating an haskell AST using template haskell combinators, and of quasiquotes but neither seems to help here.
2022-01-11 18:21:45 +0100 <EvanR> polux do you want to like "eval" the string and use it at runtime?
2022-01-11 18:21:46 +0100 <Inst> see, more things I hate about Haskell:
2022-01-11 18:21:58 +0100 <Inst> standard should be F a <*> F b = F (a b)
2022-01-11 18:22:01 +0100 <Inst> is that right?
2022-01-11 18:22:11 +0100 <Inst> where F is a type constructor and a is a function
2022-01-11 18:22:20 +0100 <polux> EvanR: no, I have a function that generates something of the form "f x = e" and I would like to turn that into a program at compile time
2022-01-11 18:22:24 +0100 <monochrom> Why is F not a data constructor?
2022-01-11 18:22:31 +0100 <Inst> *data constructor
2022-01-11 18:22:56 +0100 <monochrom> That works for Identity as said. But have you tried Maybe? []? Either e?
2022-01-11 18:23:17 +0100 <EvanR> polux, I know with TH you could parse that string and either fail or use the results to output code...
2022-01-11 18:23:24 +0100 <Inst> Maybe includes logic such that if F b = Nothing, <*> returns Nothing
2022-01-11 18:23:31 +0100 <monochrom> Maybe has two data constructors so does F become Nothing or does F become Just?
2022-01-11 18:23:52 +0100 <polux> EvanR: right, that's something like that I am looking for! Is there some standard or commonly accepted way to do this?
2022-01-11 18:24:13 +0100 <monochrom> And what about [] such that no constructor is 1-ary?
2022-01-11 18:24:21 +0100 <Inst> textbook definition of <*> for Maybe (Hutton):
2022-01-11 18:24:28 +0100 <monochrom> Does F become [] or does F become (:)?
2022-01-11 18:24:31 +0100 <Inst> Nothing <*> _ = Nothing
2022-01-11 18:24:37 +0100 <Inst> (Just g) <*> mx = fmap g mx
2022-01-11 18:25:07 +0100 <Inst> Maybe (a->b) -> Maybe a -> Maybe b
2022-01-11 18:25:45 +0100Jing(~hedgehog@240e:390:7c53:a7e1:2c67:7cfa:cdb8:6538) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2022-01-11 18:25:52 +0100 <polux> looks like https://hackage.haskell.org/package/haskell-src-meta does just that
2022-01-11 18:26:08 +0100 <Square> I try to create (through standalone deriving) a Lift instance for Name (from Template.Haskell) but it says "The data constructors of ‘Name’ are not all in scope" even if i import "Name(..)"
2022-01-11 18:26:44 +0100 <Inst> i mean I can get it working with toy examples
2022-01-11 18:26:49 +0100justsomeguy(~justsomeg@user/justsomeguy)
2022-01-11 18:27:03 +0100 <Inst> pure (+) <*> pure 1 <*> pure 2 = Just 3
2022-01-11 18:27:05 +0100 <Inst> let me check
2022-01-11 18:28:12 +0100CiaoSen(~Jura@p200300c957347b002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
2022-01-11 18:28:13 +0100deadmarshal(~deadmarsh@95.38.231.124)
2022-01-11 18:28:23 +0100 <Inst> pure (+) <*> pure 1 <*> (pure 2 :: Num a => Maybe a)
2022-01-11 18:28:32 +0100 <Inst> Just 3
2022-01-11 18:28:34 +0100razetime(~quassel@49.207.203.87) (Ping timeout: 256 seconds)
2022-01-11 18:29:59 +0100 <EvanR> as expected, pure has no effect
2022-01-11 18:30:18 +0100 <Inst> i assume there's a default instance defined for Num a...
2022-01-11 18:30:19 +0100 <EvanR> The pure was not very effective
2022-01-11 18:30:31 +0100 <monochrom> Square: Did you import from Language.Haskell.TH or did you import from Language.Haskell.TH.Syntax? Not all of them actually exports the data constructor.
2022-01-11 18:30:45 +0100 <EvanR> haskell doesn't have default instances
2022-01-11 18:30:49 +0100 <byorgey> Inst: a default instance of what defined for Num a ?
2022-01-11 18:31:02 +0100 <Square> monochrom, Language.Haskell.TH.Syntax
2022-01-11 18:31:18 +0100 <Square> ...ill try the former
2022-01-11 18:31:30 +0100 <Square> vice versa
2022-01-11 18:31:44 +0100 <monochrom> That's mysterious. Language.Haskell.TH.Syntax is the one that has the best hope.
2022-01-11 18:31:57 +0100 <byorgey> Inst: also, what question are you trying to answer right now? I'm trying to figure out how to help.
2022-01-11 18:32:23 +0100 <Inst> byorgey: I'm trying to feed openFile a value of IO (Maybe String)
2022-01-11 18:32:30 +0100 <Inst> using applicatives only
2022-01-11 18:32:49 +0100 <Inst> problem is, openFile takes two arguments, a String and a IOMode
2022-01-11 18:33:05 +0100 <Square> monochrom, you were correct.. chaning to Language.Haskell.TH.Syntax (i stated wrongly). It seems to work now
2022-01-11 18:33:09 +0100 <Square> thanks
2022-01-11 18:33:14 +0100 <byorgey> Inst: are you allowed to use liftA2?
2022-01-11 18:33:21 +0100 <Inst> I already have a liftA2 solution
2022-01-11 18:33:24 +0100 <Inst> it's an exercise
2022-01-11 18:33:31 +0100 <Inst> it was provided by Ax....
2022-01-11 18:33:55 +0100 <byorgey> Inst: OK, did you see earlier when Axman6 showed the type of liftA2 (<*>)?
2022-01-11 18:33:59 +0100 <Inst> yeah, I saw
2022-01-11 18:34:49 +0100 <Inst> takes f1 (f2 (a->b)) -> f1 (f-2 a) -> f1 (f2 b)
2022-01-11 18:34:56 +0100 <Inst> erm, sig
2022-01-11 18:35:01 +0100 <Inst> it works
2022-01-11 18:35:05 +0100 <byorgey> Right. It seems to me that is exactly what you want
2022-01-11 18:36:11 +0100 <byorgey> you can apply it to pure (pure openFile) etc.
2022-01-11 18:36:51 +0100 <Inst> liftA2 (<*>) fmap fx
2022-01-11 18:36:58 +0100 <Inst> liftA2 (<*>) fmap f x
2022-01-11 18:38:37 +0100 <byorgey> hmm? liftA2 (<*>) expects as its first argument something of type f1 (f2 (a -> b)). That is not the type of fmap.
2022-01-11 18:39:32 +0100 <Inst> liftA2 f x = (<*>) (fmap f x)
2022-01-11 18:39:41 +0100 <Inst> from GHC.Base
2022-01-11 18:40:06 +0100 <byorgey> ok.
2022-01-11 18:41:57 +0100justsomeguy(~justsomeg@user/justsomeguy) (Ping timeout: 240 seconds)
2022-01-11 18:43:07 +0100justsomeguy(~justsomeg@user/justsomeguy)
2022-01-11 18:45:26 +0100platz_(~platz@40.122.118.113) (Quit: leaving)
2022-01-11 18:45:47 +0100neurocyte09179(~neurocyte@user/neurocyte)
2022-01-11 18:45:49 +0100neurocyte0917(~neurocyte@user/neurocyte) (Ping timeout: 240 seconds)
2022-01-11 18:45:49 +0100neurocyte09179neurocyte0917
2022-01-11 18:47:49 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-01-11 18:47:49 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-01-11 18:47:49 +0100wroathe(~wroathe@user/wroathe)
2022-01-11 18:50:33 +0100 <Inst> why do people think "being filtered by trees" is funny?
2022-01-11 18:52:04 +0100 <byorgey> they do?
2022-01-11 18:52:28 +0100coot(~coot@2a02:a310:e03f:8500:5cc8:47c:8ec0:b827) (Remote host closed the connection)
2022-01-11 18:52:54 +0100coot(~coot@2a02:a310:e03f:8500:5cc8:47c:8ec0:b827)
2022-01-11 18:53:21 +0100nhatanh02(~satori@123.24.172.30) (Ping timeout: 256 seconds)
2022-01-11 18:55:03 +0100 <Inst> do people get filtered by trees?
2022-01-11 18:55:09 +0100 <Inst> i almost got filtered by trees, but made it
2022-01-11 18:55:20 +0100 <Inst> now i'm about to get filtered by not understanding how to use <*> with stacked monads
2022-01-11 18:55:31 +0100 <Inst> i'm sure i'll make it
2022-01-11 18:56:19 +0100 <Inst> just needs more time, and the challenge is only a bit after the "fun" level right now
2022-01-11 18:56:31 +0100 <EvanR> you know, this isn't a monad thing
2022-01-11 18:56:54 +0100 <EvanR> it's about the Applicative instances
2022-01-11 18:57:38 +0100 <EvanR> which is usually nicer to deal with, but you have the awkard situation where most of your stuff is not using Maybe or IO
2022-01-11 18:57:45 +0100 <EvanR> in openFile
2022-01-11 18:59:44 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2022-01-11 19:01:06 +0100 <EvanR> why is ghci still complaining about ambiguous . even after I put import Prelude hiding ((.))
2022-01-11 19:02:02 +0100Athas(athas@sigkill.dk) (Read error: Connection reset by peer)
2022-01-11 19:02:45 +0100 <EvanR> and id
2022-01-11 19:03:09 +0100 <byorgey> EvanR: maybe they are being imported via a module you :loaded?
2022-01-11 19:03:56 +0100 <EvanR> head scratch... importing and reexporting Prelude id and . ??
2022-01-11 19:03:58 +0100moet(~moet@mobile-166-170-41-167.mycingular.net)
2022-01-11 19:04:28 +0100 <EvanR> ah there are two import Prelude hiding lines!
2022-01-11 19:05:13 +0100kimjetwav(~user@2607:fea8:2363:8f00:62f3:c8e:2d83:a34f) (Read error: Connection reset by peer)
2022-01-11 19:05:24 +0100 <byorgey> haha, each one is importing the thing the other is hiding =)
2022-01-11 19:05:30 +0100kimjetwav(~user@2607:fea8:2363:8f00:e50d:c794:338b:ac83)
2022-01-11 19:05:38 +0100phma(~phma@host-67-44-208-201.hnremote.net) (Read error: Connection reset by peer)
2022-01-11 19:06:33 +0100phma(~phma@host-67-44-208-198.hnremote.net)
2022-01-11 19:07:31 +0100justsomeguy(~justsomeg@user/justsomeguy) (Ping timeout: 256 seconds)
2022-01-11 19:07:47 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-01-11 19:07:47 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-01-11 19:07:47 +0100wroathe(~wroathe@user/wroathe)
2022-01-11 19:09:02 +0100justsomeguy(~justsomeg@user/justsomeguy)
2022-01-11 19:09:48 +0100moet(~moet@mobile-166-170-41-167.mycingular.net) (Quit: leaving)
2022-01-11 19:10:24 +0100kupi(uid212005@id-212005.hampstead.irccloud.com)
2022-01-11 19:10:44 +0100 <Inst> (fmap (<*>) (fmap (fmap openFile) openFilePath)) <*> (pure (pure ReadMode)) <-- this works
2022-01-11 19:10:58 +0100mbuf(~Shakthi@122.178.183.53) (Quit: Leaving)
2022-01-11 19:11:44 +0100 <Inst> EvanR: I am treating FAM monadically (in the sense of being a single unit)
2022-01-11 19:12:12 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2022-01-11 19:12:50 +0100 <EvanR> just saying that could would work if nothing involved were monads
2022-01-11 19:12:54 +0100dyeplexer(~dyeplexer@user/dyeplexer)
2022-01-11 19:12:54 +0100 <EvanR> that code*
2022-01-11 19:13:03 +0100 <EvanR> which comes up a lot more actually
2022-01-11 19:13:57 +0100 <EvanR> :t \x y -> fmap (<*>) (fmap (fmap x) <*> (pure (pure x))
2022-01-11 19:13:58 +0100 <lambdabot> error:
2022-01-11 19:13:58 +0100 <lambdabot> parse error (possibly incorrect indentation or mismatched brackets)
2022-01-11 19:14:04 +0100 <EvanR> :t \x y -> fmap (<*>) (fmap (fmap x)) <*> (pure (pure x))
2022-01-11 19:14:05 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-01-11 19:14:05 +0100 <lambdabot> Applicative f => (a -> b) -> p -> f ((a -> b) -> a) -> f b
2022-01-11 19:14:15 +0100 <EvanR> look mom no monads
2022-01-11 19:14:25 +0100 <EvanR> :t \x y -> fmap (<*>) (fmap (fmap x)) <*> (pure (pure y))
2022-01-11 19:14:26 +0100 <lambdabot> Applicative f => (a1 -> b) -> a2 -> f (a2 -> a1) -> f b
2022-01-11 19:14:39 +0100SquareSqaure
2022-01-11 19:15:25 +0100Athas(~athas@2a01:7c8:aaac:1cf:d10b:de69:b1cf:3fd6)
2022-01-11 19:15:55 +0100 <EvanR> sometimes it turns out you don't need some abilities and you can make your code more general
2022-01-11 19:16:49 +0100 <Inst> i mean i don't actually need the code, it's just an exercise
2022-01-11 19:17:07 +0100 <EvanR> no excuse not to note something cool
2022-01-11 19:17:38 +0100lavaman(~lavaman@98.38.249.169)
2022-01-11 19:18:23 +0100 <Inst> in your sentence above, monad meant (it'd actually be funnier if monad's semantic drift went out of control and we be able to compose sentences entirely out of the word monad, with various inflections to indicate grammatical use)
2022-01-11 19:18:33 +0100 <Inst> values whose type was monadic, right?
2022-01-11 19:18:48 +0100pera(~pera@user/pera) (Quit: leaving)
2022-01-11 19:19:05 +0100vysn(~vysn@user/vysn)
2022-01-11 19:19:31 +0100 <EvanR> no
2022-01-11 19:19:40 +0100 <EvanR> since we're talking about types not values
2022-01-11 19:19:52 +0100 <EvanR> none of the types were monads
2022-01-11 19:19:59 +0100 <EvanR> (necessarily)
2022-01-11 19:21:42 +0100 <Inst> openFilePath returns IO (Maybe String) which is why it's such a mess
2022-01-11 19:24:02 +0100 <EvanR> @hoogle openFilePath
2022-01-11 19:24:02 +0100 <lambdabot> No results found
2022-01-11 19:24:16 +0100 <EvanR> what's that
2022-01-11 19:25:43 +0100 <Inst> openFilePath :: IO (Maybe String)
2022-01-11 19:25:43 +0100 <Inst> openFilePath = openFileDialog (pack "") (pack "") [] (pack "") False >>= \x -> pure $ x >>= \y -> pure $ unpack (head y)
2022-01-11 19:25:56 +0100 <Inst> openFileDialog is from TinyFileDialogs on Hackage
2022-01-11 19:26:02 +0100 <Inst> I've been told it's badly coded
2022-01-11 19:26:13 +0100 <Inst> it's a wrapper for TinyFileDialogs
2022-01-11 19:26:44 +0100 <Inst> so it calls up OS API to get you a file selector, then returns a file path as IO Maybe [Text]
2022-01-11 19:27:22 +0100 <EvanR> it returns the first path selected by the user or Nothing if they cancelled?
2022-01-11 19:27:23 +0100 <Inst> the architecture of "cancer.hs"
2022-01-11 19:27:25 +0100 <Inst> yeah
2022-01-11 19:27:36 +0100 <Inst> if True is sent, you can select multiple files and it's a multi-element List
2022-01-11 19:28:09 +0100 <Inst> so, like, if you want to teach with it, you can give an assignment to give a way to hook up TinyFileDialogs to an openFile / writeFile whatever
2022-01-11 19:28:16 +0100 <EvanR> in this case, I would immediately handle the Nothing after calling that, then continue in IO,
2022-01-11 19:28:30 +0100 <EvanR> using a case
2022-01-11 19:28:51 +0100 <EvanR> react to a Just path with some IO code and a real String
2022-01-11 19:28:57 +0100 <Inst> why do you guys hate If Then Else statements so much? They're perfectly useful when you only have two cases!
2022-01-11 19:29:14 +0100 <Inst> it desugars to case!
2022-01-11 19:29:15 +0100 <EvanR> if then else isn't about the number of cases, it's about the type of the scrutinee
2022-01-11 19:29:25 +0100 <ephemient> you wan to destructure the maybe, so the natural thing to use is case
2022-01-11 19:29:26 +0100 <monochrom> I don't hate if-then-else.
2022-01-11 19:29:28 +0100 <EvanR> you don't have a Bool so it's inconvenient
2022-01-11 19:29:35 +0100 <Inst> ah
2022-01-11 19:29:44 +0100 <monochrom> "if x>10 then ... else ..." is fine.
2022-01-11 19:29:44 +0100 <Inst> case of you can use pattern matching
2022-01-11 19:29:58 +0100 <monochrom> Instead, why do you hate pattern matching so much?
2022-01-11 19:29:59 +0100kimjetwav(~user@2607:fea8:2363:8f00:e50d:c794:338b:ac83) (Remote host closed the connection)
2022-01-11 19:30:10 +0100 <monochrom> "case xs of [] -> ... x:xs -> ..." is fine.
2022-01-11 19:30:14 +0100 <EvanR> also, using an if with isJust or isNothing would be bad here, because then you don't have the string
2022-01-11 19:30:14 +0100 <Inst> i wasn't used to it!
2022-01-11 19:30:18 +0100 <Inst> and also, on FP Discord
2022-01-11 19:30:22 +0100 <ephemient> with {-# LANGUAGE LambdaCase #-} you can write something >>= \case Just something -> foo; Nothing -> bar
2022-01-11 19:30:28 +0100 <EvanR> and to get the string, you need... to use a case statement
2022-01-11 19:30:30 +0100 <Inst> we have some guy who insists on defining functions with pattern matching
2022-01-11 19:30:35 +0100 <EvanR> then the Nothing case makes no sense
2022-01-11 19:30:35 +0100 <Inst> also, btw, can you @ a function?
2022-01-11 19:30:46 +0100 <Inst> it's a phase people go through
2022-01-11 19:30:52 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2022-01-11 19:30:55 +0100 <ephemient> and with {-# LANGUAGE BlockArguments #-} you don't need to increase indentation for a do block inside there
2022-01-11 19:30:56 +0100 <Inst> they're not comfortable with pattern matching, they work with if then else because it's what they learned first
2022-01-11 19:31:10 +0100 <Inst> if then else only has a valid use in the rare case where you only have two cases and don't need pattern matching
2022-01-11 19:31:19 +0100 <EvanR> if then else doesn't give you access to the payload of Maybe
2022-01-11 19:31:22 +0100 <Inst> yeah
2022-01-11 19:31:23 +0100 <Inst> correct
2022-01-11 19:31:30 +0100 <Inst> so in this case it's not necessary
2022-01-11 19:31:37 +0100 <Inst> erm, it's not useful
2022-01-11 19:31:42 +0100 <EvanR> it would actually be very awkward and weird
2022-01-11 19:31:58 +0100 <Inst> but re: hating pattern matching
2022-01-11 19:32:03 +0100 <Inst> there's a stage people go through where they prefer guards
2022-01-11 19:32:10 +0100 <Inst> it's because they don't want to type the function name and arguments all the time
2022-01-11 19:32:17 +0100 <Inst> so I'm sort of wondering if it's possible to @ the function name
2022-01-11 19:32:22 +0100 <EvanR> you can just use a case to avoid that
2022-01-11 19:32:26 +0100Erutuon(~Erutuon@user/erutuon)
2022-01-11 19:32:33 +0100 <Inst> so when you're pattern matching, you can just type Function x y
2022-01-11 19:32:43 +0100 <Inst> so when you're pattern matching, you can just type k@function x y
2022-01-11 19:32:48 +0100 <Inst> then k x2 y2, etc
2022-01-11 19:33:00 +0100 <Inst> not sure if @ notation is powerful enough for that
2022-01-11 19:33:16 +0100 <monochrom> WTH is "@ the function name"?
2022-01-11 19:33:30 +0100 <EvanR> yeah you can't write that
2022-01-11 19:33:33 +0100 <Inst> in Chinese and Japanese, because words are so complicated, they have something called an iteration mark
2022-01-11 19:33:39 +0100 <Inst> so, if you're reduplicating a word
2022-01-11 19:33:46 +0100 <Inst> erm, the character for a given morpheme can be so complicated
2022-01-11 19:33:54 +0100 <int-e> function_with_tediously_long_name = f where f ...
2022-01-11 19:34:12 +0100 <int-e> "go" is a somewhat popular short name
2022-01-11 19:34:14 +0100 <Inst> you just write 々
2022-01-11 19:34:24 +0100 <monochrom> No, Chinese doesn't do that.
2022-01-11 19:34:26 +0100 <Inst> oh, thanks
2022-01-11 19:34:34 +0100 <EvanR> function_with_tedious_name x = case x of
2022-01-11 19:34:38 +0100 <Inst> Chinese has iteration marks, two, used entirely in casual writing
2022-01-11 19:35:15 +0100 <[itchyjunk]> if list = [[1],[2,3]] and i [x | x <- [ y | y <- list] ], first instance of y would be [1] so x <- [1] would be 1 no?
2022-01-11 19:35:18 +0100 <Inst> but there is a stage where people do guards, probably because (like me) they're too dumb to figure out how to use where to avoid having to type the pattern name repeatedly
2022-01-11 19:35:21 +0100 <monochrom> And I believe Japanese does that for immediate repetition only, not marking something to be cloned 3 inches away.
2022-01-11 19:35:23 +0100 <[itchyjunk]> idk why this is id function again
2022-01-11 19:35:31 +0100 <int-e> EvanR: I kind of hate that because it means switching from = to ->
2022-01-11 19:35:40 +0100justsomeguy(~justsomeg@user/justsomeguy) (Quit: WeeChat 3.3)
2022-01-11 19:35:44 +0100 <monochrom> And English has "ditto" for that.
2022-01-11 19:35:49 +0100 <Inst>
2022-01-11 19:35:50 +0100 <EvanR> well... we switch between = and -> so much anyway xD
2022-01-11 19:35:52 +0100futh1415(~futh14@c90-143-137-255.bredband.tele2.se)
2022-01-11 19:36:09 +0100 <EvanR> i didn't know about the f trick
2022-01-11 19:36:11 +0100 <Inst> case of I actually dislike because you have to use ->
2022-01-11 19:36:17 +0100 <Inst> would be better if you could just type = instead
2022-01-11 19:36:40 +0100 <[itchyjunk]> ah i think it's left to right evaluation
2022-01-11 19:36:56 +0100 <[itchyjunk]> can i do list comprehension without a list? xD
2022-01-11 19:36:58 +0100 <EvanR> it wouldn't be better, imo
2022-01-11 19:36:59 +0100futh14(~futh14@c90-143-137-255.bredband.tele2.se) (Ping timeout: 256 seconds)
2022-01-11 19:37:05 +0100 <EvanR> = means equals in haskell
2022-01-11 19:37:18 +0100 <Inst> "is defined as"
2022-01-11 19:37:21 +0100 <EvanR> Nothing = "whatever, it's empty" is wrong
2022-01-11 19:37:23 +0100 <Inst> == is boolean equal
2022-01-11 19:37:32 +0100 <EvanR> it's not is defined as either
2022-01-11 19:38:06 +0100 <Inst> @int-e thank you for letting me know about the where trick
2022-01-11 19:38:06 +0100 <lambdabot> Unknown command, try @list
2022-01-11 19:38:14 +0100 <int-e> [itchyjunk]: [ y | y <- list] equals list
2022-01-11 19:38:46 +0100 <EvanR> = also isn't a bool test, it's a proposition
2022-01-11 19:39:06 +0100 <[itchyjunk]> :<
2022-01-11 19:39:37 +0100 <int-e> we're back to making bold declarations I see
2022-01-11 19:39:37 +0100nschoe(~quassel@2a01:e0a:8e:a190:4c27:e379:35e8:63af) (Ping timeout: 240 seconds)
2022-01-11 19:39:41 +0100 <Inst> w/e, this is a case where i'm better off learning the language more before arguing it
2022-01-11 19:40:04 +0100 <Inst> like, I had a pythoner who had signed up to learn Hask from me when I was ready run off once he saw that Aeson apparently required you to define types
2022-01-11 19:40:05 +0100 <monochrom> I thought that was the only fair thing to do.
2022-01-11 19:40:21 +0100 <ephemient> well, one part of syntax I always find a bit awkward is using <- inside pattern guards, but I don't think there's really a great alternative since = already means something
2022-01-11 19:40:25 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2022-01-11 19:40:29 +0100 <monochrom> What do you mean it is possible to give so much opinion on something you don't know.
2022-01-11 19:40:41 +0100 <monochrom> Is that a new-fangled TikTok thing.
2022-01-11 19:40:49 +0100 <Inst> isn't that the basis of democracy? :)
2022-01-11 19:41:15 +0100 <int-e> monochrom: I don't know what you're talking about, therefore you are wrong.
2022-01-11 19:42:17 +0100 <Inst> also there seems to be a dearth of information on algebraic data types in textbooks, as in, it's usually not taught unitarily
2022-01-11 19:42:47 +0100 <[itchyjunk]> if i have a [[1]], is there no direct way to refer to that 1 inside a list comprehension?
2022-01-11 19:43:02 +0100 <[itchyjunk]> [x | x <- ? ]
2022-01-11 19:43:03 +0100 <Inst> ummm
2022-01-11 19:43:16 +0100 <Inst> [x | x<- y , y<-k]
2022-01-11 19:43:22 +0100 <Inst> or no, that doesn't work
2022-01-11 19:43:25 +0100 <EvanR> > [x | [[x]] <- [[1]]] -- ? xD
2022-01-11 19:43:26 +0100 <[itchyjunk]> no..
2022-01-11 19:43:27 +0100 <lambdabot> error:
2022-01-11 19:43:27 +0100 <lambdabot> • No instance for (Num [()]) arising from a use of ‘e_11’
2022-01-11 19:43:27 +0100 <lambdabot> • In the expression: e_11
2022-01-11 19:43:35 +0100 <EvanR> > [x | [x] <- [[1]]] -- ? xD
2022-01-11 19:43:36 +0100 <lambdabot> [1]
2022-01-11 19:43:53 +0100 <Inst> i'm trying to figure out how to do it using the list comprehension syntax only
2022-01-11 19:44:01 +0100 <int-e> Inst: it basically works, you just need to put things into the proper order
2022-01-11 19:44:03 +0100 <Inst> you could just do [head x | x <- list]
2022-01-11 19:44:18 +0100nschoe(~quassel@2a01:e0a:8e:a190:2fd9:6714:788f:97f6)
2022-01-11 19:44:21 +0100 <monochrom> > [x | a <- [[1]] {- so a = [1] -} , x <- a]
2022-01-11 19:44:22 +0100 <lambdabot> [1]
2022-01-11 19:44:22 +0100 <int-e> and maybe rename things
2022-01-11 19:44:33 +0100 <Inst> [x | y <- list, x <- y
2022-01-11 19:44:35 +0100 <Inst> ]?
2022-01-11 19:44:41 +0100 <[itchyjunk]> okay, [[1]] was an example
2022-01-11 19:44:48 +0100 <[itchyjunk]> i want to refrence to [[a]]
2022-01-11 19:44:54 +0100 <[itchyjunk]> elements in lists of lists
2022-01-11 19:44:57 +0100 <[itchyjunk]> all of them
2022-01-11 19:45:01 +0100dyeplexer(~dyeplexer@user/dyeplexer) (Ping timeout: 240 seconds)
2022-01-11 19:45:09 +0100 <monochrom> You mean [[1,2,3]]
2022-01-11 19:45:23 +0100 <[itchyjunk]> [[1],[2],[3..]]
2022-01-11 19:45:24 +0100 <monochrom> > [x | a <- [[1,2,3]] {- so a = [1] or [2] or [3] -} , x <- a]
2022-01-11 19:45:25 +0100 <lambdabot> [1,2,3]
2022-01-11 19:45:36 +0100 <Inst> list = [[1]
2022-01-11 19:45:38 +0100 <Inst> list = [[1]]
2022-01-11 19:45:38 +0100 <monochrom> Err, a=[1,2,3]
2022-01-11 19:45:55 +0100 <monochrom> [[1], [2], [3]] can also work
2022-01-11 19:45:55 +0100 <EvanR> gratuitous list comprehension syntax for outrageous fortune
2022-01-11 19:45:59 +0100 <Inst> [x | y<-list, x<-y]
2022-01-11 19:46:02 +0100 <Inst> returns 1
2022-01-11 19:46:04 +0100 <[itchyjunk]> whats this {- -} stuff?
2022-01-11 19:46:09 +0100 <monochrom> > [x | a <- [[1],[2],[3]] {- so a = [1] or [2] or [3] -} , x <- a]
2022-01-11 19:46:10 +0100 <lambdabot> [1,2,3]
2022-01-11 19:46:18 +0100 <futh1415> [itchyjunk] comments
2022-01-11 19:46:22 +0100 <monochrom> block comment
2022-01-11 19:46:43 +0100 <Inst> welcome to the Haskell club, [itchyjunk]
2022-01-11 19:46:46 +0100 <[itchyjunk]> Inst, oh i didnt think of difining y first then x :|
2022-01-11 19:47:02 +0100 <[itchyjunk]> oh i see :<
2022-01-11 19:47:17 +0100 <[itchyjunk]> [x | y <- list, x <- y] seems to work
2022-01-11 19:47:25 +0100 <Inst> EvanR: it's not gratuitous when you intrinsically derive pleasure from the syntax
2022-01-11 19:47:38 +0100 <Inst> a bit decadent, perhaps, but not gratuitous
2022-01-11 19:47:44 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-01-11 19:48:02 +0100 <EvanR> after using clojure I do appreciate my syntax
2022-01-11 19:48:10 +0100 <EvanR> when it exists
2022-01-11 19:48:12 +0100 <Inst> it could be better in parts
2022-01-11 19:48:21 +0100 <Inst> but pretty close to optimum, Idris apparently uses : for type signatures
2022-01-11 19:48:26 +0100 <monochrom> I like outrageous fortune. May well worth gratuitous syntax.
2022-01-11 19:48:26 +0100 <Inst> not sure what they use for cons
2022-01-11 19:48:27 +0100 <EvanR> : is more standard
2022-01-11 19:48:33 +0100 <EvanR> haskell is the odd one out with ::
2022-01-11 19:48:37 +0100 <Inst> ah
2022-01-11 19:49:03 +0100 <monochrom> If someone pays me $100000 for saying "type X = Y" 3 times, I will do it.
2022-01-11 19:49:04 +0100 <[itchyjunk]> https://bpa.st/MBDQ
2022-01-11 19:49:18 +0100 <[itchyjunk]> Why didn't I think of defining y first? was stuck on this for too long..
2022-01-11 19:49:18 +0100mc47(~mc47@xmonad/TheMC47)
2022-01-11 19:49:28 +0100 <Inst> LYAH or HPFFP?
2022-01-11 19:49:43 +0100 <EvanR> basically you needed a two step list comprehension not one
2022-01-11 19:49:48 +0100 <EvanR> since it's nested
2022-01-11 19:49:54 +0100 <monochrom> This is why education exists. You can't expect to think up all the obvious-in-retrospect ideas yourself.
2022-01-11 19:50:32 +0100 <monochrom> It is also why when I teach I don't say "think about it". I give carefully designed hints and even appropriate spoilers.
2022-01-11 19:50:37 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker) (Ping timeout: 240 seconds)
2022-01-11 19:51:02 +0100 <Inst> monad comprehension is a language extension, right?
2022-01-11 19:51:32 +0100 <Inst> there's no way to implement list comprehensions for a custom list type?
2022-01-11 19:52:23 +0100nschoe(~quassel@2a01:e0a:8e:a190:2fd9:6714:788f:97f6) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
2022-01-11 19:54:06 +0100 <Henson> /quit
2022-01-11 19:54:17 +0100Henson(~kvirc@107-179-133-201.cpe.teksavvy.com) (Quit: let's try that again!)
2022-01-11 19:54:23 +0100 <monochrom> Heh
2022-01-11 19:55:20 +0100 <EvanR> a Henson shaped hole next to the open exit door
2022-01-11 19:55:35 +0100 <monochrom> haha
2022-01-11 19:56:24 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker)
2022-01-11 19:56:49 +0100deadmarshal(~deadmarsh@95.38.231.124) (Ping timeout: 256 seconds)
2022-01-11 19:59:10 +0100 <Inst> still fairly ugly
2022-01-11 19:59:12 +0100 <Inst> d = pure ((<*>) . (pure openFile <*>)) <*> openFilePath <*> pure (pure ReadMode)
2022-01-11 19:59:25 +0100 <Inst> well, it's going to be ugly, just need to figure out how to get rid of the .
2022-01-11 19:59:34 +0100 <Inst> then it's done just with <*> and pure
2022-01-11 20:00:13 +0100 <Inst> then i have to figure out how the code actually works!
2022-01-11 20:00:38 +0100 <dsal> That looks like a mini golfer showed up at a PGA Tour.
2022-01-11 20:00:43 +0100xstill-(xstill@fimu/xstill) (Quit: Ping timeout (120 seconds))
2022-01-11 20:00:43 +0100 <EvanR> @pl \x y z -> pure ((<*>) . (pure x <*>)) <*> y <*> pure (pure z)
2022-01-11 20:00:43 +0100 <lambdabot> flip flip (pure . pure) . (((.) . (<*>)) .) . (<*>) . pure . ((<*>) .) . (<*>) . pure
2022-01-11 20:01:06 +0100xstill-(xstill@fimu/xstill)
2022-01-11 20:01:43 +0100max22-(~maxime@2a01cb0883359800510125e1acff834b.ipv6.abo.wanadoo.fr) (Remote host closed the connection)
2022-01-11 20:01:48 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-01-11 20:01:55 +0100max22-(~maxime@2a01cb0883359800decae4ceda35e3bf.ipv6.abo.wanadoo.fr)
2022-01-11 20:02:13 +0100vysn(~vysn@user/vysn) (Ping timeout: 240 seconds)
2022-01-11 20:04:15 +0100notzmv(~zmv@user/notzmv) (Ping timeout: 268 seconds)
2022-01-11 20:04:37 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker) (Ping timeout: 240 seconds)
2022-01-11 20:05:57 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker)
2022-01-11 20:08:57 +0100 <Inst> i have a problem wherein I where if I see those red squiggly lines under my code, I feel like the Hlinter just called me a paedophile
2022-01-11 20:09:36 +0100 <EvanR> use vim, no red squiggle support
2022-01-11 20:12:36 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2022-01-11 20:13:05 +0100waleee(~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4)
2022-01-11 20:16:11 +0100pieguy128(~pieguy128@bras-base-mtrlpq5031w-grc-35-70-24-248-198.dsl.bell.ca)
2022-01-11 20:17:32 +0100coot(~coot@2a02:a310:e03f:8500:5cc8:47c:8ec0:b827) (Quit: coot)
2022-01-11 20:18:16 +0100 <schuelermine[m]> Is there a package/module that does something like this? https://gist.github.com/schuelermine/6a06efcc0c5b3a18768c4649e4cc8efb
2022-01-11 20:18:29 +0100 <ephemient> :t let openFilePath :: String -> IO (Maybe FilePath); openFilePath = undefined in openFilePath >=> mapM (flip openFile ReadMode)
2022-01-11 20:18:30 +0100 <lambdabot> error:
2022-01-11 20:18:30 +0100 <lambdabot> Variable not in scope: openFile :: FilePath -> b0 -> IO b
2022-01-11 20:18:30 +0100 <lambdabot> error: Data constructor not in scope: ReadMode
2022-01-11 20:18:37 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 240 seconds)
2022-01-11 20:20:55 +0100jkaye_(~qicruser@2605:ef80:1a:c23f::1062:2648)
2022-01-11 20:21:25 +0100pieguy128(~pieguy128@bras-base-mtrlpq5031w-grc-35-70-24-248-198.dsl.bell.ca) (Ping timeout: 240 seconds)
2022-01-11 20:22:37 +0100Athas(~athas@2a01:7c8:aaac:1cf:d10b:de69:b1cf:3fd6) (Ping timeout: 240 seconds)
2022-01-11 20:23:59 +0100jkaye_(~qicruser@2605:ef80:1a:c23f::1062:2648) (Read error: Connection reset by peer)
2022-01-11 20:24:08 +0100bliminse(~bliminse@host86-186-17-7.range86-186.btcentralplus.com) (Quit: leaving)
2022-01-11 20:29:10 +0100jkaye_(~qicruser@2605:ef80:1a:c23f::1062:2648)
2022-01-11 20:30:45 +0100pieguy128(~pieguy128@bras-base-mtrlpq5031w-grc-43-67-70-144-25.dsl.bell.ca)
2022-01-11 20:30:45 +0100fef(~thedawn@user/thedawn) (Ping timeout: 276 seconds)
2022-01-11 20:30:54 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-01-11 20:35:59 +0100 <Inst> bjs
2022-01-11 20:36:14 +0100bliminse(~bliminse@host86-186-17-7.range86-186.btcentralplus.com)
2022-01-11 20:38:11 +0100jkaye_(~qicruser@2605:ef80:1a:c23f::1062:2648) (Read error: Connection reset by peer)
2022-01-11 20:39:28 +0100benin(~benin@183.82.176.241) (Quit: The Lounge - https://thelounge.chat)
2022-01-11 20:43:30 +0100futh1415(~futh14@c90-143-137-255.bredband.tele2.se) (Quit: Client closed)
2022-01-11 20:44:47 +0100Athas(~athas@sigkill.dk)
2022-01-11 20:45:29 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2022-01-11 20:46:37 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2022-01-11 20:48:11 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-01-11 20:48:11 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-01-11 20:48:11 +0100wroathe(~wroathe@user/wroathe)
2022-01-11 20:49:19 +0100cosimone(~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) (Remote host closed the connection)
2022-01-11 20:50:01 +0100cosimone(~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20)
2022-01-11 20:51:01 +0100 <lyxia> schuelermine[m]: you might be interested in "ghosts of departed proofs" https://hackage.haskell.org/package/gdp
2022-01-11 20:53:48 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-01-11 20:54:21 +0100 <monochrom> Why is the readme essentially empty? :(
2022-01-11 20:55:09 +0100 <geekosaur> ghosts are invisible :þ
2022-01-11 20:55:19 +0100 <monochrom> Fortunately app/Main.hs is a good example.
2022-01-11 20:57:13 +0100 <EvanR> was there a paper by this name
2022-01-11 20:57:42 +0100briandaed(~briandaed@185.234.208.208.r.toneticgroup.pl) (Quit: leaving)
2022-01-11 20:57:52 +0100briandaed(~root@185.234.208.208.r.toneticgroup.pl)
2022-01-11 20:57:55 +0100 <lyxia> yeah, a functional pearl
2022-01-11 21:00:56 +0100cosimone(~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) (Quit: ERC (IRC client for Emacs 27.1))
2022-01-11 21:01:37 +0100cosimone(~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20)
2022-01-11 21:02:32 +0100 <schuelermine[m]> What syntax is `([a] ?SortedBy comp)`? Is it applying `[a]` to an implicit parameter?
2022-01-11 21:03:28 +0100 <monochrom> It's "type (?) a p = Satisfies p a"
2022-01-11 21:04:06 +0100bitmapper(uid464869@id-464869.lymington.irccloud.com) (Quit: Connection closed for inactivity)
2022-01-11 21:04:35 +0100 <schuelermine[m]> It's an infix type operator? And `SortedBy comp` is the right argument?
2022-01-11 21:04:41 +0100 <monochrom> Yeah
2022-01-11 21:04:57 +0100juhp(~juhp@128.106.188.82) (Ping timeout: 240 seconds)
2022-01-11 21:07:38 +0100 <schuelermine[m]> Does GHC propagate constraints from type families? Can you do... (full message at https://libera.ems.host/_matrix/media/r0/download/libera.chat/56f684a65369fda39abada8109007f682e42…)
2022-01-11 21:07:56 +0100 <schuelermine[m]> * Does GHC propagate constraints from type families? Can you do... (full message at https://libera.ems.host/_matrix/media/r0/download/libera.chat/f2a37c482df8e3589687753844ee3b18bf1a…)
2022-01-11 21:08:11 +0100juhp(~juhp@128.106.188.82)
2022-01-11 21:08:18 +0100 <schuelermine[m]> oh frick
2022-01-11 21:08:20 +0100 <schuelermine[m]> sorry
2022-01-11 21:08:27 +0100 <schuelermine[m]> I forgot I was bridging from matrix
2022-01-11 21:08:40 +0100 <schuelermine[m]> sorry for attempting to use markdown :/
2022-01-11 21:09:53 +0100 <geekosaur> it's okay, the bridge pushed it into a pastebin and mostly kept the formatting
2022-01-11 21:09:58 +0100 <geekosaur> the edit was more problematic
2022-01-11 21:10:01 +0100deadmarshal(~deadmarsh@95.38.231.124)
2022-01-11 21:10:41 +0100 <schuelermine[m]> what does it show up as?
2022-01-11 21:10:47 +0100 <schuelermine[m]> (the editl
2022-01-11 21:10:53 +0100 <schuelermine[m]> s/l/)
2022-01-11 21:10:59 +0100 <geekosaur> [11 20:07:56] <schuelermine[m]> * Does GHC propagate constraints from type families? Can you do... (full message at https://libera.ems.host/_matrix/media/r0/download/libera.chat/f2a37c482df8e3589687753844ee3b18bf1a…)
2022-01-11 21:11:05 +0100 <geekosaur> it doesn't edit, in short
2022-01-11 21:11:34 +0100 <schuelermine[m]> I see, thanks
2022-01-11 21:11:45 +0100 <geekosaur> IRC has no edit mechanism, just some conventions that hopefully don;t get overused
2022-01-11 21:12:15 +0100 <schuelermine[m]> yeah I know, I just forgot to code-switch.
2022-01-11 21:12:45 +0100 <schuelermine[m]> it's s/pat/rep/, or *fix-word, right?
2022-01-11 21:12:51 +0100 <geekosaur> yeh
2022-01-11 21:13:29 +0100 <geekosaur> and yours wasn't too bad, it's the folks who do 5 or 6 *s of the whole message in a row that are really frustrating IRC-side
2022-01-11 21:13:40 +0100 <awpr> > let f :: (Num String => String) -> String; f _ = "what?" in f 42 -- putting the constraint there probably doesn't do what you were expecting
2022-01-11 21:13:41 +0100 <lambdabot> "what?"
2022-01-11 21:14:13 +0100deadmarshal(~deadmarsh@95.38.231.124) (Ping timeout: 240 seconds)
2022-01-11 21:14:45 +0100 <schuelermine[m]> Oh you can omit braces in one-line let stmts now & still use semicolons?
2022-01-11 21:15:41 +0100 <geekosaur> when they're not nested in some other layout-using construct
2022-01-11 21:15:53 +0100 <geekosaur> let inside of do will break, for example
2022-01-11 21:16:00 +0100 <schuelermine[m]> > let a = 2; b = 3 in [a,b+a]
2022-01-11 21:16:02 +0100 <lambdabot> [2,5]
2022-01-11 21:16:10 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-01-11 21:16:37 +0100 <schuelermine[m]> …ok, that got turned into a blockquote on Matrix, hope that got through fine
2022-01-11 21:16:54 +0100 <geekosaur> worked fine here
2022-01-11 21:17:15 +0100 <geekosaur> bridging message systems with different conventions has its rough edges :)
2022-01-11 21:17:35 +0100briandaed(~root@185.234.208.208.r.toneticgroup.pl) (Remote host closed the connection)
2022-01-11 21:17:51 +0100 <geekosaur> you could use @run instead of "> " if matrix is doing weird things with it
2022-01-11 21:18:25 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2022-01-11 21:18:35 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-01-11 21:19:02 +0100 <Inst> question
2022-01-11 21:19:03 +0100 <schuelermine[m]> IMO the best feature of rich text messaging is <details>, that's so convenient if you wanna send loads of text without cluttering up everyone's screens
2022-01-11 21:19:10 +0100 <Inst> is it not possible to dispense wholly with .?
2022-01-11 21:19:17 +0100jkaye(~jkaye@2601:281:8300:7530:7cb5:a22f:ba66:1688) (Ping timeout: 240 seconds)
2022-01-11 21:19:22 +0100 <Inst> like, i mean, i could always just replace . with a lambda
2022-01-11 21:19:46 +0100 <geekosaur> there are some uses of . that can't be done in other ways, like use with forall
2022-01-11 21:19:48 +0100 <Inst> pure ((<*>) . (pure openFile <*>)) <*> openFilePath <*> pure (pure ReadMode)
2022-01-11 21:19:53 +0100 <Inst> like, how do I get . out?
2022-01-11 21:20:03 +0100 <Inst> lambda solution is always there, of course
2022-01-11 21:20:09 +0100kupi(uid212005@id-212005.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
2022-01-11 21:20:10 +0100 <geekosaur> @unpl pure ((<*>) . (pure openFile <*>)) <*> openFilePath <*> pure (pure ReadMode)
2022-01-11 21:20:10 +0100 <lambdabot> ((pure (\ x -> (<*>) (pure openFile <*> x)) <*> openFilePath) <*> pure (pure ReadMode))
2022-01-11 21:20:18 +0100 <Inst> unpl?
2022-01-11 21:20:30 +0100 <Inst> so the only way i can nuke the . is with a lambda? :(
2022-01-11 21:20:32 +0100 <geekosaur> reverse of @pl which removes "points" (variables)
2022-01-11 21:20:42 +0100 <Inst> pointless -> point free? :)
2022-01-11 21:20:44 +0100 <geekosaur> that doens't necessarily mean it's the only way\
2022-01-11 21:20:50 +0100 <bjs> presumably "un-point-less" :P
2022-01-11 21:21:11 +0100 <geekosaur> yes. "pointless" is just, well, when you see some of the stuff it comes up with, you'll see why some people consider it pointless :)
2022-01-11 21:21:48 +0100 <geekosaur> multiple uses of <*> can sometimes be replaced by use of liftAn for some n
2022-01-11 21:21:53 +0100 <Inst> i know
2022-01-11 21:21:59 +0100 <Inst> but trying to do it with just pure and <*>
2022-01-11 21:22:08 +0100whatsupdoc(uid509081@id-509081.hampstead.irccloud.com)
2022-01-11 21:22:12 +0100 <Inst> it's something about parsing, i'm sure
2022-01-11 21:22:14 +0100 <EvanR> just pure or <*>, no lambda, what else
2022-01-11 21:22:18 +0100 <Inst> hi whatsupdoc, did you finally try learning Haskell yet?
2022-01-11 21:22:27 +0100 <Inst> parens, I guess, or $
2022-01-11 21:22:28 +0100 <whatsupdoc> lol
2022-01-11 21:22:37 +0100 <EvanR> no parens allowed?
2022-01-11 21:22:41 +0100 <Inst> allowed
2022-01-11 21:22:56 +0100 <EvanR> these rules are turning into an olympic sport
2022-01-11 21:22:56 +0100 <whatsupdoc> why so curious about me learning haskell?
2022-01-11 21:23:53 +0100 <Inst> EvanR: "make a functional IO program that can read and write files on lesson 3 of 'Haskell for non-programmers'"
2022-01-11 21:24:15 +0100 <EvanR> do notation
2022-01-11 21:24:16 +0100 <whatsupdoc> Inst: i'm learning about the stock market right now
2022-01-11 21:24:34 +0100 <Inst> is it ethical to teach do notation without teaching what's happening underneath?
2022-01-11 21:24:36 +0100 <EvanR> and case analysis to dispatch the Maybes if they appear
2022-01-11 21:24:45 +0100 <EvanR> yes it is ethical and probably smart
2022-01-11 21:24:45 +0100 <Inst> i mean all you need is Do
2022-01-11 21:24:47 +0100 <monochrom> Unethical.
2022-01-11 21:25:04 +0100 <Inst> some people after getting monads want to teach a monad tutorial, i want to teach a monad course
2022-01-11 21:25:06 +0100 <EvanR> just get something in IO working
2022-01-11 21:25:09 +0100 <Inst> which is less unethical
2022-01-11 21:25:13 +0100 <whatsupdoc> as soon as that's over, i'll start learning haskell
2022-01-11 21:25:20 +0100 <EvanR> like we saw earlier it doesn't have to have anything to do with Monads
2022-01-11 21:25:29 +0100 <Inst> hmmm, if i paid you $6 would you be a guinea pig for my haskell course?
2022-01-11 21:25:34 +0100 <monochrom> Well, actually I don't have a notion of ethics for this. But I have a notion of efficacy on this. do-notation is more confusing than helping at an early stage.
2022-01-11 21:25:34 +0100 <Inst> it'll be taught on twitch.tv and Discord
2022-01-11 21:25:39 +0100 <EvanR> you used other means and didn't even use the monad instance
2022-01-11 21:25:59 +0100 <whatsupdoc> twitch? I hate live stream stuff, disaster for learning
2022-01-11 21:26:05 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-01-11 21:26:05 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-01-11 21:26:05 +0100wroathe(~wroathe@user/wroathe)
2022-01-11 21:26:38 +0100 <Inst> tbh i'm thinking it'd be impossible to teach algebraic data types on lesson 2
2022-01-11 21:27:01 +0100d0ku(~d0ku@178.43.3.56.ipv4.supernova.orange.pl)
2022-01-11 21:27:06 +0100 <Inst> then intro monads as part of algebraic data types, along with the standard "monad anti-tutorial"
2022-01-11 21:27:36 +0100 <EvanR> speaking of which, why are we learning haskell right now from the perspective of a seasoned practioner attempting to teach it to non-programmers
2022-01-11 21:27:37 +0100 <monochrom> Live stream per se is neither good nor bad for learning. The real difference is between pre-planned and stream-of-consciousness.
2022-01-11 21:27:42 +0100 <whatsupdoc> ablgebraic data types sounds like a class
2022-01-11 21:27:45 +0100 <EvanR> i.e. where most of the monad tutorials came from
2022-01-11 21:27:50 +0100 <EvanR> bad ones
2022-01-11 21:28:18 +0100 <EvanR> like, learn it from the perspective of someone learning it
2022-01-11 21:28:22 +0100 <monochrom> And then statistically most live-streamers are stream-of-consciousness.
2022-01-11 21:28:38 +0100 <Inst> i'm trying to learn it, which is why i feel privileged to blow my mouth off about stuff i don't understand
2022-01-11 21:28:47 +0100 <whatsupdoc> what's the best reosurce for learning haskell? i think if i don't have a structured plan i probably won't be curious to dig into it on my own
2022-01-11 21:28:51 +0100 <Inst> "if I were teaching myself, this would be how I'd do it"
2022-01-11 21:28:55 +0100 <Inst> LYAH is dead
2022-01-11 21:29:06 +0100 <Inst> HPFFP costs money, but you can find a moderately old version online
2022-01-11 21:29:15 +0100 <Inst> apparently people have a grudge against Chris Allen for trying to rip off Julie Moronuki
2022-01-11 21:29:30 +0100 <Inst> LYAH you can still find on archive.org
2022-01-11 21:29:33 +0100 <monochrom> I don't know about best. But http://www.vex.net/~trebla/haskell/learn-sources.html is my comments on some resources I have looked at.
2022-01-11 21:29:47 +0100 <monochrom> And eventually "best" is very personal.
2022-01-11 21:30:03 +0100 <Inst> no relation to that smuggler, monochrom?
2022-01-11 21:30:07 +0100 <monochrom> And ultimately "best" just means the 3rd time you learn.
2022-01-11 21:30:32 +0100Sgeo_(~Sgeo@user/sgeo)
2022-01-11 21:30:37 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 240 seconds)
2022-01-11 21:30:45 +0100 <whatsupdoc> It's hard to find the motivation to learn something if I have no reason to learn it. I'm happy with C++ and Python :)
2022-01-11 21:30:48 +0100 <Inst> lesson 2 at least has to be an introduction to the typechecker and why it's telling you to kys
2022-01-11 21:31:24 +0100 <[itchyjunk]> Uh, i thought guard was the | stuff when defining functions.
2022-01-11 21:31:29 +0100 <whatsupdoc> I'll take this course and do all the assignments https://www.seas.upenn.edu/~cis194/fall16/
2022-01-11 21:31:34 +0100 <Inst> yeah, your only motivation is an off-handed claim in ##programming that you could pick up Haskell in 3 days
2022-01-11 21:31:37 +0100 <[itchyjunk]> Where is the guard in [x | x <- [1..10], even x] ?
2022-01-11 21:31:42 +0100 <polyphem> whatsupdoc: do you do template metaprogramming in c++ ?
2022-01-11 21:31:48 +0100 <Inst> I've met people who, with the appropriate pedagogy probably could do it
2022-01-11 21:31:51 +0100 <monochrom> This is why I don't push myself to learn an unmotivated thing.
2022-01-11 21:31:55 +0100 <Inst> but they were Harvard students overloading 24 credits a term
2022-01-11 21:31:55 +0100 <[itchyjunk]> Inst, someone in ##programming said that?
2022-01-11 21:31:59 +0100 <Inst> whatsupdoc
2022-01-11 21:32:27 +0100 <Inst> (norm is 16 credits, so I'm told)
2022-01-11 21:32:40 +0100 <Inst> in hard sciences, mind you
2022-01-11 21:32:53 +0100 <whatsupdoc> you're looking at 20 units at a top 10 public university, all A+s, 4 upper div CS classes
2022-01-11 21:33:00 +0100 <monochrom> For example people here raved about adjunctions, and I resisted for like 10 years. I finally learned it, but only when it had utility for me.
2022-01-11 21:33:01 +0100 <whatsupdoc> lol
2022-01-11 21:33:09 +0100 <Inst> monochrom: the joke was regarding Lai Changxing
2022-01-11 21:33:11 +0100 <monochrom> And to date I still resist learning lenses.
2022-01-11 21:33:18 +0100Sgeo(~Sgeo@user/sgeo) (Ping timeout: 256 seconds)
2022-01-11 21:33:26 +0100 <whatsupdoc> i'm sure I can learn it
2022-01-11 21:33:33 +0100 <whatsupdoc> But usually I learn faster when I enjoy learning it
2022-01-11 21:33:33 +0100 <Inst> in 3 days?
2022-01-11 21:33:45 +0100 <geekosaur> [itchyjunk], "|" in general can be read as "such that". in some contexts that means a guard is coming (foo x | x < 5 = ...). in some cases that means something like "where", as in list comprehensions
2022-01-11 21:33:52 +0100 <whatsupdoc> I'm sure I could get the hang of some things after 3 days
2022-01-11 21:34:14 +0100 <whatsupdoc> And start writing meaningful-ish programs at that point
2022-01-11 21:34:16 +0100 <[itchyjunk]> geekosaur, ah the | can be though of as guard then? i see
2022-01-11 21:34:16 +0100 <Inst> okay, so i guess you want money to learn tolerably bad Haskell within 3 days
2022-01-11 21:34:23 +0100 <monochrom> [itchyjunk]: "even x" is the guard.
2022-01-11 21:34:23 +0100 <geekosaur> in some situsations
2022-01-11 21:34:41 +0100 <[itchyjunk]> oh :x
2022-01-11 21:34:51 +0100 <[itchyjunk]> i think i understand
2022-01-11 21:34:52 +0100 <Inst> hmmm
2022-01-11 21:34:52 +0100 <whatsupdoc> Never heard of template metaprogramming polyphem
2022-01-11 21:34:56 +0100 <monochrom> true for some x's and false for some others.
2022-01-11 21:35:00 +0100 <geekosaur> "such that" is the general nmeaning. if you're defining something, "such that" means a guard is coming. in a list comprehension, the list is coming
2022-01-11 21:35:19 +0100 <Inst> look, if you can deliver me a composition dependent strategy calculator in haskell
2022-01-11 21:35:19 +0100 <geekosaur> there are some other uses of "|", but iirc they all fit "such that"
2022-01-11 21:35:20 +0100 <polyphem> whatsupdoc: c++ templates
2022-01-11 21:35:24 +0100 <Inst> in 5 days
2022-01-11 21:35:29 +0100 <Inst> how much would you want for it?
2022-01-11 21:35:38 +0100 <whatsupdoc> polyphem: who hasn't written templates in C++ lol
2022-01-11 21:36:03 +0100 <whatsupdoc> they give power to the language
2022-01-11 21:36:08 +0100 <Inst> that is to say, a program that takes an input of some rules settings and outputs a chart telling you which action in blackjack delivers the most EV
2022-01-11 21:36:14 +0100 <polyphem> whatsupdoc: are they an more advanced and complex c++ feature ?
2022-01-11 21:36:26 +0100 <whatsupdoc> i would probably say so
2022-01-11 21:36:29 +0100 <monochrom> I disagree that "such that" has semantics at all. It is there to just fulfill an English grammar rule. And English is by no means a hallmark of good expression.
2022-01-11 21:36:45 +0100 <[itchyjunk]> hmm
2022-01-11 21:36:49 +0100 <Inst> whatsupdoc? is money sufficient motivation?
2022-01-11 21:36:53 +0100kuribas(~user@ptr-25vy0ia1hzdpftx2lxu.18120a2.ip6.access.telenet.be) (Quit: ERC (IRC client for Emacs 26.3))
2022-01-11 21:36:56 +0100 <whatsupdoc> what is up with you lol
2022-01-11 21:37:05 +0100 <Inst> sorry
2022-01-11 21:37:11 +0100 <monochrom> At best it plays the role of a separator. So, purely syntactical.
2022-01-11 21:37:12 +0100 <whatsupdoc> i'm about to get my wisdom teeth removed in 3 hours lol
2022-01-11 21:37:17 +0100 <Inst> i sort of need one
2022-01-11 21:37:20 +0100 <Inst> take it easy :)
2022-01-11 21:37:29 +0100 <whatsupdoc> So the challenge can't start now :)
2022-01-11 21:37:52 +0100 <Inst> and i thought about coding it myself, but then I tried doing a list enumeration of [1..20000000]
2022-01-11 21:37:58 +0100 <Inst> 2 hours to get to 4%
2022-01-11 21:38:02 +0100 <Inst> then again, it was on GHCi
2022-01-11 21:38:04 +0100 <whatsupdoc> I wouldn't be able to test out a 5 day challenge, especially working 40 hours a week
2022-01-11 21:38:04 +0100 <EvanR> hey man, schwarzchild solved einsteins equations while fighting world war I, maybe you could use haskell to take your mind off lol
2022-01-11 21:38:52 +0100 <whatsupdoc> Learning haskell at work lol
2022-01-11 21:38:54 +0100 <polyphem> whatsupdoc: what struck me about haskell, is that whats top end of c++ (templates) , is so easily expressed using haskell , and its more like hello world
2022-01-11 21:38:56 +0100 <Inst> honestly, i think you're the stereotypical "ass" haskeller and you don't even know Haskell
2022-01-11 21:38:57 +0100 <monochrom> Fighting WWI is different from today's 40-hour-week job.
2022-01-11 21:39:07 +0100 <Inst> you'd fit right in
2022-01-11 21:39:21 +0100 <EvanR> refering the wisdom teeth thing
2022-01-11 21:39:25 +0100 <whatsupdoc> gatekeeper
2022-01-11 21:39:39 +0100 <whatsupdoc> you get to chill in a trench during a world war
2022-01-11 21:39:39 +0100 <monochrom> WWI was physically draining but not mentally draining. In fact doing mental work was how to rest.
2022-01-11 21:39:47 +0100 <Inst> from what i've heard
2022-01-11 21:39:54 +0100 <Inst> when American troops got into the trenches
2022-01-11 21:40:01 +0100 <whatsupdoc> put me in a trench and i'd get so bored, i'd reinvent haskell
2022-01-11 21:40:02 +0100 <Inst> all the soldiers on the allied side who seemed lucid from their letters
2022-01-11 21:40:11 +0100 <Inst> seemed like half-dead zombies
2022-01-11 21:40:12 +0100 <monochrom> Today's jobs are mentally draining but not physically draining. In fact turning off your brain and going to gym is how to rest.
2022-01-11 21:40:14 +0100 <Inst> due to the sheer fatigue
2022-01-11 21:40:37 +0100Guest42(~Guest42@563BEF60.catv.pool.telekom.hu) (Quit: Client closed)
2022-01-11 21:40:58 +0100 <whatsupdoc> EvanR: lol woosh
2022-01-11 21:41:49 +0100Everything(~Everythin@37.115.210.35) (Quit: leaving)
2022-01-11 21:41:53 +0100 <monochrom> But perhaps you can join the army.
2022-01-11 21:42:05 +0100 <monochrom> "Join the Army! Learn Haskell!"
2022-01-11 21:42:46 +0100 <Inst> if I ever get my dream of talking Xi Jinping into forcing his country's software industry to use Haskell by default implemented, that might actually come true
2022-01-11 21:43:17 +0100 <Inst> you'll have to learn Haskell in order to discover software vulnerabilities in opposing force electronics
2022-01-11 21:43:42 +0100 <Inst> tbh
2022-01-11 21:43:51 +0100 <Inst> if the Soviet Union still existed, do you think the Soviets would have mandated FP?
2022-01-11 21:43:51 +0100 <whatsupdoc> you probably big on cardano lol
2022-01-11 21:44:22 +0100 <whatsupdoc> FP?
2022-01-11 21:44:23 +0100 <EvanR> and then Americans learn haskell to find vulnerabilities in all china's software because it's written in haskell
2022-01-11 21:44:32 +0100 <Inst> EvanR: win win, no?
2022-01-11 21:44:41 +0100 <geekosaur> depends on whoever talked them into believing that <x> programming strategy is "bourgeois"
2022-01-11 21:44:44 +0100 <Inst> mass Haskell adoption for everyone
2022-01-11 21:45:05 +0100 <Inst> strangely enough, the best Haskell textbooks I've seen were written by Russians
2022-01-11 21:45:15 +0100 <geekosaur> remember that neither politics nor law is particularly rational
2022-01-11 21:45:20 +0100Tuplanolla(~Tuplanoll@91-159-68-166.elisa-laajakaista.fi)
2022-01-11 21:45:31 +0100 <Inst> Soviets and Chinese have strong baseline math education
2022-01-11 21:45:32 +0100 <monochrom> C++ is too advanced. Haskell is so much easier.
2022-01-11 21:45:56 +0100 <Inst> reason Soviets would have stuck with IP / procedural norms, though, was that they were behind on semi-conductors
2022-01-11 21:46:34 +0100 <Inst> the Chinese are around 10 years behind, with 8nm being cutting edge (with imported equipment) and they're just implementing 14nm, whereas the Taiwanese are going to ship 5nm this year
2022-01-11 21:47:00 +0100 <Inst> so to get the most raw performance out of their semiconductors, they would likely have stuck with imperative programming
2022-01-11 21:47:11 +0100 <EvanR> my other computer is forall x > 0 nm
2022-01-11 21:48:07 +0100ouestbillie(~gallup@192-222-138-215.qc.cable.ebox.net)
2022-01-11 21:48:58 +0100 <[itchyjunk]> Where do you hide your favorate list comprehension exercises?
2022-01-11 21:49:06 +0100 <[itchyjunk]> having a hard time finding them with google
2022-01-11 21:49:14 +0100 <[itchyjunk]> or maybe "list comprehension" isnt' the right term?
2022-01-11 21:49:15 +0100 <[exa]> [itchyjunk]: protip: try Prolog
2022-01-11 21:49:16 +0100 <Inst> i'll query you some "stuff"
2022-01-11 21:49:25 +0100 <Inst> are you working Lyah?
2022-01-11 21:49:27 +0100 <[itchyjunk]> isn't that a different language? :x
2022-01-11 21:50:18 +0100 <[exa]> list monad and prolog behave similarly (also check out LogicT), so porting some prologish exercises to lists&comprehensions is usually a cool way to find new exercises
2022-01-11 21:51:15 +0100 <[itchyjunk]> Hm, might have to do that. would have been ideal if i found some exercises made for novice haskeller
2022-01-11 21:51:17 +0100 <Inst> nice
2022-01-11 21:51:22 +0100 <Inst> check query
2022-01-11 21:51:51 +0100mjs2600(~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net) (Read error: Connection reset by peer)
2022-01-11 21:52:08 +0100 <[exa]> try doing the "kalotan puzzle" with list comprehensions, not interpreting any of the logic yourself. See http://gauss.ececs.uc.edu/Courses/c694/lectures/Review/Exceptions/review.9.html or here with better hints https://ds26gte.github.io/tyscheme/index-Z-H-16.html#TAG:__tex2page_sec_14.4.1
2022-01-11 21:52:14 +0100 <monochrom> You may not need many list comprehension exercises.
2022-01-11 21:52:22 +0100michalz(~michalz@185.246.204.126)
2022-01-11 21:52:26 +0100mjs2600(~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net)
2022-01-11 21:52:26 +0100 <[exa]> [itchyjunk]: ^^
2022-01-11 21:52:27 +0100 <[itchyjunk]> :O
2022-01-11 21:52:27 +0100 <hololeap> [a] -> LogicT m a -- I've been using (asum . fmap pure) for this, but I'm wondering if there's something more idiomatic
2022-01-11 21:52:33 +0100dhouthoo(~dhouthoo@178-117-36-167.access.telenet.be) (Quit: WeeChat 3.4)
2022-01-11 21:52:35 +0100 <polyphem> [itchyjunk]: i did project euler when i started to learn haskell and i used list comprehension quite a lot when doing the puzzles so maybe thats somthing for you
2022-01-11 21:52:46 +0100 <[exa]> +1 polyphem
2022-01-11 21:55:02 +0100 <polyphem> [itchyjunk]: https://projecteuler.net/
2022-01-11 21:55:36 +0100 <monochrom> Ugh no, unless you won't ask "how to make it fast".
2022-01-11 21:56:11 +0100 <monochrom> If you fully expect to use list comprehension for brute-forcing and fully expect it's blind brute-forcing then sure.
2022-01-11 21:59:49 +0100 <[itchyjunk]> Can I OR on guards?
2022-01-11 21:59:50 +0100 <EvanR> It's very good at brute forcing
2022-01-11 21:59:57 +0100 <polyphem> monochrom: what do you mean , projecteuler ?
2022-01-11 22:00:01 +0100 <[itchyjunk]> [x | x <- list, blah or blah2
2022-01-11 22:00:11 +0100 <tomsmeding> :t (||)
2022-01-11 22:00:12 +0100 <lambdabot> Bool -> Bool -> Bool
2022-01-11 22:00:15 +0100 <EvanR> specifically you won't miss elements of the lists
2022-01-11 22:00:18 +0100 <monochrom> Yes Project Euler.
2022-01-11 22:00:42 +0100 <monochrom> > [ x | x <- [1,2,3], even x || odd x]
2022-01-11 22:00:44 +0100 <lambdabot> [1,2,3]
2022-01-11 22:01:17 +0100schweers(~user@2001:16b8:e94a:ef00:aaa1:59ff:fe3f:235c) (Quit: ERC 5.4 (IRC client for GNU Emacs 28.0.91))
2022-01-11 22:02:30 +0100 <[itchyjunk]> https://bpa.st/YBQQ
2022-01-11 22:02:32 +0100 <[itchyjunk]> ta da
2022-01-11 22:03:31 +0100 <polyphem> foldr (+) 0 = sum
2022-01-11 22:04:10 +0100 <polyphem> > sum [1..10]
2022-01-11 22:04:11 +0100 <lambdabot> 55
2022-01-11 22:04:15 +0100 <EvanR> shouldn't sum really be a (strict) foldl
2022-01-11 22:04:20 +0100 <[itchyjunk]> oh
2022-01-11 22:04:21 +0100jkaye(~jkaye@2601:281:8300:7530:a9ff:dc19:c096:5ef5)
2022-01-11 22:04:55 +0100 <tomsmeding> EvanR: it is since ghc 9.2
2022-01-11 22:05:02 +0100 <monochrom> It doesn't matter for 10 numbers.
2022-01-11 22:05:03 +0100 <tomsmeding> before that it was foldl, of all things
2022-01-11 22:05:13 +0100 <bjs> I think EvanR is saying for [itchyjunk]'s benefit
2022-01-11 22:05:16 +0100 <EvanR> oh it is? cool
2022-01-11 22:05:42 +0100 <tomsmeding> EvanR: https://hackage.haskell.org/package/base-4.15.1.0/docs/src/GHC.List.html#sum vs https://hackage.haskell.org/package/base-4.16.0.0/docs/src/GHC.List.html#sum
2022-01-11 22:06:00 +0100 <bjs> [itchyjunk]: you should keep doing fold exercises so you get a feel for when foldr and foldl make sense, it's tricky
2022-01-11 22:06:25 +0100 <[itchyjunk]> yeah foldl foldr has been the worst of them so far!
2022-01-11 22:06:26 +0100notzmv(~zmv@user/notzmv)
2022-01-11 22:06:36 +0100 <EvanR> FOLD LIFE
2022-01-11 22:06:39 +0100 <bjs> tomsmeding: why was it foldl not foldl' before? I can't see a benefit
2022-01-11 22:07:09 +0100 <geekosaur> becuase that's what the haskell report's prelude said it should be
2022-01-11 22:07:19 +0100 <tomsmeding> https://www.haskell.org/onlinereport/haskell2010/haskellch9.html#x16-1720009.1
2022-01-11 22:07:30 +0100 <EvanR> yeah so no benefit
2022-01-11 22:07:35 +0100 <tomsmeding> indeed
2022-01-11 22:10:16 +0100jgeerds_(~jgeerds@55d4bbed.access.ecotel.net)
2022-01-11 22:10:25 +0100 <bjs> [itchyjunk]: it might be instructive to try write your own foldl function using foldr (and vice-versa) and considering how they behave on infinite lists
2022-01-11 22:12:23 +0100Topsi(~Tobias@dyndsl-095-033-027-133.ewe-ip-backbone.de) (Read error: Connection reset by peer)
2022-01-11 22:12:24 +0100 <[itchyjunk]> wth!
2022-01-11 22:12:39 +0100 <[itchyjunk]> write foldl using foldr? heh. alright, maybe i'll try that
2022-01-11 22:12:43 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2022-01-11 22:12:48 +0100 <[itchyjunk]> i did write filter using foldl and foldr i think
2022-01-11 22:13:47 +0100 <polyphem> [itchyjunk]: or you watch a video : https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=&cad=rja&uact=8&ved=2ahUKEwiB__zhzqr…
2022-01-11 22:14:08 +0100breakwindows(~brkwnds@86.107.75.45)
2022-01-11 22:14:10 +0100 <polyphem> [itchyjunk]: sorry , https://www.youtube.com/watch?v=t9pxo7L8mS0
2022-01-11 22:15:39 +0100`2jt(~jtomas@10.red-83-58-228.dynamicip.rima-tde.net) (Ping timeout: 256 seconds)
2022-01-11 22:17:17 +0100CiaoSen(~Jura@p200300c957347b002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
2022-01-11 22:17:18 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-01-11 22:17:18 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-01-11 22:17:18 +0100wroathe(~wroathe@user/wroathe)
2022-01-11 22:18:59 +0100ec(~ec@gateway/tor-sasl/ec)
2022-01-11 22:19:37 +0100biog(~user1@static.39.160.132.142.clients.your-server.de) (Quit: ZZZzzz…)
2022-01-11 22:19:56 +0100 <Inst> does anyone know / do fantasyland here?
2022-01-11 22:19:59 +0100 <Inst> I'm reading a bit up about it
2022-01-11 22:20:20 +0100werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 256 seconds)
2022-01-11 22:22:02 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2022-01-11 22:22:09 +0100werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
2022-01-11 22:23:29 +0100 <Inst> ultimate love letter to haskell, tbh
2022-01-11 22:23:35 +0100 <Inst> well, it'd be ultimate if you had haskell syntax
2022-01-11 22:23:56 +0100 <EvanR> "fantasyland" is haskell related?
2022-01-11 22:24:43 +0100pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Ping timeout: 256 seconds)
2022-01-11 22:26:09 +0100 <Inst> Fantasyland is a specification for Javascript libraries inspired by Haskell
2022-01-11 22:26:48 +0100 <Inst> it came after some people on Javascript committees told the devs "you must live in Fantasyland" after they suggested porting FP structures to the Javascript language
2022-01-11 22:26:52 +0100pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
2022-01-11 22:28:08 +0100 <geekosaur> *snort*
2022-01-11 22:30:04 +0100_ht(~quassel@82-169-194-8.biz.kpn.net) (Remote host closed the connection)
2022-01-11 22:31:11 +0100SummerSonw(~The_viole@203.77.49.232)
2022-01-11 22:32:00 +0100lavaman(~lavaman@98.38.249.169)
2022-01-11 22:32:27 +0100 <[itchyjunk]> Say i wanted to define a list l such that the first two element is 1 and 2 and the third element is the sum of those. so `let l = 1:2:"sum of those things"` `let l = 1:2:foldr (+) 0 l` ish?
2022-01-11 22:32:28 +0100pottsy(~pottsy@129.227.183.244) (Ping timeout: 250 seconds)
2022-01-11 22:33:05 +0100 <[itchyjunk]> but i can see this is creating recursions that would mess it up
2022-01-11 22:33:28 +0100 <geekosaur> you might be interestd in zipWith
2022-01-11 22:33:33 +0100 <[itchyjunk]> hmmm
2022-01-11 22:33:50 +0100 <geekosaur> see the classic definition of fibs
2022-01-11 22:33:55 +0100biog(~user1@static.39.160.132.142.clients.your-server.de)
2022-01-11 22:34:37 +0100euandreh(~euandreh@2804:14c:33:9fe5:4f29:e68c:50c9:fe2) (Ping timeout: 240 seconds)
2022-01-11 22:35:00 +0100 <geekosaur> > let l = 1:2:zipWith (+) l (tail l) in l
2022-01-11 22:35:02 +0100 <lambdabot> [1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,1771...
2022-01-11 22:35:45 +0100 <whatsupdoc> is haskell the future?
2022-01-11 22:35:48 +0100 <geekosaur> hm, or did you want to go from the beginning for each one?
2022-01-11 22:36:17 +0100 <[itchyjunk]> i am not sure what i wanted anymore! :P but i guess i'll learn up on zipWith a bit more
2022-01-11 22:36:17 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 240 seconds)
2022-01-11 22:36:18 +0100 <geekosaur> whatsupdoc, haskell is already having an impact on many other languages. not sure haskell itself is the future but its ideas certainly seem to be
2022-01-11 22:36:20 +0100 <[itchyjunk]> might be a useful thing
2022-01-11 22:36:21 +0100 <EvanR> whatsupdoc, I'm sure someone's been asking this since 1990
2022-01-11 22:36:43 +0100 <polyphem> whatsupdoc: wrong question , do YOU want it to be the future ?
2022-01-11 22:36:49 +0100 <whatsupdoc> no
2022-01-11 22:37:11 +0100 <Inst> it's sort of insulting, tbh, given that "Fusion is the energy technology of the future and has been since the 1950s."
2022-01-11 22:37:11 +0100 <EvanR> haskell is the present
2022-01-11 22:37:42 +0100 <EvanR> acme-now
2022-01-11 22:37:44 +0100 <polyphem> haskell has the tardis , its past and future
2022-01-11 22:37:48 +0100 <Inst> like I said, apparently Javascript coders got so jealous they reimplemented a good portion of the Haskell language in JS
2022-01-11 22:38:09 +0100 <EvanR> javascriptZ ?
2022-01-11 22:38:13 +0100 <[itchyjunk]> I want causality to stop existing. So we already had this conversation tomorrow.
2022-01-11 22:38:16 +0100 <Inst> is javascriptZ a thing?
2022-01-11 22:38:30 +0100gehmehgeh(~user@user/gehmehgeh) (Quit: Leaving)
2022-01-11 22:38:31 +0100 <geekosaur> there's alsourescript and typescript
2022-01-11 22:38:45 +0100 <geekosaur> *also purescript
2022-01-11 22:38:47 +0100 <Inst> fantasyland libs, i mean
2022-01-11 22:39:13 +0100 <whatsupdoc> typescript is functionally equivalent to haskell?
2022-01-11 22:39:24 +0100 <[itchyjunk]> So i want to reimplement foldr using foldl. is my signature correct? (a -> b -> b) -> b -> [a] -> [b]
2022-01-11 22:39:36 +0100 <[itchyjunk]> or do i need the constraint of Foldable t here?
2022-01-11 22:39:39 +0100 <EvanR> you mean implement foldl with foldr
2022-01-11 22:39:43 +0100ensyde(~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
2022-01-11 22:39:51 +0100 <[itchyjunk]> i thought maybe using [a] lets me skip it
2022-01-11 22:40:02 +0100 <geekosaur> typescript takes the idea of haskell-ish types and adds them to javascript
2022-01-11 22:40:04 +0100 <Inst> did someone teach you accumulators yet?
2022-01-11 22:40:04 +0100 <[itchyjunk]> i thought i was trying to implement foldr using foldl
2022-01-11 22:40:18 +0100 <geekosaur> purescript is a closer approximation of haskell
2022-01-11 22:40:30 +0100 <[itchyjunk]> hmm i think i might have used accumulator to count the length of a string
2022-01-11 22:40:42 +0100 <EvanR> foldl fails any task for infinite list
2022-01-11 22:40:49 +0100ensyde(~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Client Quit)
2022-01-11 22:40:50 +0100 <[itchyjunk]> :o
2022-01-11 22:41:05 +0100 <Inst> foldl uses an accumulator as a central value, then kills itself and displays the accumulator on death
2022-01-11 22:41:07 +0100 <[itchyjunk]> so you can represent foldl with foldr but not vice versa? /o\
2022-01-11 22:41:20 +0100 <polyphem> [itchyjunk]: i really urge you to watch the video :)
2022-01-11 22:41:26 +0100talismanick(~talismani@c-67-164-73-220.hsd1.ca.comcast.net)
2022-01-11 22:41:34 +0100 <[itchyjunk]> ive watched first 10 mins
2022-01-11 22:41:51 +0100 <Inst> yeah, because the function has to finish processing the data before the accumulator can process
2022-01-11 22:42:07 +0100zer0bitz(~zer0bitz@2001:2003:f444:a000:2d06:fff0:d105:7c1) (Ping timeout: 268 seconds)
2022-01-11 22:42:12 +0100danso(~danso@2001:1970:52e7:d000:96b8:6dff:feb3:c009) (Quit: WeeChat 3.3)
2022-01-11 22:42:13 +0100 <polyphem> hmm
2022-01-11 22:42:33 +0100danso(~danso@2001:1970:52e7:d000:96b8:6dff:feb3:c009)
2022-01-11 22:42:35 +0100 <EvanR> the real answer lies in the code for foldl
2022-01-11 22:42:41 +0100 <Inst> accumulators: basically a sneaky way to get something like mutable variables, except with no side effects
2022-01-11 22:42:42 +0100ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
2022-01-11 22:43:07 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2022-01-11 22:43:25 +0100mc47(~mc47@xmonad/TheMC47) (Remote host closed the connection)
2022-01-11 22:44:03 +0100biberu(~biberu@user/biberu) (Read error: Connection reset by peer)
2022-01-11 22:44:09 +0100 <Inst> i wonder what proportion of JS coders use fantasyland libs
2022-01-11 22:44:13 +0100danso(~danso@2001:1970:52e7:d000:96b8:6dff:feb3:c009) (Client Quit)
2022-01-11 22:44:26 +0100 <Inst> might possibly be more fantasyland users than Haskellers proper
2022-01-11 22:45:34 +0100danso(~danso@2001:1970:52e7:d000:96b8:6dff:feb3:c009)
2022-01-11 22:45:38 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-01-11 22:47:53 +0100takuan(~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
2022-01-11 22:48:35 +0100danso(~danso@2001:1970:52e7:d000:96b8:6dff:feb3:c009) (Client Quit)
2022-01-11 22:50:19 +0100danso(~danso@2001:1970:52e7:d000:96b8:6dff:feb3:c009)
2022-01-11 22:52:33 +0100euandreh(~euandreh@2804:14c:33:9fe5:4895:4e42:bd43:c273)
2022-01-11 22:54:43 +0100 <EvanR> Inst, a sneaky way to get something like mutable variables except no side effects is ST
2022-01-11 22:54:44 +0100xff0x(~xff0x@2001:1a81:534d:9900:c522:bda4:b63a:6841) (Ping timeout: 252 seconds)
2022-01-11 22:55:24 +0100xff0x(~xff0x@2001:1a81:534d:9900:8245:a333:af79:9a1f)
2022-01-11 22:56:08 +0100biberu(~biberu@user/biberu)
2022-01-11 22:58:41 +0100simpleauthority(~simpleaut@user/simpleauthority) (Quit: ZNC 1.8.2 - https://znc.in)
2022-01-11 22:58:49 +0100pdroman(~pdroman@27.red-88-5-21.dynamicip.rima-tde.net)
2022-01-11 22:59:15 +0100x28girl(~x28girl@user/x28girl)
2022-01-11 23:00:34 +0100simpleauthority(~simpleaut@user/simpleauthority)
2022-01-11 23:00:44 +0100pdroman(~pdroman@27.red-88-5-21.dynamicip.rima-tde.net) (Client Quit)
2022-01-11 23:01:26 +0100x28_girl(~x28girl@user/x28girl)
2022-01-11 23:02:00 +0100myrrh(~markus@user/poet)
2022-01-11 23:02:00 +0100danso(~danso@2001:1970:52e7:d000:96b8:6dff:feb3:c009) (Quit: WeeChat 3.3)
2022-01-11 23:03:20 +0100x28__girl(~x28girl@user/x28girl)
2022-01-11 23:05:06 +0100x28girl(~x28girl@user/x28girl) (Ping timeout: 256 seconds)
2022-01-11 23:08:50 +0100Guest87(~Guest87@151.82.3.46)
2022-01-11 23:08:51 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2022-01-11 23:08:51 +0100Guest87(~Guest87@151.82.3.46) (Client Quit)
2022-01-11 23:09:01 +0100acidjnk(~acidjnk@p200300d0c7271e52381c42d4d3ad2973.dip0.t-ipconnect.de)
2022-01-11 23:09:01 +0100acidjnk_new(~acidjnk@p200300d0c7271e52381c42d4d3ad2973.dip0.t-ipconnect.de)
2022-01-11 23:09:25 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2022-01-11 23:10:12 +0100breakwindows(~brkwnds@86.107.75.45) (Ping timeout: 256 seconds)
2022-01-11 23:11:17 +0100n3rdy1(~n3rdy1@2600:1700:4570:3480:1b88:50f:dae0:9293) (Ping timeout: 240 seconds)
2022-01-11 23:14:09 +0100Guest87(~Guest87@151.82.3.46)
2022-01-11 23:17:30 +0100x28__girl(~x28girl@user/x28girl) (Remote host closed the connection)
2022-01-11 23:17:34 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
2022-01-11 23:17:57 +0100x28__girl(~x28girl@user/x28girl)
2022-01-11 23:18:24 +0100Guest8762(~Guest87@151.82.3.46)
2022-01-11 23:18:58 +0100x28__girl(~x28girl@user/x28girl) (Max SendQ exceeded)
2022-01-11 23:19:27 +0100x28__girl(~x28girl@user/x28girl)
2022-01-11 23:20:01 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-01-11 23:20:43 +0100Guest8762(~Guest87@151.82.3.46) (Client Quit)
2022-01-11 23:20:45 +0100x28__girl(~x28girl@user/x28girl) (Max SendQ exceeded)
2022-01-11 23:21:55 +0100x28__girl(~x28girl@user/x28girl)
2022-01-11 23:23:35 +0100Guest87(~Guest87@151.82.3.46) (Quit: Client closed)
2022-01-11 23:24:42 +0100danso(~danso@2001:1970:52e7:d000:96b8:6dff:feb3:c009)
2022-01-11 23:25:25 +0100cosimone(~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) (Read error: Connection reset by peer)
2022-01-11 23:25:55 +0100 <Inst> https://groups.seas.harvard.edu/courses/cs152/2019sp/lectures/lec18-monads.pdf
2022-01-11 23:31:20 +0100biog(~user1@static.39.160.132.142.clients.your-server.de) (Quit: ZZZzzz…)
2022-01-11 23:32:16 +0100lavaman(~lavaman@98.38.249.169)
2022-01-11 23:32:59 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-01-11 23:36:37 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 240 seconds)
2022-01-11 23:39:25 +0100SummerSonw(~The_viole@203.77.49.232) (Ping timeout: 240 seconds)
2022-01-11 23:42:51 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2022-01-11 23:43:41 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-01-11 23:44:06 +0100biog(~user1@static.39.160.132.142.clients.your-server.de)
2022-01-11 23:45:12 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-01-11 23:46:25 +0100michalz(~michalz@185.246.204.126) (Remote host closed the connection)
2022-01-11 23:48:47 +0100 <[itchyjunk]> How do people end up defining groups in programming language?
2022-01-11 23:48:55 +0100 <[itchyjunk]> as a data structure? list comprehension?
2022-01-11 23:49:07 +0100danso(~danso@2001:1970:52e7:d000:96b8:6dff:feb3:c009) (Quit: WeeChat 3.3)
2022-01-11 23:49:32 +0100 <geekosaur> depends on what you mean by group, and on how you're going to use it
2022-01-11 23:50:11 +0100 <geekosaur> singly-linked lists are often a poor data structure; usually it's better to think of them as loops instead of as data structures
2022-01-11 23:50:45 +0100danso(~danso@2001:1970:52e7:d000:96b8:6dff:feb3:c009)
2022-01-11 23:50:54 +0100 <hpc> obligatory "as a monoid with an inverse operation" :D
2022-01-11 23:51:06 +0100 <jackdk> https://hackage.haskell.org/package/groups
2022-01-11 23:52:12 +0100 <Logio> [itchyjunk]: groups as in groups of stuff (i.e. sets), or the algebraic structure?
2022-01-11 23:52:24 +0100 <[itchyjunk]> algebraid structure :s
2022-01-11 23:53:16 +0100cosimone(~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20)
2022-01-11 23:54:02 +0100qhong_(~qhong@rescomp-21-400677.stanford.edu)
2022-01-11 23:54:23 +0100 <[itchyjunk]> I guess monoid is a datastructure and group just extends it :D
2022-01-11 23:55:03 +0100 <qhong_> Anyone has experience successfully get exference or MagicHaskeller running? They seem bitrot and I can't get them pass build at all
2022-01-11 23:55:24 +0100 <geekosaur> a monoid iusn't so much a data structure as an attribute of some (many) data structures
2022-01-11 23:55:30 +0100 <geekosaur> same with groups
2022-01-11 23:55:48 +0100 <Logio> unless you consider a tuple of a type and a function a data structure
2022-01-11 23:55:52 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2022-01-11 23:56:06 +0100 <hpc> i suppose there are other ways to define it, but via monoid seems the most natural
2022-01-11 23:56:40 +0100 <hpc> maybe each axis of the "group cube" could be its own class, and you build group alacarte? https://upload.wikimedia.org/wikipedia/commons/3/3f/Magma_to_group4.svg
2022-01-11 23:56:40 +0100danso(~danso@2001:1970:52e7:d000:96b8:6dff:feb3:c009) (Quit: WeeChat 3.3)
2022-01-11 23:57:20 +0100danso(~danso@2001:1970:52e7:d000:96b8:6dff:feb3:c009)
2022-01-11 23:58:27 +0100alx741(~alx741@157.100.93.160)
2022-01-11 23:59:22 +0100 <geekosaur> qhong_, poking at exference it looks like the usual problem with <> having been adopted by the Prelude with a different meaning