Home liberachat/#haskell: Logs Calendar

Logs on 2022-01-21 (liberachat/#haskell)

00:00:24 <glassy> I would like it to be more flexible so I can use monadic if
00:00:24 <hpc> glassy: you want RebindableSyntax
00:00:38 <hpc> https://downloads.haskell.org/~ghc/7.0.2/docs/html/users_guide/syntax-extns.html#rebindable-syntax
00:00:58 stevenxl joins (~stevenxl@c-73-72-2-81.hsd1.il.comcast.net)
00:02:22 <Axman6> Guest24: do you know what : does?
00:02:36 <glassy> if you use RebindableSyntax, does using import Prelude bring it back to normal?
00:02:44 <glassy> just changing ifThenElse is the only thing I wish to change
00:02:58 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:494b:f936:f65f:424f) (Remote host closed the connection)
00:03:09 <Guest24> it's the cons operation?
00:03:27 <hpc> glassy: yeah
00:03:39 <hpc> import Prelude hiding (ifThenElse)
00:04:36 <ephemient> there is no ifThenElse in Prelude
00:05:08 <monochrom> But it becomes a thing under RebindableSyntax; see the doc there.
00:05:17 × stevenxl quits (~stevenxl@c-73-72-2-81.hsd1.il.comcast.net) (Ping timeout: 240 seconds)
00:05:29 <monochrom> (I was thinking that too. So I clicked the link. Best decision ever.)
00:05:57 <Axman6> Guest24: it is, which means that when you write x:negsum xs you must be returning a list, right?
00:06:13 <Axman6> :t (:)
00:06:14 <lambdabot> a -> [a] -> [a]
00:06:15 <Guest24> yh that's true
00:06:34 <Axman6> based on the name of your function, I assume you actually want to add things, right?
00:07:09 <Axman6> you know that x is an Int, andf you know that, because of the type of negsum, that negsum applied to xs will also return an Int, right?
00:07:29 <Guest24> i want write a recursive function that will take each value from the list and test it under the condition. if the condition is satisfied it will add that value to the running sum of the negative numbers in the list
00:08:00 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 276 seconds)
00:08:04 <Guest24> im sorry i come from imperative programming so this is very hard for me to grasp
00:08:26 <glassy> i'm a bit confused how I would use it though. ifThenElse :: (ToBool p, Monad m) => m p -> m a -> m a -> m a. ifThenElse :: ToBool p => p -> a -> a -> a
00:08:30 <glassy> i would like both signatures to work
00:08:35 <glassy> but they seem incompatible
00:08:46 <EvanR> Guest24, fun fact you can translate any imperative algorithm to functional using One Weird Trick
00:09:09 <Guest24> please tell me the trick
00:09:29 <EvanR> well I dunno about one weird trick, but it's pretty formulaic and may help you transition
00:09:33 × max22- quits (~maxime@2a01cb08833598008b56a1095c0012ed.ipv6.abo.wanadoo.fr) (Remote host closed the connection)
00:09:34 <Axman6> I think it's best to just make the one character change to this function to make it work first EvanR
00:09:45 <EvanR> yeah do that instead
00:10:06 <Axman6> Guest24: you're supposed to be returning an Int, but instead you're returning a list of Ints, right? can you see that?
00:10:17 <Guest24> yes i can
00:10:38 <Axman6> but you're trying to add together all the negative values, and you haven't use + anywhere
00:10:40 <glassy> can I replace ifThenElse with a typeclass instance instead of an actual function?
00:10:51 <ephemient> {-# LANGUAGE RebindableSyntax #-} import Prelude; main = if True then print 1 else print 0 -- error: Not in scope: `ifThenElse'
00:11:34 <Guest24> so i think that what i want to do is in the then part of the if statement is add the x value to something and the call the function again with the tail of the list as the parameter
00:11:48 <ephemient> hiding (ifThenElse) doesn't change that
00:11:52 <Axman6> you're thinking imperatively
00:11:56 <hpc> glassy: i think as long as it can be called as "if _ then _ else _" you're good to go
00:11:56 <Guest24> :((
00:12:01 <Axman6> you can just add things together
00:12:09 <hpc> so yeah
00:12:10 <Axman6> x is an Int, negsum xs is an Int
00:12:32 <Axman6> (+) takes two Ints and adds them
00:13:00 <Guest24> what would i add the x value to
00:13:05 <EvanR> when you evaluate 2 + 2, you get 4. You don't update something holding a number
00:13:17 <EvanR> that's how haskell works
00:13:18 <Guest24> can i use the built-in function filter
00:13:23 <glassy> thanks hpc, I will give it a shot. it feels very hacky haha :), hopefully little type level magic needed
00:13:27 <Guest24> or foldl
00:13:27 <Axman6> > let f y = y^2 in 7 + f 14
00:13:28 <lambdabot> 203
00:13:42 <Axman6> Guest24: you literally only have to change one character to make your code work
00:13:49 <hpc> glassy: yeah, the whole extension feels hacky to me
00:14:01 <geekosaur> so is pretty much all of RebindableSyntax tbh
00:14:01 <glassy> it seems like the kitchensink for overloaded stuff
00:14:02 <Axman6> you're returning a list when you're supposed to be adding
00:14:06 <hpc> i think if i wanted that kind of syntactic flexibility i would use lisp
00:14:37 <glassy> never used lisp
00:14:43 <glassy> it looks like too many brackets
00:14:47 <glassy> like python
00:14:59 <hpc> it is - i had one college course that used common lisp and my laptop's 9 key broke
00:15:08 × cyphase quits (~cyphase@user/cyphase) (Ping timeout: 256 seconds)
00:15:11 <glassy> that is really funny
00:15:44 <ephemient> just switch to AZERTY keyboard layout, as long as your 5 key still works :p
00:15:44 <Axman6> glassy: I'll say it again: x is an Int, negsum, when given a list of Ints returns an Int, so negsum xs is also an Int. (+) takes two Ints and returns an Int. you need an Int
00:15:56 <Guest24> https://paste.tomsmeding.com/n9v0edHS
00:16:25 <Axman6> Guest24: add numbers :: [Int] above numbers = ...
00:16:27 <ephemient> well now you're hitting type defaulting and monomorphism
00:16:40 <Guest24> guys i think i did it
00:16:48 <ephemient> if you wrote negsum numbers inside the .hs file it would be deduced correctly
00:16:49 <geekosaur> mm, but shouldn't that in a module infer it as :: [Int]?
00:16:54 <Axman6> you didn;t tell the compiler what type numbers was, so it defaulted to [Integer]
00:17:11 × Midjak quits (~Midjak@may53-1-78-226-116-92.fbx.proxad.net) (Quit: This computer has gone to sleep)
00:17:13 <Axman6> and Int and Integer are different types
00:17:15 <glassy> Guest24 why not get rid of the positive numbers then sum all of that?
00:17:17 <Guest24> https://paste.tomsmeding.com/ljoGkaCW
00:17:22 <johnjaye> i'm surprised you can even hit the 9 key on a laptop
00:17:22 <johnjaye> let alone any thing like ' or pagedown
00:17:22 <johnjaye> this one i have now is an old hp and the arrow keys are super slim and tiny so you can barely use them
00:17:35 <Axman6> > (3^253 :: Integer, 3^253 :: Int)
00:17:37 <lambdabot> (514846119915350862092369580702449270793403151142700511080017868259392861591...
00:17:48 <hpc> johnjaye: this was a while ago
00:17:55 <hpc> i had an elegant laptop from a more civilized age
00:18:09 <Axman6> glassy: we're covering the basics first
00:18:25 <johnjaye> i kinda want to bring my laptop inside but if i disconnect the power it will die in like 5 minutes (bad battery)
00:18:28 <glassy> ahh i see, good luck guys :)
00:18:38 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
00:18:46 Guest96 joins (~Guest96@144-124-99-115.pip.aber.ac.uk)
00:18:54 <Axman6> gotta crawl before you can walk, and walk before you can run
00:20:49 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:494b:f936:f65f:424f)
00:21:32 × shapr quits (~user@2601:7c0:c37c:46d0:2da1:8e76:2324:a881) (Remote host closed the connection)
00:21:42 × simpleauthority quits (~simpleaut@user/simpleauthority) (Quit: ZNC 1.8.2 - https://znc.in)
00:21:57 shapr joins (~user@2601:7c0:c37c:46d0:2da1:8e76:2324:a881)
00:22:44 <zzz> FOLLOW UP this is where it gets me:
00:22:45 <zzz> w :: (Int,Float)
00:22:45 <zzz> w = (fst x, snd x) -- this is ok
00:22:45 <zzz> h :: (Int,Float)
00:22:45 <zzz> h = let k = x in (fst k, snd k) -- this is DMRed
00:23:28 <zzz> reminder that x is:
00:23:29 <zzz> x :: Num a => (a,a)
00:23:29 <zzz> x = (0,1)
00:23:51 simpleauthority joins (~simpleaut@user/simpleauthority)
00:24:01 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 256 seconds)
00:24:33 <zzz> what's the intuition here? why are w and h different?
00:26:00 <ephemient> h = let k :: Num a => (a, a); k = x in (fst k, snd k) would behave like w, I expect
00:26:17 cyphase joins (~cyphase@user/cyphase)
00:27:39 <zzz> yes
00:27:45 deadmarshal joins (~deadmarsh@95.38.113.215)
00:29:02 <monochrom> DMR looks at "k =" and monomorphizes it.
00:29:12 <monochrom> (OK, plus the fact that Num is involved.)
00:29:14 <zzz> but let k :: (Num a, Num b) => (a, b); ... errrs
00:29:40 <zzz> *errors
00:29:52 <monochrom> Because (Num a, Num b) => (a, b) is more general than the type of x.
00:30:15 <zzz> that's what trips me
00:30:21 <zzz> k = x is ok
00:30:21 dut joins (~dut@user/dut)
00:30:45 <monochrom> I don't know. Suppose I define "f :: () -> (); f x = x".
00:31:02 <monochrom> Now suppose you use "f True".
00:31:56 <ephemient> if you give them different names, there's x@Int, x@Float, and w = (fst x, snd x) is (fst x@Int, snd x@Float). two different values. whereas there is no way to fit x into (Num a, Num b) => (a, b)
00:31:57 × deadmarshal quits (~deadmarsh@95.38.113.215) (Ping timeout: 240 seconds)
00:31:57 <monochrom> "x = what" doesn't matter, "x :: Num a => (a,a)" does.
00:33:26 <zzz> hmm
00:35:45 <monochrom> "let (a,b) =" and "case of (a,b)" are type-checked very differently, if that's what you're wondering.
00:35:57 <monochrom> and "\(a,b) ->" is on the case side, for that matter.
00:36:30 <zzz> no problem with those
00:36:53 <zzz> let (a,b) = x === let a = fst x; b = snd x
00:36:58 <zzz> and
00:37:18 <Axman6> Guest24: so do you understand the function you have now?
00:37:27 <Guest24> yes i do thank you
00:37:57 × xff0x quits (~xff0x@2001:1a81:5280:6800:a068:90b7:b174:1f03) (Ping timeout: 240 seconds)
00:38:06 <zzz> f = case x of (a,b) -> (a,b) === f = let ab = x in ab === h = x
00:38:37 <zzz> i mean
00:38:56 <zzz> === f (a,b) = (a,b) -- to be precise
00:39:01 xff0x joins (~xff0x@2001:1a81:5280:6800:582b:a2d3:42a2:2b48)
00:39:57 stevenxl joins (~stevenxl@c-73-72-2-81.hsd1.il.comcast.net)
00:40:36 <zzz> but why f = let k = x in (fst k, snd k) differs from f = (fst x, snd x) is not intuitive
00:43:20 <ephemient> because GHC won't infer k to be polymorphic by default
00:43:21 <EvanR> "let polymorphism"
00:43:34 <EvanR> let generalization
00:43:58 <EvanR> things I wish I knew when I learned haskell
00:44:02 <johnjaye> should i worry about a difference of 8.6 vs 8.7 with ghc?
00:44:17 × stevenxl quits (~stevenxl@c-73-72-2-81.hsd1.il.comcast.net) (Ping timeout: 240 seconds)
00:45:00 <monochrom> I just tried. Those two f's do not differ.
00:45:27 <EvanR> oh it's the original x
00:46:47 mvk joins (~mvk@2607:fea8:5cdd:f000::55f8)
00:47:05 <zzz> monochrom: the first f requires NoMonomorphismRestriction when x :: Num a => (a,a)
00:47:18 <zzz> the second one doesn't
00:47:28 × shapr quits (~user@2601:7c0:c37c:46d0:2da1:8e76:2324:a881) (Remote host closed the connection)
00:47:42 shapr joins (~user@2601:7c0:c37c:46d0:2da1:8e76:2324:a881)
00:47:48 <monochrom> Sigh.
00:48:01 × perrierjouet quits (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.4)
00:48:33 <zzz> i may be misunderstanding you. am i missing something?
00:49:50 × slowtyper quits (~slowtyper@user/slowtyper) (Ping timeout: 252 seconds)
00:50:02 <ephemient> https://ghc.gitlab.haskell.org/ghc/doc/users_guide/exts/let_generalisation.html MonoLocalBinds is default enabled, separately from MonomorphismRestriction
00:50:27 <monochrom> https://paste.tomsmeding.com/ziRW5SJd
00:50:30 slowtyper joins (~slowtyper@user/slowtyper)
00:50:31 <ephemient> actually hmm. I'm not sure what the default state is.
00:51:40 <monochrom> The default state depends on other extensions, I think GADTs is an example.
00:51:41 × shapr quits (~user@2601:7c0:c37c:46d0:2da1:8e76:2324:a881) (Remote host closed the connection)
00:51:54 shapr joins (~user@2601:7c0:c37c:46d0:2da1:8e76:2324:a881)
00:52:21 <geekosaur> yes
00:53:15 <geekosaur> "The extension MonoLocalBinds is implied by TypeFamilies and GADTs."
00:53:30 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
00:53:30 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
00:53:30 wroathe joins (~wroathe@user/wroathe)
00:53:34 <monochrom> And I wish the pair is called PolyLocalBinds and NoPolyLocalBinds :)
00:53:35 <zzz> right
00:53:53 perrierjouet joins (~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
00:54:57 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
00:58:11 stevenxl joins (~stevenxl@c-73-72-2-81.hsd1.il.comcast.net)
01:01:01 <[itchyjunk]> hmm i have royally confused myself. say i have fun :: (Maybe a -> Maybe b) -> Maybe a -> b
01:01:03 lavaman joins (~lavaman@98.38.249.169)
01:01:06 <[itchyjunk]> (i know its partial function)
01:01:21 <[itchyjunk]> now i have `fun f (Just a ) = `
01:01:35 <[itchyjunk]> i understand the lhs part of this, it's the rhs thats confusing me
01:01:49 <monochrom> I think "f (Just a)" will work great?
01:02:00 <monochrom> Err oops no.
01:02:00 <[itchyjunk]> what i want to do it, apply f to (Just a), what i get should be `Just b`
01:02:00 mechano joins (~mechano@cpc101088-sgyl37-2-0-cust22.18-2.cable.virginm.net)
01:02:06 <[itchyjunk]> and now i want to refrence this `b`
01:02:10 <jackdk> if the input to `f` is `Maybe a`, you do not need to deconstruct it.
01:02:11 <[itchyjunk]> since this is what fun should return
01:02:20 <monochrom> Use moar pattern matching. Or use fromJust.
01:02:28 <mechano> hi im currently using cabal and stack, but only v1 commands, what are the v2 commands for?
01:02:29 <[itchyjunk]> jackdk, ah fair
01:02:41 <jackdk> `fun f (Just a) = case (Just a) of { Just b -> b; Nothing -> error "I wrote a partial function and now I'm sad." }
01:02:44 × stevenxl quits (~stevenxl@c-73-72-2-81.hsd1.il.comcast.net) (Ping timeout: 250 seconds)
01:02:58 <geekosaur> mechano, cabal's v2 commands behave more like stack but without a resolver
01:03:34 <geekosaur> v1 commands install things "globally" which means projects can conflict with each other by requiring incompatible versions of things. v2 prevents these collisions
01:03:35 <jackdk> mechano: v1 was a lot of "seemed like a good idea" commands. prefixing the v2 commands allowed a migration path
01:03:37 <mechano> also, currently installing python from the microsoft store, wondering why msi installers were depreciated in favour of chocolatey via powershell
01:04:00 <mechano> jackdk: you say that in the past tense, but its the approach i use
01:04:19 <geekosaur> re a real pain to use in the cloud
01:04:26 <geekosaur> argh
01:04:35 <mechano> geekosaur: all my v1 installs break, but i cant even do global installs with v2
01:04:52 <jackdk> what cabal version are you on, and what os?
01:04:53 <geekosaur> the msi question is better asked elsewhere, but I suspect it has to do with the fact that msi installers are a real pain to use in the cloud
01:05:03 <mechano> if an install breaks with v1, then i use stack
01:05:23 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 256 seconds)
01:05:51 <mechano> geekosaur: for new users, an msi installer for ghci, cabal and stack would be useful - or via the microsoft store
01:05:52 larrykma joins (~bc8147f2@cerf.good1.com)
01:06:00 <Guest24> https://paste.tomsmeding.com/NBIP3Mxa
01:06:22 <jackdk> why do you want global installs? Pretty much every package ecosystem has moved away from them AFAIK (consider: project-specific node_modules dir, python venv and friends, ruby bundler, cargo...)
01:06:28 <Guest24> Axman6 could you please help me with this
01:06:34 × bitmapper quits (uid464869@id-464869.lymington.irccloud.com) (Quit: Connection closed for inactivity)
01:07:20 <mechano> jackdk: win 10, ghci 9.0.1, cabal 3.4.0.0
01:07:41 <geekosaur> Guest24, that looks more like javascript than haskell
01:07:53 × zaquest quits (~notzaques@5.130.79.72) (Remote host closed the connection)
01:07:53 <geekosaur> you cannot declare a mutabloe variable with "var"
01:08:01 <Guest24> i've never programmed in java
01:08:03 <mechano> jackdk: because then time consuming library builds dont need to be repeated between projects
01:08:12 <ephemient> Guest24: "var"??
01:08:15 <glassy> https://paste.tomsmeding.com/3cbznf58 I am trying to use a partially applied class constraint as a type and define instances using that. I get that 'toBool' is not a (visible) method of class 'ToBool'.
01:08:20 <glassy> what should I do to make it visible?
01:08:20 <Guest24> should i use let instead
01:08:36 <jackdk> they don't in v2-builds either, if the version of things is compatible
01:08:46 <ephemient> Guest24: it happens to do nothing here, but I think you still have fundamental misconceptions about Haskell
01:08:57 <Guest24> i definitely do
01:09:21 <geekosaur> glassy, you can't use type that way
01:09:32 <glassy> oh
01:09:36 <glassy> what do i do instead?
01:09:39 <mechano> glassy: just leave the second parameter, ie use both in the instance, but have the second as a polymorphic lowercase type
01:09:46 <geekosaur> your class is called ToBoolLike, but it's looking for a class (not type synonym for a class) ToBool
01:10:11 <glassy> so you can't have partially applied constraints?
01:10:16 <geekosaur> you have to make the instance for ToBoolLike Bool Bool
01:10:25 <mechano> dont think you an instantiate class synonyms, only use them in constraints
01:10:31 <geekosaur> ^
01:10:44 <glassy> ahh so it isn't possible thanks
01:10:56 <geekosaur> it's not even looking at yout `type`, it's looking directly for ToBool instead of ToBoolLike
01:11:10 <mechano> but whater you were trying to do should be possible using actual syntax
01:11:34 × albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
01:11:34 <EvanR> Guest24, `let x = some formula here in ...' is fundamentally like substituting `some formula here' in ... wherever x appears (unless shadowed e.g. by more lets)
01:11:48 × lechner quits (~lechner@debian/lechner) (Ping timeout: 256 seconds)
01:11:56 <mechano> still dont get what v2 is for btw. whats the advantage instead of stack when not doing global installs?
01:12:00 <EvanR> which is different from the usual way variables work
01:12:06 <EvanR> in e.g. javascript
01:12:59 <EvanR> it's arguably a lot easier to reason about the haskell way
01:13:05 <ephemient> Guest24: the immediate issue is that you have an expression in a where block. there is a difference between bindings and expressions. at the top level or inside let or where, you can have bindings ("x = ...", "f x = ...", etc.) but not expressions ("x", "if ...", etc.). expressions go on the right-hand side of an =
01:13:17 merijn joins (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
01:13:55 <mechano> is it advised to use stack or v2?
01:14:44 <geekosaur> that's a matter of taste
01:14:46 <monochrom> Both get advocates. I'm on the cabal side.
01:14:53 <geekosaur> some people prefer stackk, some cabal
01:14:59 <mechano> im guessing the only difference is that v2 uses the currently avaiable packages and the currently installed ghc
01:15:23 <glassy> mechano it works just using ToBoolLike Bool t, although I had a typo t and b were in the wrong order on line 9
01:15:27 <Guest24> https://paste.tomsmeding.com/eH12euPM
01:15:31 <mechano> why were global installs depreciated?
01:15:34 <glassy> it compiles although i'm scared
01:15:35 <monochrom> I disbelieve in stackage, and I disbelieve in auto-installing yet another version of GHC, so I chose cabal.
01:15:41 <glassy> it requires undecidable instances
01:15:45 <geekosaur> mechano, they conflict with each other
01:15:54 <Guest24> this is what i've changed from what I understand of what you said ephemient
01:16:03 <geekosaur> stack and cabal v2 both refuse to do global installs for that reason
01:16:15 <monochrom> You have experienced breaks under v1. It is why.
01:16:19 stevenxl joins (~stevenxl@c-73-72-2-81.hsd1.il.comcast.net)
01:16:24 <mechano> glassy: this is a very useful langage extension, its basically on all the time if your doiing anything
01:16:39 <EvanR> the problem with global installs is the same as earlier, they didn't go far enough and have some server with the latest working GHC available for anyone in the world to use. A global install
01:16:45 <geekosaur> they both install to internal repositories anbd expose parts of those repositories specifically when requested, as opposed to always (and causing conflicts)
01:16:55 <mechano> it should probably have a less scary name...
01:16:57 <glassy> yeah but usually it is other people's code that i turn on undecidable instances for
01:16:59 <glassy> not my own haha
01:17:02 <monochrom> or s/breaks/conflicts/
01:17:12 <ephemient> Guest24: ok. now you have two expressions: if then else; if then else. that's not something that makes sense in Haskell
01:17:33 <mechano> monochrom: i guess i like stack because im sick of my hard work getting bitrotten
01:17:35 <Guest24> ok should have nested if then else or quards or something
01:17:41 albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8)
01:18:00 <glassy> my problem with stack is i always end up with multiple stack versions for different projects
01:18:03 <glassy> but that is probably just me
01:18:09 <monochrom> cabal v2 has "cabal freeze" to mitigate that.
01:18:19 <ephemient> (well, in theory you could have (if then else) (if then else) the first r function applied to an argument, both of which come from conditionals, but the syntax doesn't allow for that without grouping)
01:18:35 <monochrom> It's like a huge generalization of stackage resolver.
01:18:37 × Neuromancer quits (~Neuromanc@user/neuromancer) (Ping timeout: 240 seconds)
01:18:37 <jackdk> using correct version bounds on deps also avoids this problem - see `cabal gen-bounds` as a starting point
01:18:47 <ephemient> Guest24: yes. and then once you figure that out, you'll find that "== Special String" doesn't work either.
01:18:49 <mechano> so if two imports use different version of the same library, it gets both and just sends the parts where they are needed?
01:18:57 machinedgod joins (~machinedg@24.105.81.50)
01:18:58 <ephemient> to deconstruct data constructors, use pattern matching
01:19:23 <monochrom> Yeah and cabal gen-bounds.
01:19:43 <ephemient> == is not a pattern match. f (Special _) is, as is case _ of Special _ ->; ...
01:20:02 <mechano> so stack is basically superceded entierly by v2? what about breaking ghci changes? is that the only case where saving a copy with the stack resolver would be an extra layer of safety?
01:20:23 <mechano> i cant see how v2 freeze could match that without the local ghci installs
01:20:35 × ec quits (~ec@gateway/tor-sasl/ec) (Quit: ec)
01:20:49 <monochrom> Right, I would still need to keep my old GHC around.
01:20:57 × stevenxl quits (~stevenxl@c-73-72-2-81.hsd1.il.comcast.net) (Ping timeout: 240 seconds)
01:21:04 <ephemient> mechano: I can only parse your sentence in a way that makes a modicum of sense with s/ghci/ghc
01:21:15 <mechano> yeah that was a type
01:21:18 <mechano> typo*
01:21:21 <ephemient> but yeah, if you're using cabal just keep multiple ghc's around with ghcup
01:21:28 ec joins (~ec@gateway/tor-sasl/ec)
01:21:35 × DNH quits (~DNH@2a02:8108:1100:16d8:7985:a982:d93:11f) (Quit: Textual IRC Client: www.textualapp.com)
01:21:36 <mechano> but stack does all that...
01:21:39 <glassy> when i use cabal build -j24 it doesn't peg all my cores but rather just one?
01:21:43 <glassy> why is that?
01:21:46 <monochrom> Frankly I don't mind updating my code for a newer GHC and some newer versions of libraries.
01:21:47 <mechano> and it records which is the right ghc for the old libs
01:21:52 <davean> mechano: stack does a very limited special case of that
01:22:01 <mechano> limited!?
01:22:05 <davean> Extremely
01:22:15 <mechano> seems to do it perfectly, whats the criticism for?
01:22:28 <davean> Try targetting something other than your current system
01:22:39 <davean> like JS or webassembly, or crosscompilation, or ...
01:22:40 <monochrom> So if you mind that very much and try to argue with me, we won't get anywhere. I do my thing.
01:22:42 <mechano> so v2 does cross compliation?
01:23:21 <mechano> monochrom: im arguing that stack is the only way to ensure builds do not become bitrotten
01:23:26 <davean> Its GHC that does the cross compilation
01:23:44 <mechano> im asking why i should use v2
01:23:56 <ephemient> because v1 is dead
01:23:57 <davean> mechano: If you're arguing that you're just here trolling and I'm done?
01:24:11 <monochrom> I know a prof who explained an even better way.
01:24:14 <jackdk> in fact, stack does a great job of encouraging bitrot, as its templates create libraries with no bounds on deps, which then get uploaded to hackage and break things for everyone else
01:24:20 <mechano> you wade in quite rudely davean
01:24:29 <monochrom> But it involves keeping even the old hardware.
01:24:47 <monochrom> And he didn't even have Haskell in mind. More likely C.
01:24:53 <EvanR> I'd appreciate a stackage for old hardware
01:25:02 <mechano> jackdk: ah, i wasnt aware of this issue to do with bounds
01:25:04 <jackdk> Particular recent example: base >= 4.x && <5 admits unreleased versions which are allowed to contain breaking changes, which is exactly what happened when GHC9 appeared on the scene
01:25:08 <jackdk> also aeson-2.0
01:25:20 <johnjaye> ephemient: what is the difference between v1 and v2 in cabal? i saw a makefile that was talking about v1 commands
01:25:22 <EvanR> operator, get me an old BeBox, for R5
01:25:33 <glassy> i thought v2 had atomic updates and stuff like that?
01:25:38 <glassy> i'm probably wrong
01:25:42 <Guest24> could i put an if statement within an if statement
01:25:43 <davean> glassy: that -j is the package parallization, not the GHC
01:25:54 <glassy> what do you mean by package parallization?
01:26:03 <monochrom> His way translated to Haskell, you wouldn't even refer to stackage online. You would download the tarballs, and stick to them. You don't even know that stackage won't change the tarballs.
01:26:12 <jackdk> so I consider the patterns encouraged by stack to be extremely rude, in that they use the bounds information to construct their snapshots, and then encourage the uploading of packages which make that break that information source.
01:26:25 <davean> glassy: compiling seperate packages in parallel, not inside a package
01:26:39 <davean> glassy: and most of cabal stuff is atomic - what do you mean by atomic updates?
01:26:43 <ephemient> my approximate flowchart is: stack is fine if you just want some libraries as an end-product and don't particularly care which versions. cabal is required if you want to stay up to date or ship something to be used by other users
01:27:01 <glassy> i just thought you could rollback stuff with cabal v2, i'm not well informed
01:27:12 <davean> glassy:
01:27:24 <davean> The concept of "rollback" isn't meaningful for v2
01:27:54 <jackdk> I can respect that it helps people making applications at the leaf of the dependency graph, but it also holds the ecosystem back. There's little enthusiasm for using things like backpack and multiple internal libraries because they don't work with stack, and stack has not enough dev resources
01:27:57 <mechano> jackdk: hmm, so it doesnt ensure against breaking changes from new ghc versions. thats a shame, since that was the reason i was using it. i guess if it doesnt even do that, then my reason for using it, and advocating for it, and the haskell toolchain - based on a rationality of the snapshots ... wait, how does what you say change anything, the
01:27:57 <mechano> snapshots should always use the correct ghc
01:28:04 <glassy> lol idk
01:28:28 <glassy> davean: how do i make builds inside a package parallel as well as compiling seperate packages in parallel?
01:28:42 <glassy> been wondering for about a year embarassingly
01:28:53 <glassy> maybe i got it working but my disk is the bottleneck
01:28:58 <Guest24> https://paste.tomsmeding.com/6yumtqfg
01:29:24 <Guest24> this is what I've changed
01:30:04 <dibblego> it's Friday somewhere, go to the pub
01:30:05 <jackdk> mechano: maybe the snapshots continue to work. That's not what I'm saying. I'm saying that the patterns encouraged by stack encourage people to submit misbehaving libraries to hackage, which makes the ecosystem worse for everyone else. I don't support bootstrapping off someone else's commons, and then making it worse
01:30:08 <davean> glassy: Also, is your setup a custom setup?
01:30:10 <mechano> ephemient: as far as i could tell it was the only way to ensure that a personal project that builds could certainly be built again at another time
01:30:31 <glassy> davean no, it is just cabal now after i moved from stack
01:30:37 <glassy> i don't have any dot files changing compilation
01:30:54 vysn joins (~vysn@user/vysn)
01:31:19 <jackdk> besides, who knows if the ghc you download will run against the system libs on your build machine in the future? Nix will get you closer, but this question will ultimately bottom out against the fact that GHC doesn't have a working bootstrap path any more
01:31:28 <monochrom> dibblego: But the pubs are closed in my city :(
01:31:33 <davean> glassy: see https://gitlab.haskell.org/ghc/ghc/-/merge_requests/5176
01:31:38 <dibblego> can't be, that's illegal
01:31:58 <davean> glassy: if you have parallism between package builds - the strongest parallelism - then you have a problem of getting the correct overall parallelism when there is parallelism inside a build
01:32:04 <ephemient> mechano: cabal can certainly pin versions, including ghc. the onus is on you to have a working GHC version, but I think that's reasonable: ghcup makes it easy
01:32:23 <glassy> i've tried using ghc-options -j 24 too
01:32:43 <glassy> it is hard to know how to split threads between building packages and those packages themselves
01:32:45 <ephemient> I still use stack for personal projects, but I'm sort of expecting to have to switch off of it as it's in community maintenance mode now
01:32:46 × incertia quits (~incertia@24.42.241.219) (Ping timeout: 256 seconds)
01:33:04 <mechano> ah, i understand your point now jackdk
01:33:06 <mechano> seems fair
01:33:22 <johnjaye> jackdk: i'm kinda new to haskell so i don't really get how cabal works
01:33:34 stevenxl joins (~stevenxl@c-73-72-2-81.hsd1.il.comcast.net)
01:33:34 <johnjaye> i just use it to install things with cabal install. i guess that's bad because of library versions?
01:34:01 <Guest24> https://paste.tomsmeding.com/ZKBIf4iv
01:34:04 <mechano> ephemient: pin? iv never written the ghc version in a cabal file, i guess i should do that instead of using stack?
01:34:16 <Guest24> i get an error with the special string
01:34:26 <Guest24> how do i fix it :((
01:34:40 <monochrom> See this is why my prof says to even keep old hardware. Keep old hardware. Keep old OS. Keep old system libs...
01:35:00 <ephemient> mechano: https://cabal.readthedocs.io/en/3.6/cabal-project.html#cfg-field-with-compiler
01:35:12 <johnjaye> monochrom: there is potential wisdom in that. the problem is you don't know which old hardware or OS will end up being useful. exponential and all
01:35:12 × Kaiepi quits (~Kaiepi@156.34.47.253) (Read error: Connection reset by peer)
01:35:17 <ephemient> I don't know if I'd say "should"; it will depend on your priorities.
01:35:21 <monochrom> He was teaching a software engineering course and was relating actual practices in very large companies.
01:36:09 <monochrom> A glimpse of his context is in "we're talking about a million lines of code".
01:36:11 <mechano> ok cool, so i just write the with-compiler line in the cabal file. ok, i guess i dont need to use stack
01:36:24 <monochrom> Although, a million lines of C is not doing very much.
01:36:34 <ephemient> * not the project.cabal file, but the cabal.project file
01:36:50 <jackdk> johnjaye: generally I'm working in some package, so I list the packages I need in `build-depends` and go from there
01:37:13 <mechano> ephemient: oh thanks, i didnt spot that
01:37:14 <johnjaye> monochrom: well if your self-driving car crashes due to a bug just restart and recompile
01:37:43 <jackdk> johnjaye: if you just want to test some stuff in a repl it's possible to say `cabal repl -b lens`, say
01:38:01 <mechano> johnjaye: the good thing is that now that tesla has such a large cluster with convolutional geometry, that my old "structured access memory" patterns are finally useful
01:38:10 <Guest24> ephemient the special string doesn't work could you please look at my code https://paste.tomsmeding.com/ZKBIf4iv
01:38:16 × alp quits (~alp@user/alp) (Ping timeout: 250 seconds)
01:38:20 × ec quits (~ec@gateway/tor-sasl/ec) (Quit: ec)
01:38:26 × stevenxl quits (~stevenxl@c-73-72-2-81.hsd1.il.comcast.net) (Ping timeout: 256 seconds)
01:38:33 ec joins (~ec@gateway/tor-sasl/ec)
01:38:36 <ephemient> like I mentioned earlier, "== Special String" is not the way to pattern match
01:38:43 <mechano> instead of having to emulate it with fpga's
01:39:13 <ephemient> you can pattern match when binding (the left-hand side of =, or "case ... of")
01:39:56 <mechano> does anyone remember that? the thing with the pointer comonads for nearest neighbour navigation...
01:39:56 slac83129 joins (~slack1256@186.11.27.69)
01:39:57 <ephemient> that being said, the error message is rightfully about String - you're trying to use it in a value position, but there is no "value" named "String"
01:40:26 <ephemient> there's basically a namespace for types and a namespace for values, and "String" is only in the former
01:40:28 <davean> glassy: yah well ... uh, you're going to have problems getting -j to GHC to work - never mind it might just not be possible with your project due to include order
01:40:32 <Guest24> https://paste.tomsmeding.com/7TOb0tPp this is what i've changed it to
01:40:38 <monochrom> I think I remember people implementing Game of Life with comonads...
01:40:49 <mechano> right, but its slow without SAM
01:40:50 <ephemient> Guest24: still not a binding
01:41:02 <Guest24> what is a binding
01:41:07 <ephemient> the left-hand side of =
01:41:15 <monochrom> Oh, I also heard of transputers...
01:41:25 <mechano> lol
01:41:29 <jackdk> monochrom: that's the main use of seen, as well as buildery configuration things using `instance Monoid m => Comonad ((->) m)`
01:41:32 <ephemient> (eh... more complicated than that but close enough for now)
01:42:01 <davean> mechano: theres a lot of optimization approaches to the comonad code, the nice part is the optimizations are externally applied
01:42:03 <mechano> idk why they call it "bind" - makes it seem like some kind of paradox infliction
01:42:19 <Guest24> what would i bind that to tho
01:42:24 × slack1256 quits (~slack1256@191.125.99.215) (Ping timeout: 256 seconds)
01:42:26 <jackdk> a name gets bound to an expression or value, I guess
01:42:29 zaquest joins (~notzaques@5.130.79.72)
01:42:48 <davean> mechano: because it attaches a name to a definition
01:42:53 <mechano> i guess its because >>= puts the output into the rhs for lambda binding or something
01:43:06 <ephemient> that's "bind" but a different one
01:43:17 × myShoggoth quits (~myShoggot@97-120-67-120.ptld.qwest.net) (Ping timeout: 240 seconds)
01:43:52 <mechano> yeah, things end up confused because of these semantics
01:43:58 <monochrom> Perhaps it's a LoTR Mordor one-ring reference :)
01:44:33 <davean> I mean its sorta the same bind/apply thing, sorta
01:44:40 <monochrom> "one doesn't simply extract from Mordor" or something...
01:45:03 <monochrom> CoMordor, though, is a different story...
01:45:21 <davean> monochrom: CoMordor allows the eagel operator
01:45:27 <monochrom> :)
01:45:33 <mechano> i thought that was a metaphor for promises
01:46:35 <mechano> bound to be..
01:46:37 zmt01 joins (~zmt00@user/zmt00)
01:47:30 × merijn quits (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
01:47:54 × mechano quits (~mechano@cpc101088-sgyl37-2-0-cust22.18-2.cable.virginm.net) (Quit: Connection closed)
01:48:11 <monochrom> Haha
01:48:52 <EvanR> Unforunately, no one can be told what a Monad is :morpheus:
01:49:17 × zmt00 quits (~zmt00@user/zmt00) (Ping timeout: 240 seconds)
01:49:39 <monochrom> Is Neo ()? Or is Neo IO()?
01:50:01 ub joins (~Thunderbi@p548c8cd6.dip0.t-ipconnect.de)
01:50:21 × larrykma quits (~bc8147f2@cerf.good1.com) (Quit: CGI:IRC (Ping timeout))
01:51:16 × ubert quits (~Thunderbi@p200300ecdf0994402d77270a91cab57e.dip0.t-ipconnect.de) (Ping timeout: 250 seconds)
01:51:17 ub is now known as ubert
01:52:18 <EvanR> well I guess they escape from The Matrix after all so that parallel is dead
01:52:24 <ephemient> neo = the [1, 1..]
01:52:36 <davean> I think Neo is (# State# RealWorld, Neo #)
01:53:00 <davean> He got unboxed
01:55:15 × machinedgod quits (~machinedg@24.105.81.50) (Ping timeout: 256 seconds)
01:55:15 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:494b:f936:f65f:424f) (Remote host closed the connection)
01:55:59 <zzz> this is fun: https://paste.jrvieira.com/1642730131768
01:58:01 <Guest24> hi so this is what i decided to bind could it be correct ??
01:58:03 <Guest24> ghci> :l question4
01:58:04 <Guest24> [1 of 1] Compiling Shop ( question4.hs, interpreted )
01:58:04 <Guest24> question4.hs:16:1: warning: [-Wtabs]
01:58:05 <Guest24>     Tab character found here, and in 10 further locations.
01:58:05 <Guest24>     Please use spaces instead.
01:58:06 <Guest24>    |
01:58:06 <Guest24> 16 | (if f (Special String) == True
01:58:07 <Guest24>    | ^^^^^^^^
01:58:07 <Guest24> question4.hs:25:1: error: parse error on input `totalBanana'
01:58:08 <Guest24>    |
01:58:08 <Guest24> 25 | totalBanana :: [IceCream] -> Float
01:58:09 <Guest24>    | ^^^^^^^^^^^
01:58:09 <Guest24> Failed, no modules loaded.
01:58:10 <Guest24> ghci>
01:58:12 <Guest24> https://paste.tomsmeding.com/rvkscpSB
01:58:34 <Guest24> i'm sorry i thought i had copied the URL but i still had the error message
01:58:35 <zzz> Guest24: try not to do that
01:58:47 <zzz> Guest24: which irc client are you using?
01:58:55 <Guest24> irc client?
01:59:55 <jackdk> looks like the libera web interface whatever that is
02:00:16 <zzz> yes. which program are you using to access irc? you can configure most to prevent long pastes
02:00:25 <zzz> jackdk: oh well :/
02:01:10 <Guest24> im using windows powershell and editting with motepad ++ but that's all I know
02:01:37 stevenxl joins (~stevenxl@c-73-72-2-81.hsd1.il.comcast.net)
02:02:38 califax- joins (~califax@user/califx)
02:03:06 <Guest24> could someone please help me with my code ?
02:03:08 <Axman6> where you're taling right now is IRC Guest24, are you doing that in a browser?
02:03:24 <Guest24> https://paste.tomsmeding.com/rvkscpSB
02:03:59 <zzz> well, i guess my paste is going to go unnoticed...
02:04:03 <Axman6> Guest24: you can't indent those definitions like that, all top level definitions need to start in the first column
02:04:27 <Guest24> the definitions as in the types
02:04:41 <Axman6> module isn;t an object of some sort, it';s the name for a collection of definitions
02:05:06 <Axman6> you also need to configure your text editor to not use tabs
02:05:25 <monochrom> Axman6, that was partly my fault, I wrongly suggested the indenting. Although, I also thought I already said I was wrong.
02:05:31 alp joins (~alp@user/alp)
02:05:32 <Axman6> that will fix the first warning, to fix the error, you need to remove the spaced before the words type and data
02:05:39 × califax quits (~califax@user/califx) (Ping timeout: 276 seconds)
02:05:40 califax- is now known as califax
02:06:17 <Axman6> spaces*
02:06:33 <Axman6> thank god I don't work in an industry where typing is my main activity! >_<
02:07:03 <Guest24> https://paste.tomsmeding.com/hs4fwq8S
02:08:10 <Axman6> there is a lot wrong with the line "isBanana if (f,s,h) == Banana"
02:08:19 <Axman6> firstly, there's no = so it is not a definition'
02:09:25 <Axman6> seccondly, (f,s,h) has type (Flavour, Scoops, HasSprinkles) but Banana has type Flavour, so you can't test if they are equal, only things of the same type can be equsl
02:09:53 <Axman6> start with: isBanana (f,s,h) = <definition of the function>
02:10:43 <Axman6> price's definition also doesn't make sense, you've said its type is IceCream -> Float, but in price [] = 0 you're saying that the first argument is a list
02:10:56 <Axman6> you should delete that line
02:11:49 <zzz> Guest24: how are you introducing yourself to Haskell? Are you following any specific material?
02:12:02 <Axman6> also, you should stop writing x == True, it is always redundant, eithe x is True and the result is True, or x is False and the result is False.
02:12:21 <Guest24> https://paste.tomsmeding.com/gmqbZeSd
02:12:34 <Guest24> this is what i've done
02:13:17 <Guest24> should i use case of instead if statements in the price function
02:13:43 <Axman6> yes, that would be much clearer
02:13:59 <Guest24> ok i'll try that
02:14:14 <Guest24> do the other things look ok to you when it comes to my program
02:14:28 <zzz> this desn't seem like the best approach to learning a language
02:14:30 <Guest24> i think i may still have an issue with my totalscoops function
02:15:49 <Axman6> Guest24: explain what you think "s + (f,s,h):xs" is doing?
02:16:02 <ephemient> 1. the precedence of + and : does not lead to expected results in totalScoops, and 2. your recursion does not make any progress
02:16:55 <ephemient> but 0. you're still using ==; Flavor is not an Eq so that won't work. also that is not what you want to do for Special anyway.
02:17:09 <zwro[m]> zzz: why does that happen?
02:17:14 <zzz> why does what happen?
02:17:54 <zwro[m]> <zzz> "this is fun: https://paste...." <- https://paste.jrvieira.com/1642730131768
02:19:02 × pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.4)
02:19:24 jacks2 joins (~bc8147f2@217.29.117.252)
02:21:51 × tolt quits (~weechat-h@li219-154.members.linode.com) (Quit: WeeChat 2.9)
02:22:21 <zzz> i'm not sure
02:23:57 × neurocyte0917090 quits (~neurocyte@user/neurocyte) (Ping timeout: 240 seconds)
02:24:21 <EvanR> if F is some type family and I have an a -> b, can I have a F a -> F b
02:24:32 <EvanR> guess not
02:24:40 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:494b:f936:f65f:424f)
02:25:04 <Guest24> https://paste.tomsmeding.com/ShhEzeE5
02:25:25 <Guest24> i still am not sure how creat recursive functions
02:25:47 tolt joins (~weechat-h@li219-154.members.linode.com)
02:26:13 azimut joins (~azimut@gateway/tor-sasl/azimut)
02:26:51 <jackdk> EvanR: you would need an instance of that type family `F (a -> b) = F a -> F b`
02:27:07 <ephemient> Guest24: you were close before, you just had some extra bits breaking it
02:27:16 <EvanR> I have that
02:27:20 <Guest24> ok thank you
02:27:26 <Guest24> i'll try to figure it out again
02:27:39 <EvanR> so how do I get the actual values xD
02:28:45 × xff0x quits (~xff0x@2001:1a81:5280:6800:582b:a2d3:42a2:2b48) (Ping timeout: 268 seconds)
02:28:54 <EvanR> I'm not sure it's possible since F a need have nothing to do with a
02:30:17 xff0x joins (~xff0x@2001:1a81:52b8:8500:a7fd:d6d9:518c:9835)
02:31:43 <zwro[m]> zzz: ok that's weird
02:32:00 <Guest24> https://paste.tomsmeding.com/NZ0tO7e6
02:32:10 <Guest24> so this what i've gotten to so far
02:32:36 <Guest24> should i use s instead of x
02:33:33 <Guest24> https://paste.tomsmeding.com/d2T0W0yD
02:34:00 <Guest24> so i changed it and now im getting errors for the last function
02:34:12 lavaman joins (~lavaman@98.38.249.169)
02:34:23 <Guest24> ephemient
02:35:16 <ephemient> filter returns a list with the same type as its input, just with fewer elements
02:35:50 <ephemient> a list cannot be a Float, which is why there is a type error there
02:35:56 <Guest24> ok
02:35:57 × cyphase quits (~cyphase@user/cyphase) (Ping timeout: 240 seconds)
02:36:09 <zwro[m]> zzz: in https://ghc.gitlab.haskell.org/ghc/doc/users_guide/exts/let_generalisation.html you can read:
02:36:23 <zwro[m]> So here are the exact rules used by MonoLocalBinds. With MonoLocalBinds, a binding group will be generalised if and only if
02:36:23 <zwro[m]> Each of its free variables (excluding the variables bound by the group itself) is closed (see next bullet), or
02:36:23 <zwro[m]> Any of its binders has a partial type signature (see Partial Type Signatures). Adding a partial type signature f :: _, (or, more generally, f :: _ => _) provides a per-binding way to ask GHC to perform let-generalisation, even though MonoLocalBinds is on.
02:37:48 <zzz> zwro[m]: that doesn't explain my example. I don't think MonoLocalBinds is relevant even
02:37:49 × jenna8912 quits (~jenna@c-107-5-104-51.hsd1.mi.comcast.net) (Quit: Reconnecting)
02:38:01 jenna8912 joins (~jenna@c-107-5-104-51.hsd1.mi.comcast.net)
02:40:34 <zzz> even more, g and h both have partial type signatures on y (in fact, it's the noly diff) and the former errors while the latter works, MR or NoMR
02:42:20 <Guest24> https://paste.tomsmeding.com/4wOl8H40
02:42:27 <Guest24> this what i've done
02:42:39 <Guest24> i've made the function recursive like the top one
02:43:12 <zwro[m]> zzz: it's weird. i have no idea what's going on there. maybe _ -> allows for ghc to generalize it to Any -> ? but I'm out of my depth
02:43:59 <zzz> zwro[m]: that seems unlikely
02:45:09 <ephemient> pretty sure _ => _ forces it to be polymorphic, bypassig MR
02:45:25 <ephemient> while _ doesn't
02:46:46 <zzz> ephemient: can you suggest some literature where i can explore this further?
02:47:27 <zzz> why does _ fail then?
02:48:07 <ephemient> because there's no _ that can stand in, that one is definitely monomorphic
02:48:16 <ephemient> at least, that's how it looks; I've never played with PartialTypeSignatures before
02:48:59 <zzz> ah, (a,b) would clash with Num a => (a,a)
02:49:26 razetime joins (~quassel@49.207.203.87)
02:50:01 <zzz> wait
02:50:06 <zzz> hmm
02:50:12 × jacks2 quits (~bc8147f2@217.29.117.252) (Quit: http://www.okay.uz/)
02:50:38 <zzz> y :: (a,b) gives me:
02:50:38 <zzz> Expected type: (a, b)
02:50:38 <zzz> Actual type: (a, a)
02:50:45 <zzz> :/
02:50:53 <zzz> but i get it
02:51:04 × ProfSimm quits (~ProfSimm@87.227.196.109) (Remote host closed the connection)
02:51:04 × ncopa3 quits (~ncopa@gbr2-dev1.alpinelinux.org) (Remote host closed the connection)
02:51:37 <ephemient> further evidence: () => _ fails, so the _ => definitely makes the difference
02:51:41 × xkuru quits (~xkuru@user/xkuru) (Read error: Connection reset by peer)
02:52:57 <monochrom> zzz: Here you run into "y :: (a,b)" meaning "y :: forall t1 t2. (t1, t2)" and has nothing to do with any outer "a" or "b". And then you will read up on ScopedTypeVariables.
02:54:44 <zzz> monochrom: you are right, i forgot about the implicit forall
02:55:31 <zzz> might be room for error message imporvement
02:55:33 <monochrom> Isn't Haskell exciting! >:)
02:55:49 <zzz> i's pretty confusing, but rewarding noneheless
02:56:57 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
02:57:44 azimut joins (~azimut@gateway/tor-sasl/azimut)
02:58:37 <zzz> learning haskell is like reading a contract with recursive fineprint
02:58:44 <monochrom> Consider conflating "exciting" with "surprising" haha
02:59:57 × Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 240 seconds)
03:00:54 <zzz> at some point i started expecting the "surprise"
03:01:27 <ski> @quote is.the.solution
03:01:27 <lambdabot> quicksilver says: head-explosion is the solution, not the problem.
03:01:49 <zzz> ski: :)
03:02:23 <ephemient> the more your head explodes, the more space there is for Haskell (?)
03:02:50 <ski> learning often involves a certain amount of unlearning
03:03:17 Erutuon joins (~Erutuon@user/erutuon)
03:03:36 <zzz> ski: that's not the problem with haskell
03:04:01 <zzz> the problem with haskell is that learning something always requires learning something
03:04:17 <zzz> it's lazily evaluated knowledge
03:04:52 <zzz> to learn haskell you first need to learn haskell; otherwise = mempty
03:04:56 <ski> yea, unfortunately many people come to expect to not have to learn that much new
03:05:44 <ski> oh, yea, i see what you mean. learning is often circumambulatory, spiraling. you learn about A, then B, then C, then A again, but now from a "higher viewpoint", since you've at least to some degree covered those other terrains
03:06:04 <johnjaye> zzz: i think what really gets people discouraged is yak shaving. to learn A you need B. But B depends on C. you need D to finish C. etc
03:06:26 <zzz> tell me *anything* about haskell, and your sentence will invariable end with an asterisk
03:06:51 <EvanR> haskell is purely functional
03:06:52 cyphase joins (~cyphase@user/cyphase)
03:06:58 <ski> finding out the proper order in which to introduce concepts, when attempting to teach a topic, can be quite hard
03:07:23 <ski> (also considering that people come from different backgrounds, have different learning styles and preferences, &c.)
03:07:25 <EvanR> asterisk in the same sense that "the sky is blue" has asterisk
03:08:11 <EvanR> well hopefully it's purely functional more often than the sky is blue
03:08:36 zzz unsafely performs IO
03:08:57 <EvanR> gross
03:09:10 <ephemient> Haskell† is‡ purely§ functional¶ (no asterisks)
03:09:32 <EvanR> haha depending on what the definition of is is
03:09:42 <monochrom> Haskell is Haskell.
03:10:04 ski . o O ( "Résumé" by Roman Cheplyaka,Maria Kovalyova in 2010-12-12 at <https://ro-che.info/ccc/11> )
03:10:07 <monochrom> I guess your asterisk footnote is "yeah it's a tautology, nothing to see here"
03:11:50 <monochrom> "to learn A you need B. But B depends on C. you need D to finish C. etc" holds for learning by dive-in projects only.
03:12:09 ski . o O ( <https://xkcd.com/703/>,<http://www.vex.net/~trebla/humour/tautologies.html> )
03:12:18 <ephemient> haskell == haskell -- requires evaluating `haskell'
03:12:35 <monochrom> "I want to learn Haskell, I heard that dive-in projects are best for learning programming, I conclude that I want to learn Haskell by a webapp project."
03:12:51 <monochrom> This is why I recommend against dive-in projects.
03:13:36 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
03:13:47 <monochrom> Oh it's how you learned Python? Well Python is different.
03:14:06 <monochrom> Oh you cannot learn programming some other way? Well natural selection...
03:14:56 <ephemient> I learned Python by reading all the docs first. I tried to do that for Haskell but I don't think I ever finished…
03:14:59 <monochrom> Oh you conclude that Haskell is harder to learn? I agree.
03:15:10 × glassy quits (~glassy@user/glassy) (Quit: Leaving)
03:15:18 <monochrom> Whereas Python is harder to write correct code in.
03:15:40 <EvanR> it's how I wrote some terrible python programs but not how I learned python (never learned it)
03:16:51 <ski> "My reasoning was simple, by writing a Haskell compiler in Haskell I will double my language learning speed since I will not only have to learn how to program in it by forcing myself to complete a non-trivial project, but also its subtle semantics and dark corners since I actually needed to implement it correctly."
03:17:02 <ski> "Writing a compiler is also doubly efficient to begin with, since if you self-compile improvements not only give you a better optimizer, but also speed up your self-compiled compiler. All in all I figure I was making very good use of my time. For some reason, when I explain my reasoning to other people they look at me like I am crazy, but I can detect no flaw in my logic."
03:17:07 <ski> -- John Meacham,"The story of jhc",<http://www.repetae.net/computer/jhc/jhc.shtml#the-story-of-jhc>
03:17:45 <monochrom> Success stories are written by the victors. >:)
03:18:19 <ski> :>
03:18:28 <EvanR> each time you optimize the compiler, your optimization rate increases, requiring a theory of analysis to explain how your speed didn't diverge
03:18:48 <zzz> ephemient: i don't think we've finished writing them
03:19:59 <ephemient> the rest of them are probably just behind that thunk over there
03:20:15 <zzz> pkill -9 ghc
03:22:10 <hughjfchen> Anyone knows the path library? I use parseSomeFile to parse a filepath into a path, then use filename try to get the filename from the path. However, I got an error message saying that cannot match 'SomeBase File' with 'File'.
03:22:17 × kaph quits (~kaph@net-2-47-208-144.cust.vodafonedsl.it) (Ping timeout: 240 seconds)
03:22:55 <zzz> jhc looks interesting
03:23:01 × alp quits (~alp@user/alp) (Ping timeout: 268 seconds)
03:23:21 <hughjfchen> I already pattern match the return of parseSomeFile
03:23:27 <zzz> where can i learn more about system E?
03:24:26 × stevenxl quits (~stevenxl@c-73-72-2-81.hsd1.il.comcast.net) (Ping timeout: 250 seconds)
03:26:01 <hughjfchen> code is here: https://i.imgur.com/iDjEbCK.png
03:27:31 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
03:27:31 finn_elija joins (~finn_elij@user/finn-elija/x-0085643)
03:27:31 finn_elija is now known as FinnElija
03:32:06 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
03:32:40 × td_ quits (~td@muedsl-82-207-238-049.citykom.de) (Ping timeout: 250 seconds)
03:33:36 <ephemient> prjSomeBase filename <$> parseSomeFile f
03:34:40 td_ joins (~td@94.134.91.211)
03:35:05 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection)
03:35:28 ChaiTRex joins (~ChaiTRex@user/chaitrex)
03:37:48 <hughjfchen> ephemient: thanks, ephemient, I'll have a try
03:40:28 nineonine joins (~nineonine@2604:3d08:7780:cd00:e983:291a:d390:4809)
03:40:47 lavaman joins (~lavaman@98.38.249.169)
03:42:09 <hughjfchen> ephemient: thanks, it works.
03:42:55 × terrorjack quits (~terrorjac@2a01:4f8:1c1e:509a::1) (Quit: The Lounge - https://thelounge.chat)
03:43:36 merijn joins (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
03:44:08 terrorjack joins (~terrorjac@2a01:4f8:1c1e:509a::1)
03:49:48 × vicfred quits (~vicfred@user/vicfred) (Quit: Leaving)
03:50:43 stevenxl joins (~stevenxl@c-73-72-2-81.hsd1.il.comcast.net)
03:50:57 × vglfr quits (~vglfr@88.155.104.216) (Ping timeout: 240 seconds)
03:52:11 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
03:53:12 [_] joins (~itchyjunk@user/itchyjunk/x-7353470)
03:55:24 × wombat875 quits (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net) (Quit: WeeChat 2.2-dev)
03:55:37 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 240 seconds)
03:59:11 [_] is now known as [itchyjunk]
04:00:01 × haasn quits (~nand@haasn.dev) (Quit: ZNC 1.7.5+deb4 - https://znc.in)
04:00:05 lechner joins (~lechner@debian/lechner)
04:01:21 haasn joins (~nand@haasn.dev)
04:02:44 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
04:04:57 × waleee quits (~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4) (Ping timeout: 268 seconds)
04:06:47 vglfr joins (~vglfr@88.155.98.86)
04:13:37 × Guest24 quits (~Guest24@144-124-136-14.pip.aber.ac.uk) (Quit: Client closed)
04:15:32 <zzz> first error day! i had never seen this one before:
04:15:36 <zzz> Wildcard ‘_’ not allowed in a constraint
04:15:36 <zzz> except as the last top-level constraint of a type signature
04:15:36 <zzz> e.g f :: (Eq a, _) => blah
04:15:36 <zzz> in the type signature for ‘y’
04:15:36 <zzz> |
04:15:39 <zzz> 15 | y :: (_,_) => (a,_)
04:15:41 <zzz> | ^
04:16:08 CHUD joins (~CHUD@cpc142034-slou6-2-0-cust488.17-4.cable.virginm.net)
04:16:37 × zmt01 quits (~zmt00@user/zmt00) (Ping timeout: 240 seconds)
04:17:17 × geranim0 quits (~geranim0@modemcable242.171-178-173.mc.videotron.ca) (Ping timeout: 240 seconds)
04:17:40 × merijn quits (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
04:18:05 zmt00 joins (~zmt00@user/zmt00)
04:21:25 faustind joins (~faustin@M014008067225.v4.enabler.ne.jp)
04:25:51 × lbseale quits (~ep1ctetus@user/ep1ctetus) (Read error: Connection reset by peer)
04:29:00 × ezzieyguywuf quits (~Unknown@user/ezzieyguywuf) (Ping timeout: 250 seconds)
04:29:02 × shriekingnoise quits (~shrieking@201.231.16.156) (Quit: Quit)
04:29:27 deadmarshal joins (~deadmarsh@95.38.113.215)
04:29:52 × stevenxl quits (~stevenxl@c-73-72-2-81.hsd1.il.comcast.net) (Ping timeout: 250 seconds)
04:30:45 ezzieyguywuf joins (~Unknown@user/ezzieyguywuf)
04:31:00 shriekingnoise joins (~shrieking@201.231.16.156)
04:31:27 incertia joins (~incertia@207.98.176.40)
04:31:28 <Axman6> just leave it out and the compiler will tell you what constraint isn't matched
04:40:48 <zzz> i know i was just playing around
04:42:34 mbuf joins (~Shakthi@110.225.224.187)
04:44:58 × zmt00 quits (~zmt00@user/zmt00) (Read error: Connection reset by peer)
04:46:21 zmt00 joins (~zmt00@user/zmt00)
04:51:47 <Axman6> Guest96: you should do this if you're are writing Haskell in Notepad++ https://community.notepad-plus-plus.org/topic/18041/tab-key-enters-spaces-instead-of-tab
04:52:36 <zzz> anyone using hls in vim?
04:52:38 <Axman6> uh, meant Guest24, who's now gone
04:52:59 <Guest96> lmao, I was so confused
04:54:23 <ephemient> zzz: there's also no reason for (_, _) => as (_) => can stand in for multiple constraints
04:54:33 <CHUD> I have a module where we are learning haskell
04:54:39 <CHUD> can I hang out here?
04:58:05 <sm> sure
05:00:44 <Axman6> CHUD: you can even ask questions, but if they're homework, remember to tell us - we won't give you answers to the questions but will guide you so you learn the answers yourself
05:03:32 <CHUD> Yeah, we just started this week so we haven't been set anything, I'm mainly looking for learning recommendations atm
05:04:21 <ski> you've been suggested any textbook ?
05:04:41 <CHUD> learnyouahaskell.com/
05:04:46 ski nods
05:05:27 <jackdk> welcome aboard CHUD
05:05:48 <ski> both beginner and more advanced questions are allowed in here. and both more practical and more theoretical. something the channel is more silent, sometimes more busy. sometimes multiple conversations are going on at the same time
05:07:32 <ski> you're welcome to lurk around, and see what people talk about. perhaps you could learn some stuff from seeing some questions/problems that other people have (iow, if you feel like it, you don't have to join only when you want a question answered, and then leave directly after you've got an answer. it can pay off to stick around a bit more)
05:09:03 × cyphase quits (~cyphase@user/cyphase) (Ping timeout: 256 seconds)
05:09:06 <ski> LYAH has pretty pics. one problem though is that it doesn't have exercises
05:09:51 <ski> (also, some people think that LYAH can be a bit confusing, that some other learning resources can be better)
05:09:58 × zebrag quits (~chris@user/zebrag) (Quit: Konversation terminated!)
05:09:59 <ski> anyway, if you want to, you could also check out
05:10:01 <ski> @where CIS194
05:10:01 <lambdabot> https://www.seas.upenn.edu/~cis194/spring13/lectures.html
05:10:02 <CHUD> Yeah I am looking for something like mooc.fi java but for haskell
05:10:09 <ski> which has exercises
05:10:41 <oak-> Doesn't mooc.fi have Haskell? :P
05:10:53 chomwitt joins (~chomwitt@athedsl-15695.home.otenet.gr)
05:10:58 nunggu joins (~q@user/nunggu)
05:11:14 <oak-> https://haskell.mooc.fi/
05:11:14 <CHUD> I don't think so, I only found python and some cyber sec. stuff
05:11:20 <CHUD> nvm
05:11:30 <oak-> (I'm in Haskell Mooc's Telegram group)
05:12:10 ksqsf joins (~user@210.45.76.145)
05:12:33 × ksqsf quits (~user@210.45.76.145) (Client Quit)
05:12:51 <CHUD> cool, thanks for that
05:12:57 ksqsf joins (~user@2001:da8:d800:336:ecbe:7994:fa3f:f03c)
05:13:01 <CHUD> have you completed the course?
05:13:31 <oak-> No, the part one was a little too beginner course for me, I could check part two though
05:14:00 <nunggu> what course? i want to learn haskell but i'm too lazy to read docs...
05:14:20 <nunggu> oh, this one: https://haskell.mooc.fi/, right?
05:14:25 <oak-> Yes
05:16:08 <oak-> I have learned Haskell "the hard way" over the years, but I have read haskellbook.com and I have Real World Haskell as a physical copy. I'm currently reading Thinking with Types to learn more about type-level programming
05:16:50 <CHUD> I don't want to end up in tutorial hell that's my main objective
05:17:01 <nunggu> i copied (from the web), pasted, edited xmonad.hs til it compiled. all without knowing how it supposed to work
05:17:43 × notzmv quits (~zmv@user/notzmv) (Ping timeout: 268 seconds)
05:20:05 <oak-> What I still don't completely grasp is how to practically use Monad Transformer Stacks to structure a program. I've been using ReaderT Design Pattern combined with RIO to create software to run in production, also effect systems using free monads (such as polysemy) look interesting
05:20:37 <jackdk> oak-: https://github.com/qfpl/applied-fp-course/blob/master/bonus/mtl.md may help
05:21:24 <oak-> Thanks, I'll have to bookmark this for later
05:21:42 <zzz> i don't like monad transformers
05:22:41 <zzz> and feel the urge to announce it whenever someone mentions it
05:22:46 <zzz> carry on
05:22:50 <oak-> It could be still useful to understand them, to be able to read code written by others, which uses Monad Transformers
05:22:54 <Axman6> do you have much experience using them?
05:23:42 <zzz> no i don't
05:23:54 <CHUD> I'm curious, as I ended up hear my accident after reading the IRC wiki page, how long you guys been on here for? do you prefer it over other channels or community platforms and why?
05:23:54 <zzz> not at all
05:23:59 <CHUD> here*
05:24:31 <Axman6> being able to use MTL and have code which says things like foo (HasDatabase m, HasConfig m, HasLogging m) => m () is pretty useful, it makes it clear what effects something can use, and what it can't
05:25:23 <Axman6> I've been here for like 13 years, IRC has always been the best medium for ad hoc help IMO. StackOverflow has no easy ability to have a conversation, and modern chat platforms are pretty awful with thousands of users
05:25:36 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
05:25:40 <jackdk> I like that it's an open protocol, and I can connect with whatever client that pleases me. Modern chat platforms are too often proprietary silos.
05:25:51 × nunggu quits (~q@user/nunggu) (Ping timeout: 276 seconds)
05:25:55 azimut joins (~azimut@gateway/tor-sasl/azimut)
05:25:59 <oak-> And it is useful for mocks in testing as well (to have those Has-typeclasses)
05:26:26 <Axman6> yeah, your code is decoupled from the implementation of those effects
05:27:01 <Axman6> zzz: that's kinda like saying "I don't like rug making, no I have never even tried to make a rug". why would you hate something you don't understand?
05:28:50 nunggu joins (~q@user/nunggu)
05:30:00 <oak-> I'd say you actually start to learn monads when you get your hands dirty with them, and try to do stuff with monads
05:30:58 × nshepperd2 quits (~nshepperd@li364-218.members.linode.com) (Quit: Ping timeout (120 seconds))
05:31:09 nshepperd2 joins (~nshepperd@li364-218.members.linode.com)
05:31:44 <ski> CHUD : some twenty years
05:31:45 <Axman6> It turns out that a lot of what you really need for real applications is ReaderT, which contains any config you need, connection objects, logging functions etc. but it can be nice to be able to talk about those separately
05:32:19 <zzz> Axman6: your question was "do you have much experience using them?"
05:32:47 <zzz> not "do you understand them?" or "have you ever used them?"
05:32:54 <zzz> but i get your point
05:33:30 <Axman6> I'm just curious why you even have the opinion that you don't like them
05:34:11 <zzz> oh, that's personal taste. i don't advise against it
05:34:31 <Axman6> what alternative do you perfer?
05:34:57 <zzz> depends on the problem i'm trying to solve
05:36:09 <zzz> i can't think of a case where you *need* monad transformers
05:36:10 <CHUD> when using something like discord, people add too many channels and the conversation get's fragmented, it also stop people from posting because they think it's not active
05:37:16 <ski> (and yea, i like the spontaneity, but also the occasional conversation over larger spans of time. and the non-proprietaryness, openness to different clients, lack of built-in / blessed logging, lack of (in-line) images and other such nonsense, and (mostly) lack of emoji. (i believe that many of these contribute to particularities of IRC culture in a way that might not be completely evident). obviously we
05:37:17 <Axman6> people get confused by IRC by joining and not seeing anyone talk for five minutes - if you have a question, you just ask it, and if people are around they'll answer
05:37:22 <ski> have our share of problems and drama as well, though)
05:37:55 <Axman6> 💩
05:37:57 × joeyh_ quits (~joeyh@kitenet.net) (Ping timeout: 256 seconds)
05:37:59 <zzz> ski: what's "blessed" logging?
05:38:20 joeyh joins (joeyh@kitenet.net)
05:38:25 <ksqsf> I was fond of monad transformers until I learned about MonadBaseControl
05:38:39 <ski> like in Discord, it's built-in to the client. you can see backlog from before you joined. i think that's probably a bad idea
05:38:46 <Axman6> MonadBaseControl is pretty horrible IMO
05:39:17 <Axman6> Yeah, we talk crap about ski all the time when they're not here
05:39:35 <ski> (makes people be more cautious with what they say, since someone else, who wasn't present, can later search through history and pick up some statement)
05:39:38 ski grins
05:39:39 × lechner quits (~lechner@debian/lechner) (Ping timeout: 256 seconds)
05:39:49 <Axman6> oh no
05:40:10 <ski> (oh, also, i'm against "karma" and "like & dislike" systems ..)
05:40:17 × zmt00 quits (~zmt00@user/zmt00) (Ping timeout: 240 seconds)
05:40:20 ksqsf hesitates to point out this channel has public logging
05:40:23 <zzz> ski +1
05:40:27 ski twitches
05:40:42 <Axman6> oh no, my life is ruined
05:41:06 <ski> ksqsf : yea, i'm full aware. but it's not an automatic default on all channels. and it's recommended on Libera to mention such a thing in channel topic on on-join notice
05:41:09 <ephemient> zzz, well you don't "need" monads either. monad transformers are a tool with a certain set of trade-offs
05:41:29 <zzz> ephemient: great point
05:41:36 ski hugs Axman6
05:42:11 <zzz> the only annoying thing about irc is this actions nonsense
05:42:19 <ski> hehe
05:42:35 <jackdk> ski: good point about the lack of emoji and karma systems. I approve `:)`
05:42:37 <Axman6> Thanks dude
05:42:43 <jackdk> (emoticons are fine, IMHO)
05:42:45 <ski> :)
05:42:57 <ski> (yea, smileys are okay)
05:43:00 <Axman6> :thinkingface:
05:43:04 <ksqsf> (^_^)
05:43:19 <Axman6> (ಠ_ಠ)
05:43:22 <CHUD> https://becca.ooo/discord
05:43:23 ski glances around nervously
05:43:55 <zzz> well, even emoticons are up to the client
05:44:04 rusrushal13 joins (~rusrushal@2401:4900:5d31:3217:d016:3e1b:c176:62e9)
05:44:07 <zzz> irc is encding agnostic
05:44:09 <qrpnxz> ksqsf, what do you think of https://hackage.haskell.org/package/layers
05:44:30 <qrpnxz> (asking because you mentioned MonadBaseControl)
05:44:47 <glguy> agnostish, it support encodings that agree on what \0, \r, and \n mean
05:44:53 <ksqsf> qrpnxz: never used that
05:45:14 <oak-> I don't want to run IRC-client in a shell anymore, but luckily it is also possible to connect through Matrix bridge
05:45:19 × joeyh quits (joeyh@kitenet.net) (Quit: ZNC 1.8.2+deb2+b1 - https://znc.in)
05:45:31 <ksqsf> I still use mtl primarily, but a proper effect system will solve pretty much all the pain points
05:45:33 <Axman6> every encoding should agree that \0 is a perfectly good character
05:45:42 × shriekingnoise quits (~shrieking@201.231.16.156) (Quit: Quit)
05:45:59 <ski> there's also GUI clients
05:45:59 joeyh joins (~joeyh@kitenet.net)
05:46:33 <glguy> or even better web clients
05:46:43 <zzz> oak-: the libera-wide matrix bridge sucks
05:46:55 ski . o O ( "Team Chat" <https://xkcd.com/1782/> )
05:47:04 × slowButPresent quits (~slowButPr@user/slowbutpresent) (Quit: leaving)
05:47:19 <sm> I find it mostly works fine zzz
05:47:25 <Axman6> glguy make the best client though
05:47:28 <oak-> zzz: Why?
05:47:31 Gurkenglas joins (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de)
05:47:48 glguy high-fives Axman6
05:47:57 <qrpnxz> i use an xmpp bridge
05:48:01 <Axman6> it is frustrating when someone joins using matrix and doesn't realise it's actuall IRC, and then constantly edits their messages
05:48:08 <CHUD> goodnight all
05:48:09 <qrpnxz> lol
05:48:22 <ski> g'night, CHUD, have fun with your Haskell learning !
05:48:29 <monochrom> Such revisionists.
05:48:29 × nshepperd quits (nshepperd@2600:3c03::f03c:92ff:fe28:92c9) (Ping timeout: 252 seconds)
05:48:34 <Axman6> I feel like I've never had a "why IRC" conversation on IRC before...
05:48:48 <CHUD> inception vibes
05:48:53 <ski> happens occasionally
05:48:56 <zzz> glguy: trying out your client is in my todo list
05:48:57 <Axman6> "WHy are we here?"
05:49:11 × CHUD quits (~CHUD@cpc142034-slou6-2-0-cust488.17-4.cable.virginm.net) (Remote host closed the connection)
05:49:17 <glguy> Axman6: because we'd have to disconnect to not be here.
05:49:22 <Axman6> glirc really is excellent, I moved from irssi and haven't looked back. I'd been using irssi for over a decade then
05:49:38 <ksqsf> IRC is great, I don't have to spend time on picking the best profile icon
05:49:41 <zzz> i'm using irssi
05:50:24 <monochrom> I made the best profile icon ever. You can see it on my github profile, https://github.com/treblacy/
05:50:25 <zzz> i've invested so much in configuring it. "i have it just the way i like it"
05:50:28 nshepperd joins (nshepperd@2600:3c03::f03c:92ff:fe28:92c9)
05:50:46 <Axman6> there's a couple of feature I miss but they're not a big deal... the only one that comes to mind is better support for split screens (I don't understand how glirc's work) - I used to always have a 20 line high split with just mentions in it
05:50:54 <ski> (re absence of logging, it seems to me this contributes to (many, though not all) people (regulars) staying connected for longer period of times, and thus contributes to the common "lurk until someone says something interesting" pattern. also picking up threads and conversations from a while ago)
05:51:18 <glguy> Axman6: glirc's split screen works like how I used xmonad
05:51:23 <Axman6> ski: I like the lack of time pressure that brings
05:51:26 <ksqsf> monochrom: nice gradient!
05:51:28 <ski> yes
05:51:36 <glguy> a column for a main window, and a column for the stuff I'm watching
05:51:59 <glguy> (or optionally all in one column)
05:52:27 <glguy> zzz: It's best for me, but not for everyone. You'll likely find you prefer irssi :)
05:52:28 <Axman6> would love to know how to do that - I think I tried but couldn't figure out how to a) have a fixed size window with mentions/highlights, b) how to configure that in the config
05:53:24 <ski> zzz : well, using Irssi, i've still only made very few customizations (i guess i've very lazy/tolerant/reluctant to cross the threshold to adding much such stuff)
05:53:50 <Axman6> I definitely found glirc easier to configure than irssi
05:54:34 <Axman6> Also, by default there's a highlight set up for the word glirc, so I know that every time I say glirc it highlights all the glirc users
05:54:43 <zzz> oak-: it's a long list, but between dropped messages, not rare over a minute latency (up to 2 hours, i've experienced) and weird stuff like messages not being sent when not all matrix users in one channel can see eachother or something like that
05:54:45 <Axman6> and that gived me warm, fuzzy feelings
05:54:48 <Axman6> gives*
05:55:16 glguy_ joins (x@libera/staff/glguy)
05:55:19 <ski> hehe :)
05:56:00 × glguy_ quits (x@libera/staff/glguy) (Remote host closed the connection)
05:56:13 <zzz> glguy: i don't know. the video really convinced me
05:56:35 <zzz> i think you have a demo somewhere
05:56:45 <oak-> I used glirc as a library when I experimented creating an IRC bot with Haskell :-P
05:56:55 × Guest96 quits (~Guest96@144-124-99-115.pip.aber.ac.uk) (Quit: Client closed)
05:57:33 <jackdk> monochrom: On some sites I have a 1x1 transparent PNG as my avatar
05:57:45 <jackdk> I approve of this gradient though, very tasteful
05:57:48 <oak-> but generally I would recommend Weechat over Irssi based on my experience
05:58:08 <ephemient> the "must stay connected to lurk" "feature" of IRC is more of a hindrance than a benefit IMO. IRC is only usable to me by working around that with a bouncer
05:58:10 × johnw quits (~johnw@2607:f6f0:3004:1:c8b4:50ff:fef8:6bf0) (Quit: ZNC - http://znc.in)
05:58:16 <glguy> super brief recording just now: https://asciinema.org/a/u2AJqyXz3z2cYAlBui84Danid - old video https://www.youtube.com/watch?v=taz0-hZwWP4
05:59:07 <ski> fwiwi, "Why I no longer contribute to StackOverflow" by ttmrichter in 2013-12 at <https://web.archive.org/web/20140104210553/http://michael.richter.name/blogs/why-i-no-longer-contribute-to-stackoverflow/> talks a bit about artificial scoring systems ("gamification")
05:59:10 <glguy> I should make a new demo video at some point
06:00:14 <Axman6> showing splitting would be good :P
06:00:39 <zzz> love asciinema
06:00:59 <ski> ephemient : yes, but that means that it's people who care enough that have access to fuller logs, rather than just any random denizen of the internet
06:01:08 glguy_ joins (x@libera/staff/glguy)
06:01:25 <ephemient> s/care enough/have access to full-time computing power
06:01:43 <ski> (but i agree there's both pros and cons. i suspect the pros of the lack overweight the cons)
06:01:50 <ski> yea
06:02:12 <Axman6> I just run glirc in tmux :\
06:03:10 × glguy_ quits (x@libera/staff/glguy) (Remote host closed the connection)
06:04:10 <glguy> aw shoot. I made a perfectly good recording with splits; but I resized the terminal during it and that's not supported
06:04:16 <ski> (i suspect that one reason for the perceived wealth of rudeness and hostility on systems like Twitter is due to its relative lack of localization into communities)
06:04:35 × deadmarshal quits (~deadmarsh@95.38.113.215) (Ping timeout: 256 seconds)
06:04:38 <ski> (obviously there's also many other contributing factors)
06:05:01 <zzz> glguy: you should clarify that's not supported *by asciinema*
06:05:23 <zzz> ;)
06:05:47 <ephemient> yeah. I think it's impossible to build a global community without shared mores, but at the same time global communication is incredibly useful…
06:05:59 ski nods
06:06:47 <zzz> this will eventually turn into a ruseeau vs hobbes discussin
06:07:14 × ph88 quits (~ph88@tmo-085-109.customers.d1-online.com) (Remote host closed the connection)
06:07:31 ph88 joins (~ph88@2a01:598:d003:cd60:6db8:d93b:1b5e:cf50)
06:07:37 × shapr quits (~user@2601:7c0:c37c:46d0:2da1:8e76:2324:a881) (Ping timeout: 240 seconds)
06:07:43 <zzz> *rousseau *discussion
06:07:48 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 250 seconds)
06:08:07 <ski> would you like to elaborate ? :)
06:08:12 <Axman6> I have no idea where most of you are, and it doesn't really matter
06:08:50 <ski> (yea, localization doesn't have to be geographic)
06:09:03 <monochrom> Hobbes argues that people should be ruled by tigers. Calvin argues that people should be ruled by kids.
06:09:51 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
06:10:20 <Axman6> Both are correct
06:10:34 <ski> tiger kittehs, then ?
06:11:49 wyrd joins (~wyrd@gateway/tor-sasl/wyrd)
06:11:59 ski . o O ( "fixed in teh HEAD" <https://lambdacats.github.io/fixed-in-head/> )
06:12:10 takuan joins (~takuan@178-116-218-225.access.telenet.be)
06:12:18 <zzz> are people inherently bad and regulated by society, or the opposite? this is the usual simplified dicothomy. Hobbes however (usualy presented as the preponent of the "people are bad" theory) has a nuanced argument involving scale and such
06:12:38 <zzz> iirc
06:12:47 <zzz> long time since i read them
06:13:29 <zzz> proponent? english is not my native language
06:13:50 <ski> aye
06:13:55 <ski> @wn proponent
06:13:56 <lambdabot> *** "proponent" wn "WordNet (r) 3.0 (2006)"
06:13:56 <lambdabot> proponent
06:13:56 <lambdabot> n 1: a person who pleads for a cause or propounds an idea [syn:
06:13:56 <lambdabot> {advocate}, {advocator}, {proponent}, {exponent}]
06:14:14 merijn joins (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
06:18:08 <zzz> one thing i miss here is the ability to follow conversations easily
06:19:14 <EvanR> lambdabot is like the starship enterprise or the tardis, what it can do is never fully fleshed out but if it would be appropriat suddenly it's possible
06:19:20 <zzz> like sometimes i wish we would tag our messages with hashes corresponfing to the not-really-a-thread(s) we're replying to
06:20:14 × mud quits (~mud@user/kadoban) (Quit: quit)
06:20:42 <zzz> -eb0c76- if you know what i mean
06:21:14 <EvanR> chat... *it's not linear*
06:21:39 <ski> it becomes a bit easier, with some practice
06:22:09 <zzz> ski: what does?
06:22:16 <zzz> oh, right
06:22:29 <zzz> you forgot the -eb0c76-
06:22:41 <zzz> i'm making it a thing
06:22:49 <ski> > 0xeb0c76
06:22:51 <lambdabot> 15404150
06:23:14 × ph88 quits (~ph88@2a01:598:d003:cd60:6db8:d93b:1b5e:cf50) (Remote host closed the connection)
06:23:24 <zzz> no easter egg, just a random hash :p
06:23:32 ph88 joins (~ph88@2a01:598:d003:cd60:6db8:d93b:1b5e:cf50)
06:23:33 <EvanR> > sort (show 15404150)
06:23:34 <lambdabot> "00114455"
06:23:38 <EvanR> > num it
06:23:39 <lambdabot> error:
06:23:39 <lambdabot> • Variable not in scope: num :: t0 -> t
06:23:39 <lambdabot> • Perhaps you meant one of these:
06:23:45 <EvanR> > nub it
06:23:47 <lambdabot> error:
06:23:47 <lambdabot> • Variable not in scope: it :: [a]
06:23:47 <lambdabot> • Perhaps you meant one of these:
06:23:49 <ski> doesn't look that random, to me .. :D
06:24:15 cyphase joins (~cyphase@user/cyphase)
06:24:27 <zzz> > nub $ show 0xeb0c76
06:24:28 <lambdabot> "1540"
06:24:35 <ski> % :t it
06:24:36 <yahb> ski: TypeRep
06:26:02 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
06:26:02 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
06:26:02 wroathe joins (~wroathe@user/wroathe)
06:26:18 michalz joins (~michalz@185.246.204.43)
06:26:21 <EvanR> any time you enter a derelict haskell spaceship, first thing you check is the type and possibly value of `it'
06:27:06 <ski> be careful not to bump any bottom
06:27:43 <zzz> never evaluate foreign values
06:28:14 <ski> unless they're Trustworthy
06:28:48 <zzz> yeah right
06:28:53 <EvanR> in let x = x in x, no one can hear you scream
06:29:19 <EvanR> ok maybe that'd be a better setting for an event horizon reference
06:29:31 <zzz> which reminds me this is the right place to ask:
06:29:52 <zzz> :t let a = a in a
06:29:52 <lambdabot> t
06:30:00 <zzz> why is it t?
06:30:13 <EvanR> :t undefined
06:30:14 <lambdabot> a
06:30:17 <EvanR> haha...
06:30:24 <ephemient> could by any type variable
06:30:40 <zzz> ephemient: as can a
06:30:48 <zzz> undefined
06:30:58 <ephemient> @src undefined
06:30:58 <lambdabot> undefined = error "Prelude.undefined"
06:31:08 <ephemient> :t error
06:31:09 <lambdabot> [Char] -> a
06:31:13 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds)
06:31:15 <ephemient> thus, a
06:31:23 <zzz> ok
06:31:36 <EvanR> :t fix id
06:31:37 <lambdabot> a
06:31:47 × rusrushal13 quits (~rusrushal@2401:4900:5d31:3217:d016:3e1b:c176:62e9) (Ping timeout: 256 seconds)
06:31:50 <zzz> EvanR: nice
06:32:04 <ephemient> :t fix error
06:32:05 <lambdabot> [Char]
06:32:11 <zzz> :/
06:32:13 <ephemient> 🤔
06:32:33 <ski> @type let f (x:xs) ys = f xs (x:ys) in f
06:32:33 <lambdabot> [a] -> [a] -> t
06:33:16 <ski> result type is a singleton type variable, implies you've an infinite loop (or other bottom, like `error (...)')
06:33:44 <zzz> ski +1
06:34:06 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
06:34:43 <ski> (i guess a (bottom-up) merge sort, missing its base case, might be a better example)
06:35:14 <ski> > fix error
06:35:15 <lambdabot> "*Exception: *Exception: *Exception: *Exception: *Exception: *Exception: *Ex...
06:35:18 <ski> > fix show
06:35:19 <lambdabot> "\"\\\"\\\\\\\"\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"\\\\\\\\\\\\\...
06:36:03 <monochrom> Yeah, https://perl.plover.com/classes/OOPSLA/samples/slide068.html
06:37:06 × incertia quits (~incertia@207.98.176.40) (Quit: ZNC 1.7.5 - https://znc.in)
06:37:10 <ephemient> [] is a list of strings, so the second statement seems wrong </missing-the-point>
06:37:26 deadmarshal joins (~deadmarsh@95.38.113.215)
06:38:43 × echoreply quits (~echoreply@45.32.163.16) (Quit: WeeChat 2.8)
06:39:14 echoreply joins (~echoreply@2001:19f0:9002:1f3b:5400:ff:fe6f:8b8d)
06:39:19 <EvanR> 4 slides later you are confronted with a giant image of a cockaroach
06:39:39 <EvanR> I command W so fast I never really understood the context of that page
06:40:01 <zzz> Programming in Haskell is pleasant
06:40:01 <zzz> No type declarations—everything is automatic
06:40:01 <zzz> You get quite a few type errors (darn!)
06:40:01 <zzz> But every error indicates a real, serious problem
06:40:04 <zzz> Not like lint or C or Pascal.
06:40:14 <zzz> ^ monochrom: lol
06:40:24 lavaman joins (~lavaman@98.38.249.169)
06:40:46 <EvanR> not sure about you guys but I'm so bad ass I disable all the warnings and errors in haskell, I know what I'm doing
06:41:18 <monochrom> Sometimes a type error indicates a typo, like int vs Int. Not sure if it's a real serious problem.
06:42:01 <EvanR> a significant chunk of my errors are like that
06:42:10 × deadmarshal quits (~deadmarsh@95.38.113.215) (Ping timeout: 256 seconds)
06:42:30 <EvanR> if this was HTML we wouldn't be bogged down by such
06:42:33 <ephemient> ghc -fdeferred-type-errors -- yolo
06:43:40 <zzz> pfft, i just write `main = main` and call it a day
06:44:06 deadmarshal joins (~deadmarsh@95.38.113.215)
06:44:21 <EvanR> deriving BonanzaProfitMMORPG
06:44:37 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 240 seconds)
06:45:10 <zzz> interestingly, main = main typechecks...
06:45:15 <EvanR> (I mean, it can't be that hard to get a formula for that)
06:45:24 <ski> (why wouldn't it ?)
06:45:39 <EvanR> how could it not*
06:45:56 <ephemient> yeah, it would be more surprising if it *didn't* typecheck
06:46:06 <zzz> main is supposed to be IO a
06:46:18 <zzz> main = pure 7 doesn't
06:46:21 <monochrom> HM type inference works in mysterious ways...
06:46:22 <ski> @type let main :: IO a; main = main in main
06:46:23 <lambdabot> IO a
06:46:56 <ephemient> @type let main :: a; main = main in main :: IO ()
06:46:57 <monochrom> main = pure 7 is fine.
06:46:57 <lambdabot> IO ()
06:46:59 <ski> @type let main :: IO Integer; main = pure 7 in main -- this also works
06:47:00 <lambdabot> IO Integer
06:47:09 <ski> (at the top-level, i mean)
06:47:17 <ephemient> as long as there's some way to have main :: IO (), it's fine
06:47:18 <zzz> you are right
06:47:34 <EvanR> main = main has any type you want
06:47:35 <ski> the result value is discarded. it doesn't have to have type `()'
06:47:52 <monochrom> No you don't need ().
06:48:17 × merijn quits (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds)
06:49:49 × forell quits (~forell@user/forell) (Ping timeout: 240 seconds)
06:50:39 <zzz> <<loop>>
06:51:37 × xff0x quits (~xff0x@2001:1a81:52b8:8500:a7fd:d6d9:518c:9835) (Ping timeout: 240 seconds)
06:52:41 xff0x joins (~xff0x@2001:1a81:52b8:8500:bb40:636:eb26:d15a)
06:52:42 forell joins (~forell@user/forell)
06:58:30 <zzz> monochrom: written in slide 65:
06:58:31 <zzz> We could put in a list of Integer and get out a list of String
06:58:32 <zzz> Which is impossible
06:58:41 <zzz> "
06:58:58 <zzz> well, it's not impossible, is it?
06:59:02 <ski> (at least if it's actually sorting ..)
07:01:27 <zzz> the problem with (Ord t) => [t] -> [a] is the forall a.
07:01:32 <zzz> right?
07:02:09 <ski> not sure what you mean
07:03:06 <ski> it is an issue that the input element type is unrelated to the output element type
07:04:15 <zzz> well, you could replace a with any type and it would be fine
07:04:32 faustind parts (~faustin@M014008067225.v4.enabler.ne.jp) ()
07:06:12 <zzz> you can even just constraint, depending on the constraint
07:07:12 <zzz> if all ts are sorted, return minBound, otherwise maxBound
07:08:03 <ski> yea
07:08:27 <ski> (although the latter does require an additional `Bounded a' constraint)
07:08:41 <zzz> sure
07:09:55 <ephemient> :t zipWith fst [0..] -- this is a function whose output element type has no relation to the input element type, but still does something (potentially) useful
07:09:56 <lambdabot> (Num (b1 -> c, b2), Enum (b1 -> c, b2)) => [b1] -> [c]
07:10:12 <ephemient> actually did I write that wrong, the type doesn't look like I expect
07:10:17 × forell quits (~forell@user/forell) (Ping timeout: 240 seconds)
07:10:20 <ski> `const' ?
07:10:28 <ephemient> oh yeah
07:10:42 <ephemient> :t zipWith const [0..]
07:10:43 <lambdabot> (Num c, Enum c) => [b] -> [c]
07:10:56 ski nods
07:11:05 <ephemient> so it's not like it's totally unreasonable… it just doesn't make sense for sort
07:12:38 × razetime quits (~quassel@49.207.203.87) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
07:13:38 <zzz> as long as you have constraints on the output type
07:15:28 <zzz> my point is that no function can introduce a new unconstrained type variable on the output type
07:16:04 <ski> well, the empty list has type `[a]', for any `a'
07:16:47 <zzz> touche
07:17:41 lavaman joins (~lavaman@98.38.249.169)
07:18:17 mud joins (~mud@user/kadoban)
07:18:43 <zzz> :t const Nothing
07:18:44 <lambdabot> b -> Maybe a
07:20:29 × nshepperd2 quits (~nshepperd@li364-218.members.linode.com) (Read error: Connection reset by peer)
07:20:30 dumptruckman_ joins (~dumptruck@45-79-173-88.ip.linodeusercontent.com)
07:20:35 × dumptruckman quits (~dumptruck@45-79-173-88.ip.linodeusercontent.com) (Ping timeout: 250 seconds)
07:20:41 dumptruckman_ is now known as dumptruckman
07:20:51 <ksqsf> I just created a lambdacats sticker pack for Telegram users :-p
07:20:57 <ksqsf> https://t.me/addstickers/lambdacats
07:21:05 × edr quits (~edr@user/edr) (Ping timeout: 256 seconds)
07:21:28 × deadmarshal quits (~deadmarsh@95.38.113.215) (Ping timeout: 250 seconds)
07:21:31 nshepperd2 joins (~nshepperd@li364-218.members.linode.com)
07:21:47 edr joins (~edr@enlo.co)
07:21:47 × edr quits (~edr@enlo.co) (Changing host)
07:21:47 edr joins (~edr@user/edr)
07:21:54 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 250 seconds)
07:22:29 _ht joins (~quassel@82-168-34-160.fixed.kpn.net)
07:26:06 × nineonine quits (~nineonine@2604:3d08:7780:cd00:e983:291a:d390:4809) (Remote host closed the connection)
07:26:30 notzmv joins (~zmv@user/notzmv)
07:28:52 yauhsien_ joins (~yauhsien@61-231-62-246.dynamic-ip.hinet.net)
07:31:00 × ksqsf quits (~user@2001:da8:d800:336:ecbe:7994:fa3f:f03c) (Ping timeout: 250 seconds)
07:36:31 deadmarshal joins (~deadmarsh@95.38.113.215)
07:36:37 × cheater quits (~Username@user/cheater) (Ping timeout: 240 seconds)
07:37:08 cheater joins (~Username@user/cheater)
07:42:04 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer)
07:42:37 × slac83129 quits (~slack1256@186.11.27.69) (Ping timeout: 240 seconds)
07:44:44 × ph88 quits (~ph88@2a01:598:d003:cd60:6db8:d93b:1b5e:cf50) (Remote host closed the connection)
07:45:02 ph88 joins (~ph88@2a01:598:d003:cd60:6db8:d93b:1b5e:cf50)
07:45:04 Jing joins (~hedgehog@240e:390:7c53:a7e1:315f:3454:b0d8:112e)
07:47:09 SummerSonw joins (~The_viole@203.77.49.232)
07:49:44 × ph88 quits (~ph88@2a01:598:d003:cd60:6db8:d93b:1b5e:cf50) (Remote host closed the connection)
07:50:02 × cyphase quits (~cyphase@user/cyphase) (Ping timeout: 268 seconds)
07:50:02 ph88 joins (~ph88@2a01:598:d003:cd60:6db8:d93b:1b5e:cf50)
07:50:28 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
07:53:39 forell joins (~forell@user/forell)
07:54:55 cyphase joins (~cyphase@user/cyphase)
07:56:05 lortabac joins (~lortabac@2a01:e0a:541:b8f0:ba7b:1b5c:238c:4447)
07:59:51 myShoggoth joins (~myShoggot@97-120-67-120.ptld.qwest.net)
08:01:30 × deadmarshal quits (~deadmarsh@95.38.113.215) (Ping timeout: 256 seconds)
08:06:57 lavaman joins (~lavaman@98.38.249.169)
08:07:18 fendor joins (~fendor@178.165.192.6.wireless.dyn.drei.com)
08:07:29 mc47 joins (~mc47@xmonad/TheMC47)
08:08:31 alp joins (~alp@user/alp)
08:08:42 × polyphem quits (~rod@2a02:810d:840:8754:b6f3:5141:3b3:83de) (Ping timeout: 250 seconds)
08:09:01 × mbuf quits (~Shakthi@110.225.224.187) (Quit: Leaving)
08:09:02 deadmarshal joins (~deadmarsh@95.38.113.215)
08:09:56 ksqsf joins (~user@2001:da8:d800:336:807c:6844:3aff:5291)
08:10:45 MajorBiscuit joins (~MajorBisc@86-88-79-148.fixed.kpn.net)
08:11:42 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 256 seconds)
08:13:07 lavaman joins (~lavaman@98.38.249.169)
08:15:55 Major_Biscuit joins (~MajorBisc@c-001-024-001.client.tudelft.eduvpn.nl)
08:18:45 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
08:18:57 × MajorBiscuit quits (~MajorBisc@86-88-79-148.fixed.kpn.net) (Ping timeout: 240 seconds)
08:19:51 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
08:23:52 vpan joins (~0@212.117.1.172)
08:25:34 cfricke joins (~cfricke@user/cfricke)
08:25:50 polyphem joins (~rod@2a02:810d:840:8754:b6f3:5141:3b3:83de)
08:25:57 × vysn quits (~vysn@user/vysn) (Ping timeout: 240 seconds)
08:26:49 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
08:26:49 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
08:26:49 wroathe joins (~wroathe@user/wroathe)
08:30:20 dsrt^ joins (~dsrt@207.182.73.202)
08:31:55 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds)
08:33:58 × nshepperd2 quits (~nshepperd@li364-218.members.linode.com) (Quit: Ping timeout (120 seconds))
08:34:58 × joeyh quits (~joeyh@kitenet.net) (Quit: ZNC 1.8.2+deb2+b1 - https://znc.in)
08:35:10 joeyh joins (joeyh@kitenet.net)
08:36:13 × tomjaguarpaw quits (~tom@li367-225.members.linode.com) (Ping timeout: 240 seconds)
08:37:17 × myShoggoth quits (~myShoggot@97-120-67-120.ptld.qwest.net) (Ping timeout: 240 seconds)
08:37:35 × tureba quits (~tureba@tureba.org) (Ping timeout: 256 seconds)
08:44:48 merijn joins (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
08:46:35 coot joins (~coot@89-64-85-93.dynamic.chello.pl)
08:47:19 tomjaguarpaw joins (~tom@li367-225.members.linode.com)
08:48:36 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:494b:f936:f65f:424f) (Remote host closed the connection)
08:49:34 kuribas joins (~user@ptr-25vy0i8mxo9em8d53n7.18120a2.ip6.access.telenet.be)
08:49:55 × Flonk quits (~Flonk@vps-zap441517-1.zap-srv.com) (Quit: Ping timeout (120 seconds))
08:49:59 tureba joins (~tureba@tureba.org)
08:50:21 Flonk joins (~Flonk@vps-zap441517-1.zap-srv.com)
08:50:45 machinedgod joins (~machinedg@24.105.81.50)
08:50:53 × tzh quits (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz)
08:51:24 nshepperd2 joins (~nshepperd@li364-218.members.linode.com)
08:52:28 × yauhsien_ quits (~yauhsien@61-231-62-246.dynamic-ip.hinet.net) (Remote host closed the connection)
08:52:58 Guest5225 joins (~Guest52@80-100-97-100.ip.xs4all.nl)
08:54:43 yauhsien_ joins (~yauhsien@61-231-62-246.dynamic-ip.hinet.net)
08:57:30 × ph88 quits (~ph88@2a01:598:d003:cd60:6db8:d93b:1b5e:cf50) (Read error: Connection reset by peer)
08:57:52 ph88 joins (~ph88@2a02:8109:9e00:71d0:e821:f261:3387:e512)
08:59:41 × yauhsien_ quits (~yauhsien@61-231-62-246.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
09:00:21 × phma quits (phma@2001:5b0:212a:d158:6462:9429:37ae:1dd1) (Read error: Connection reset by peer)
09:01:14 phma joins (phma@2001:5b0:211b:b1e8:ef4c:8052:a169:f66a)
09:03:38 Codaraxis joins (~Codaraxis@user/codaraxis)
09:03:50 × whatsupdoc quits (uid509081@id-509081.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
09:06:14 mmhat joins (~mmh@55d4fecc.access.ecotel.net)
09:06:38 × econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity)
09:06:40 × Codaraxis_ quits (~Codaraxis@user/codaraxis) (Ping timeout: 256 seconds)
09:16:22 × andjjj23_ quits (~irc@107.170.228.47) (Ping timeout: 268 seconds)
09:17:01 × c_wraith quits (~c_wraith@adjoint.us) (Ping timeout: 240 seconds)
09:17:15 × fluxit quits (~fluxit@techsmix.net) (Ping timeout: 256 seconds)
09:17:15 × mmaruseacph2 quits (~mihai@198.199.100.72) (Ping timeout: 256 seconds)
09:17:15 × meejah quits (~meejah@rutas.meejah.ca) (Ping timeout: 256 seconds)
09:17:44 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b)))
09:17:44 allbery_b joins (~geekosaur@xmonad/geekosaur)
09:17:47 allbery_b is now known as geekosaur
09:18:18 yauhsien_ joins (~yauhsien@61-231-62-246.dynamic-ip.hinet.net)
09:18:47 meejah joins (~meejah@rutas.meejah.ca)
09:18:55 mmaruseacph2 joins (~mihai@198.199.100.72)
09:22:01 fluxit joins (~fluxit@techsmix.net)
09:22:24 c_wraith joins (~c_wraith@adjoint.us)
09:25:57 × noctux quits (~noctux@user/noctux) (Read error: Connection reset by peer)
09:26:47 Morrow joins (~Morrow@bzq-110-168-31-106.red.bezeqint.net)
09:28:19 × mud quits (~mud@user/kadoban) (Remote host closed the connection)
09:28:45 mud joins (~mud@user/kadoban)
09:29:55 × yauhsien_ quits (~yauhsien@61-231-62-246.dynamic-ip.hinet.net) (Remote host closed the connection)
09:30:42 yauhsien_ joins (~yauhsien@61-231-62-246.dynamic-ip.hinet.net)
09:30:57 × fluxit quits (~fluxit@techsmix.net) (Ping timeout: 240 seconds)
09:31:02 × c_wraith quits (~c_wraith@adjoint.us) (Ping timeout: 256 seconds)
09:31:42 andjjj23_ joins (~irc@107.170.228.47)
09:31:49 c_wraith joins (~c_wraith@adjoint.us)
09:32:40 nsilv-phone joins (~nsilv-pho@host-213-45-115-140.pool21345.interbusiness.it)
09:32:46 × Gurkenglas quits (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) (Ping timeout: 250 seconds)
09:32:49 × nsilv-phone quits (~nsilv-pho@host-213-45-115-140.pool21345.interbusiness.it) (Client Quit)
09:33:43 fluxit joins (~fluxit@techsmix.net)
09:34:27 ubert1 joins (~Thunderbi@p200300ecdf09943ef05cebfd8a506150.dip0.t-ipconnect.de)
09:34:34 max22- joins (~maxime@lfbn-ren-1-1026-62.w92-139.abo.wanadoo.fr)
09:35:43 × Morrow quits (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Read error: Connection reset by peer)
09:35:48 Morrow_ joins (~Morrow@bzq-110-168-31-106.red.bezeqint.net)
09:36:16 Morrow joins (~Morrow@bzq-110-168-31-106.red.bezeqint.net)
09:40:08 × Morrow_ quits (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 250 seconds)
09:42:36 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
09:42:36 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
09:42:36 wroathe joins (~wroathe@user/wroathe)
09:43:41 noctux joins (~noctux@user/noctux)
09:45:03 × yauhsien_ quits (~yauhsien@61-231-62-246.dynamic-ip.hinet.net) (Remote host closed the connection)
09:46:38 × tomjaguarpaw quits (~tom@li367-225.members.linode.com) (Ping timeout: 250 seconds)
09:46:45 tomjaguarpaw joins (~tom@li367-225.members.linode.com)
09:47:30 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 250 seconds)
09:49:00 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:494b:f936:f65f:424f)
09:52:32 × Jing quits (~hedgehog@240e:390:7c53:a7e1:315f:3454:b0d8:112e) (Quit: My MacBook has gone to sleep. ZZZzzz…)
09:53:17 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:494b:f936:f65f:424f) (Ping timeout: 240 seconds)
09:53:37 × bontaq quits (~user@ool-45779fe5.dyn.optonline.net) (Ping timeout: 240 seconds)
09:58:37 × c_wraith quits (~c_wraith@adjoint.us) (Ping timeout: 256 seconds)
09:58:37 × xff0x quits (~xff0x@2001:1a81:52b8:8500:bb40:636:eb26:d15a) (Ping timeout: 240 seconds)
09:58:48 × mmaruseacph2 quits (~mihai@198.199.100.72) (Ping timeout: 256 seconds)
09:59:52 xff0x joins (~xff0x@2001:1a81:52b8:8500:6c95:ecd6:fb54:75ad)
10:00:30 × vglfr quits (~vglfr@88.155.98.86) (Ping timeout: 256 seconds)
10:01:31 vglfr joins (~vglfr@46.96.174.179)
10:01:58 Jing joins (~hedgehog@240e:390:7c53:a7e1:81fd:e333:1e93:e27e)
10:02:31 × ksqsf quits (~user@2001:da8:d800:336:807c:6844:3aff:5291) (Remote host closed the connection)
10:03:15 c_wraith joins (~c_wraith@adjoint.us)
10:03:54 × meejah quits (~meejah@rutas.meejah.ca) (Ping timeout: 256 seconds)
10:03:57 × fluxit quits (~fluxit@techsmix.net) (Ping timeout: 240 seconds)
10:09:00 × andjjj23_ quits (~irc@107.170.228.47) (Ping timeout: 256 seconds)
10:09:36 × c_wraith quits (~c_wraith@adjoint.us) (Ping timeout: 250 seconds)
10:10:14 × coot quits (~coot@89-64-85-93.dynamic.chello.pl) (Quit: coot)
10:11:05 × deadmarshal quits (~deadmarsh@95.38.113.215) (Ping timeout: 256 seconds)
10:13:42 coot joins (~coot@89-64-85-93.dynamic.chello.pl)
10:14:18 TheCoffeMaker joins (~TheCoffeM@user/thecoffemaker)
10:21:30 DNH joins (~DNH@2a02:8108:1100:16d8:b4f2:7b49:1758:11bf)
10:22:19 andjjj23_ joins (~irc@107.170.228.47)
10:22:57 fluxit joins (~fluxit@techsmix.net)
10:23:04 c_wraith joins (~c_wraith@adjoint.us)
10:23:14 × TheCoffeMaker quits (~TheCoffeM@user/thecoffemaker) (Quit: So long and thanks for all the fish)
10:25:26 × Akiva quits (~Akiva@user/Akiva) (Ping timeout: 256 seconds)
10:26:57 × Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 256 seconds)
10:27:44 romesrf joins (~romes@44.190.189.46.rev.vodafone.pt)
10:27:49 <romesrf> hey everyone
10:28:03 <romesrf> in type UniqResult result = (# result, UniqSupply #), what are the ### called?
10:28:07 meejah joins (~meejah@rutas.meejah.ca)
10:28:19 <ski> that's an unboxed tuple type
10:28:25 <romesrf> thank you :)
10:29:06 × Morrow quits (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 250 seconds)
10:29:34 __monty__ joins (~toonn@user/toonn)
10:31:09 mgd joins (~mgd@85.210.231.115)
10:38:27 vysn joins (~vysn@user/vysn)
10:39:28 mechano joins (~mechano@cpc101088-sgyl37-2-0-cust22.18-2.cable.virginm.net)
10:40:27 <mechano> how do lexers and parsers work? is that some kind of formal methods thing, since its like language design?
10:41:16 × DNH quits (~DNH@2a02:8108:1100:16d8:b4f2:7b49:1758:11bf) (Quit: Textual IRC Client: www.textualapp.com)
10:41:51 <mechano> there must be some kind of low dimensional space somewhere, and that the language design must somehow target that
10:42:45 deadmarshal joins (~deadmarsh@95.38.113.215)
10:43:31 <mechano> i was thinking of an example like describing rhythms, where repetition and variation instructions are normally given. basically this gives a language to produce binary sequences, and i was wondering how this compared to a proper programming language.
10:44:01 Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915)
10:44:04 <__monty__> It's more a mechanical recognizing of character sequences.
10:44:37 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 240 seconds)
10:45:18 Lord_of_Life_ is now known as Lord_of_Life
10:45:48 <mechano> here the low dimensional space is that rhythms are something to do with how the brain expects a repeated sound, because of how it processes vocal tones (im guessing) - and that this gives the language, which people have somehow naturally determined...
10:46:02 <[exa]> mechano: lexers and parsers are usually formalized as programs that compute matches to regular and context-free languages
10:46:10 Morrow joins (~Morrow@bzq-110-168-31-106.red.bezeqint.net)
10:46:30 <[exa]> mechano: rhytms are much more lattice-like and the definition is waaaaaaaaaaaaaay softer
10:46:33 <mechano> [exa] its just like an encoder and a decoder right? like, an autoencoder...
10:46:48 <[exa]> not really
10:47:02 <mechano> its different because its streaming?
10:47:38 <mechano> [exa]: no? i thought it was just a basis rotation...
10:47:38 <[exa]> I wouldn't use neural network methodology to describe the parsing, although you can technically "wire" the regular parsers and limited-depth context-free parsers to neural networks
10:48:11 mgd parts (~mgd@85.210.231.115) ()
10:48:36 <mechano> sure, there is some mismatch between the soft classifiers and the binary case
10:49:14 × merijn quits (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
10:49:30 <mechano> i guess the main differernce is that a language isnt a black box parametric model, and that all of the design variables are comprehensible
10:50:01 <[exa]> also NNs are tremendously inefficient compared to parsers that you can automatically define from a formal language spec (regex/automaton, CF grammar, ...)
10:50:14 <[exa]> yeah, no blackboxes
10:50:40 × SummerSonw quits (~The_viole@203.77.49.232) (Remote host closed the connection)
10:51:00 <mechano> so this spec is giving a test case, that arbitrary implementation can be shown equivalent under?
10:51:03 SummerSonw joins (~The_viole@203.77.49.232)
10:51:18 <mechano> ok, i guess i should speak in terms of language specifications then
10:51:22 <[exa]> let's continue in #haskell-offtopic, can we? this is getting offtopic :D
10:51:37 merijn joins (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
10:51:41 <mechano> where does the formal methods part end, i dont want to stray offtopic
10:52:07 <[exa]> like, this is getting to automata & grammar theory which is kinda offtopic anyway :D
10:52:16 <[exa]> no big worries I guess tho
10:52:49 <[exa]> the point is that spec is not giving a test case, it is a complete, always decidable specification of what is in a language and what isn't
10:53:08 <mechano> so how does haskell fit in to all this? i mean, i was just using a simple example to try to understand how an actual language can be described
10:53:37 × mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection)
10:53:54 <[exa]> haskell has a quite complicated context-free grammar, you might find the "specifications" in GHC source, likely as alex/happy parser source code
10:54:26 mmaruseacph2 joins (~mihai@198.199.100.72)
10:55:37 <[exa]> https://github.com/ghc/ghc/blob/master/compiler/GHC/Parser/Lexer.x eg here
10:55:46 <mechano> im struggling to get the difference between a basis transformation, eg a matrix in linear algebra, and the compilation and program writing process as a kind of similar bijection. is the specification fulfilling the same role as the matrix parameters?
10:56:34 <[exa]> the difference is that compiling program by basis transoformation is theoretically possible but a total madness to do correctly
10:56:37 <mechano> [exa] wait, why does haskell use happy & alex? what are those, how do they work here?
10:57:13 <ephemient> alex : happy :: lex : yacc
10:57:54 <mechano> ephemient: im not sure what that means
10:57:56 <[exa]> mechano: are you aware of the finite-state machine theory, pushdown automata, etc?
10:58:09 <mechano> im guessing that the parser has some state
10:58:24 <mechano> during a fold that consumes the program string
10:58:45 <ephemient> alex is to happy as lex is to yacc. lex and yacc are well-known lexers and parser generators in old-school compilers, alex and happy fulfill similar roles in Haskell
10:58:46 Morrow_ joins (~Morrow@bzq-110-168-31-106.red.bezeqint.net)
10:59:07 × Morrow quits (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Read error: Connection reset by peer)
10:59:11 <mechano> and undergoes a state action that is the "automata" update
10:59:23 Morrow joins (~Morrow@bzq-110-168-31-106.red.bezeqint.net)
10:59:44 <[exa]> mechano: yep. you can encode that to linear algebra but it gets unwieldy
11:01:16 <mechano> im guessing the problem is that there is a large number of discrete values, and you would need an orthogonal vector for each, but i can almost see how that might end up as a matrix!
11:01:37 × merijn quits (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds)
11:01:56 <mechano> i dont like trying to understand the vector space version of logic..
11:02:12 <mechano> id rather just think of it as a bijection
11:02:46 <[exa]> yeah, given e.g. a DFA you can work in Z(2) with 1-bit representation of the state, and each letter causes multiplication by a matrix that describes all transitions caused by the letter
11:02:57 × Morrow_ quits (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 240 seconds)
11:03:05 <[exa]> and you accept if there's '1' in the expected finishing states
11:03:06 Morrow_ joins (~Morrow@bzq-110-168-31-106.red.bezeqint.net)
11:03:15 merijn joins (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
11:03:22 Codaraxis_ joins (~Codaraxis@user/codaraxis)
11:03:25 <mechano> ephemient: so alex is a lexer? and happy is a parser?
11:03:31 × Codaraxis quits (~Codaraxis@user/codaraxis) (Read error: Connection reset by peer)
11:04:03 <[exa]> normal parser state machines have "stacks" (ie. infinite memory) which is impossible to do easily, but you can convert limited-depth stack machine to DFAs and go the same way
11:04:23 <[exa]> ending up with matrices like 10000000x10000000 for parsing haskell
11:04:41 <ephemient> a parser generator. you give it a grammar and it spits out Haskell code
11:04:43 <mechano> ah, right, part of this was supposed to be to do with brevity
11:05:25 <[exa]> (I'm assuming there are no shenanigans (there are) and no lookahead)
11:05:26 <mechano> like, a good language would somehow be effecient, somehow using the shape of the low dimensional space "good programs" inhabit
11:05:57 × Morrow quits (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 240 seconds)
11:06:24 <[exa]> I don't want to see the size of the matrix that would be needed to represent the whole program transformations done by even a relatively tiny compiler, such as tcc
11:06:29 <mechano> ephemient: sounds more like a lexer that outputs parser, which seems confusing
11:06:31 <[exa]> you won't fit it on earth IMO
11:06:56 <mechano> so how does the compiler end up being so elegant?
11:07:06 <mechano> is that because its a good language?
11:07:22 <[exa]> it avoids expressing problems in inefficient ways
11:07:27 <mechano> or because its written in a good language? im still slightly confused about the stages ere
11:07:32 × Codaraxis_ quits (~Codaraxis@user/codaraxis) (Read error: Connection reset by peer)
11:07:56 <[exa]> linear algebra is simply not an efficient way to work with complicated exact language structures and ASTs.
11:07:57 Codaraxis_ joins (~Codaraxis@user/codaraxis)
11:08:32 <mechano> something to do with them being consumed in an ordered way?
11:08:54 <[exa]> same with neural nets, you can express the learning task as precise boolean logic problem, but no one does that because the complexity of doing it that way would be completely hopeless
11:09:02 <mechano> you only get left to right determinism then... but i cant see that being responsible for the most part of the savings
11:09:50 <mechano> i think im missing something about what makes a good language, or a good program, or something
11:10:15 <[exa]> did you do any computational complexity theory?
11:10:16 <mechano> seems like theres something to do with compiler complexity, ie not just a big matrix
11:10:34 <[exa]> inverting compilers is NP
11:10:37 <mechano> [exa] i never heard of it, so im guessing not, but the ideas are probably familiar
11:10:57 <[exa]> (ok maybe much harder than NP)
11:11:08 <mechano> [exa] thats basically impossibly hard, iiuc
11:11:53 <[exa]> yeah it very easily belongs to some class of problems that you just can't expect to solve in humane times
11:11:53 <mechano> so you need to use the spec to give the lexer and parser (compiler), and not try to infer the spec from the compiler? is that what your saying?
11:12:19 <[exa]> lexer and parser _are_ the compiler
11:12:24 <mechano> how is that to do with what makes a good language?
11:12:32 <[exa]> nothing honestly
11:12:40 <mechano> wait, i thought the compiler was just a parser, and that the programmer was the lexer
11:12:41 <[exa]> people choose whatever language they like
11:12:41 Midjak joins (~Midjak@may53-1-78-226-116-92.fbx.proxad.net)
11:12:57 × merijn quits (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds)
11:13:02 <[exa]> anyway we're now seriously offtopic :D
11:13:02 <mechano> im not sure why you were mentioning inverting compilers
11:13:22 <[exa]> you wanted a bijection right?
11:13:37 <mechano> i guess ill never understand how haskell was an eloquent bijection
11:13:46 <[exa]> because it's not
11:14:25 <mechano> but it describes the format targeted by the programmer and compiler
11:14:46 <mechano> which seem to be the transformation and its inverse
11:14:55 merijn joins (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
11:15:31 <mechano> yeah, at this point ill accept im not going to understand which parts of this are ontopic and just give up!
11:15:34 <mechano> but thanks
11:15:49 <[exa]> the "seem to be" there is too vague honestly. :D
11:16:07 Morrow joins (~Morrow@bzq-110-168-31-106.red.bezeqint.net)
11:16:13 <mechano> well im not sure, so...
11:18:19 <mechano> all i was trying to say is that haskell must somehow compress program size, by being a "good" language
11:18:27 <[exa]> like, maybe we're just talking different languages now; check out some of the formal material on compilers, and some of the complexity theory (where these representation transformations are quite common) I guess you might find an answer there
11:18:42 × Morrow_ quits (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 256 seconds)
11:18:46 <[exa]> ah, you meant "expressive"
11:19:01 <mechano> oh is that what that means!?
11:19:09 <[exa]> that is also double sided, check out APL. :D
11:19:49 <mechano> this? https://en.wikipedia.org/wiki/APL_(programming_language)
11:19:54 <mechano> what am i looking for?
11:19:57 <[exa]> anyway there is no good metric on how to measure this AFAIK, especially not with bijections and linear algebra because the "expansion" process is just wicked complex
11:20:24 <[exa]> yeah that was my anti-example to "compress program size"
11:20:45 <mechano> i guess trying to understand what makes a language good would be like trying to understand the "most common shaped programs" or something
11:21:14 <[exa]> Haskell does the expansion basically by embedding a few layers of extra logic above the actual program logic and programmer may exploit these to do complicated stuff in the lower layers quickly
11:21:15 Gurkenglas joins (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de)
11:21:47 <mechano> like how i can say that describing drumbeats as repititions and variations is a good idea, because most of the common patterns inhabit the small space where repetition and variation are used a lot, and those kind of instructions allow lots of data to be generated from short statements
11:21:59 <[exa]> ah, that doesn't work on programs
11:22:29 <[exa]> similarity of programs as a metric is completely impossible to do right, because the interpretation is binary
11:23:00 <[exa]> (see e.g. rice's theorem)
11:23:09 <mechano> but like, many programs are recursive. i guess that gets a whole bunch
11:23:22 alt-romes joins (~romes@44.190.189.46.rev.vodafone.pt)
11:23:27 <mechano> i think i could be wrongly thinking in terms of higher order programs though
11:23:29 <[exa]> s/binary/complicated and totally not smooth/
11:24:34 <mechano> that sounds like Russels paradox almost...
11:24:38 <[exa]> anyway re drum patterns, these have some representation in grammars as well (there might be nice papers on that), but the interpretation there is completely different
11:24:49 <mechano> how so?
11:24:56 × merijn quits (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
11:24:58 <johnjaye> what's the correct way to update cabal to 3.0+?
11:25:06 <[exa]> no one really knows how brains listen to that
11:25:08 <mechano> because its just a binary sequence?
11:25:19 <johnjaye> this ubuntu pc apparently only has 2.x in the repos
11:25:21 <[exa]> johnjaye: I just downloaded the new cabal binary and put it in $PATH...
11:25:39 <johnjaye> from like the git release page or?
11:25:51 <[exa]> johnjaye: chances are you might be better off with a ghc+cabal installed by `ghcup` instead of the ones from ubuntu/debian repositories
11:26:10 <__monty__> [exa]: Isn't Haskell's layout grammar actually case-sensitive?
11:26:17 incertia joins (~incertia@24.42.229.53)
11:26:20 <__monty__> Not case, context >.<
11:26:27 × romesrf quits (~romes@44.190.189.46.rev.vodafone.pt) (Ping timeout: 256 seconds)
11:26:42 merijn joins (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
11:26:59 <johnjaye> do i need to update cabal? it gave me a message about v1/v2 deprecation but
11:27:05 <mechano> [exa] yeah, well, i think the *main thing* is this idea of addaptive classfiers that become context aware, becoming sensitized by recent observations. basically you end up with some idea of "knowing what to expect" and this entering into the classification process. hence repitition in music is a kind of neuroscientifically understandable phenomina.
11:27:05 <mechano> (now *thats* offtopic!)
11:27:10 <johnjaye> it seems it's updating
11:27:10 <[exa]> johnjaye: the repository ones are kept for compatibility and ubuntu, for development it's better to just install your own :]
11:27:25 <johnjaye> ok
11:28:02 <[exa]> johnjaye: anyway the v2 should be okay for some time, you might be able to find v3.x in .deb somewhere (I guess debian testing/unstable repos?), but generally I'd really recommend to just remove system cabal+ghc and go with ghcup
11:28:04 <johnjaye> specifically i tried to run ministg and got the error [__1] unknown package: monads-tf (dependency of ministg)
11:28:46 × perrierjouet quits (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.4)
11:28:53 <mechano> the point being just that repitition & variation as a grammer for drumpattens is kind of rationalizable. but i still cant understand how that idea carries over to haskell, about what programs we can expect, and how this governs the language we end up using
11:29:36 sheb joins (~sheb@31.223.228.71)
11:29:43 <mechano> but i suppose most languages dont even have functions as first class citizens, so i guess they are way behind
11:29:56 <mechano> i wonder how impactful all of this stuff is
11:30:04 <mechano>  /important
11:30:04 <[exa]> mechano: spoiler: the idea doesn't really carry easily to haskell. If you are trying to determine how humans perceive the haskell programs and why it is nice for them, you'll need to go super deep to neuroscience and you might have like 20 years of work to do, likely getting 2 or 3 PhDs in the process :D
11:30:33 <mechano> huh, then i might be able to describe it nicely
11:31:00 <mechano> without resorting to category theoretic string theory constructions!
11:31:14 <mechano> *muhaha* - ok im offski
11:31:17 <[exa]> there might be some work done on that topic, try going to scholar.google.com and find a few papers
11:31:21 × mechano quits (~mechano@cpc101088-sgyl37-2-0-cust22.18-2.cable.virginm.net) (Quit: Connection closed)
11:31:58 <[exa]> johnjaye: `cabal update` didn't fix that? (that downloads a new database of packages)
11:32:00 <johnjaye> er... so ghcup just downloads binaries?
11:32:06 <johnjaye> [exa]: correct
11:32:33 <johnjaye> it printed Downloading the latest package list from hackage.haskell.org then returned
11:33:06 <[exa]> if it still fails then, I'd expect some realistic versioning problems that might be fixed with newer cabal, but I don't know much of the packages, really guessing now
11:33:31 <[exa]> ghcup is kinda like rustup, it downloads you a working environment, puts everything in the $PATH right, and provides an easy tool to get newer versions of the tools
11:33:42 <johnjaye> you know as much as i do.
11:33:44 <johnjaye> https://hackage.haskell.org/package/ministg
11:34:41 <[exa]> perhaps try to pastebin the whole error message
11:34:51 <[exa]> someone here could recognize the problem
11:35:02 [exa] -> afk
11:35:13 <johnjaye> https://bpa.st/4BMQ
11:35:19 <johnjaye> yup thanks
11:35:34 <johnjaye> this is ubuntu 20.04 so i'm surprised it's that out of date sof ast
11:36:57 Morrow_ joins (~Morrow@bzq-110-168-31-106.red.bezeqint.net)
11:40:42 romesrf joins (~romes@44.190.189.46.rev.vodafone.pt)
11:40:48 × Morrow quits (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 256 seconds)
11:41:33 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
11:41:52 × juhp quits (~juhp@128.106.188.82) (Quit: juhp)
11:42:37 × merijn quits (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds)
11:42:53 × alt-romes quits (~romes@44.190.189.46.rev.vodafone.pt) (Ping timeout: 256 seconds)
11:44:11 Morrow joins (~Morrow@bzq-110-168-31-106.red.bezeqint.net)
11:47:57 × Morrow_ quits (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 240 seconds)
11:48:09 merijn joins (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
11:49:48 fef joins (~thedawn@user/thedawn)
11:52:56 Morrow_ joins (~Morrow@bzq-110-168-31-106.red.bezeqint.net)
11:53:36 × Morrow quits (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Read error: Connection reset by peer)
11:54:18 Morrow joins (~Morrow@bzq-110-168-31-106.red.bezeqint.net)
11:54:50 burnsidesLlama joins (~burnsides@dhcp168-027.wadham.ox.ac.uk)
11:54:54 <byorgey> Does the Hackage Matrix Builder website work for anyone else? e.g. https://matrix.hackage.haskell.org/#/package/disco when I visit it, it's just blank.
11:55:21 × merijn quits (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
11:55:31 <__monty__> The HTML has an empty body for me too.
11:56:11 merijn joins (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
11:56:57 × Morrow_ quits (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 240 seconds)
11:57:04 <__monty__> johnjaye: Hmm, and this is after running cabal update?
11:58:12 <johnjaye> yes. ghcup finished and i'm using that instead
11:58:41 <johnjaye> with that it compiled a bunch of things
11:59:21 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
11:59:21 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
11:59:21 wroathe joins (~wroathe@user/wroathe)
11:59:24 <johnjaye> hrm. ok
11:59:30 <johnjaye> so the final result is in... ./dist-newstyle/build/x86_64-linux/ghc-8.10.7/ministg-0.3/x/ministg/build/ministg/ministg
11:59:35 <johnjaye> is that... normal?
12:04:16 <c_wraith> yes
12:04:25 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds)
12:04:25 × johnjaye quits (~pi@173.209.65.233) (Ping timeout: 256 seconds)
12:04:27 <c_wraith> you aren't supposed to ever type that out :)
12:04:37 <Clint> he pinged out, he was so upset
12:06:10 × merijn quits (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 250 seconds)
12:07:34 merijn joins (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
12:08:34 ncopa3 joins (~ncopa@gbr2-dev1.alpinelinux.org)
12:15:11 × vglfr quits (~vglfr@46.96.174.179) (Ping timeout: 256 seconds)
12:17:33 × ncopa3 quits (~ncopa@gbr2-dev1.alpinelinux.org) (Quit: Alpine Linux, the security-oriented, lightweight Linux distribution)
12:17:57 ncopa3 joins (~ncopa@gbr2-dev1.alpinelinux.org)
12:22:37 × deadmarshal quits (~deadmarsh@95.38.113.215) (Ping timeout: 240 seconds)
12:23:46 × dut quits (~dut@user/dut) (Quit: Leaving)
12:26:07 deadmarshal joins (~deadmarsh@95.38.113.215)
12:28:59 <geekosaur> byorgey, matrix builder is dead, nobody knows how to resurrect it
12:29:57 <geekosaur> I asked about it and got pointed to a big pile of hvr code that I'd have to mindmeld with to understand :/
12:34:26 perrierjouet joins (~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
12:37:29 <maerwald[m]> xD
12:38:10 vglfr joins (~vglfr@46.96.174.179)
12:38:28 × Morrow quits (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Read error: Connection reset by peer)
12:38:34 Morrow_ joins (~Morrow@bzq-110-168-31-106.red.bezeqint.net)
12:39:04 Morrow joins (~Morrow@bzq-110-168-31-106.red.bezeqint.net)
12:40:03 × nunggu quits (~q@user/nunggu) (Ping timeout: 276 seconds)
12:40:38 × Codaraxis_ quits (~Codaraxis@user/codaraxis) (Quit: Leaving)
12:41:32 nunggu joins (~q@user/nunggu)
12:42:57 × michalz quits (~michalz@185.246.204.43) (Ping timeout: 256 seconds)
12:43:13 gehmehgeh joins (~user@user/gehmehgeh)
12:43:34 × Morrow_ quits (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 268 seconds)
12:43:49 michalz joins (~michalz@185.246.204.58)
12:48:30 × nunggu quits (~q@user/nunggu) (Ping timeout: 276 seconds)
12:48:30 × LiaoTao quits (~LiaoTao@gateway/tor-sasl/liaotao) (Ping timeout: 276 seconds)
12:51:45 × wyrd quits (~wyrd@gateway/tor-sasl/wyrd) (Ping timeout: 276 seconds)
12:51:57 CiaoSen joins (~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
12:56:31 × max22- quits (~maxime@lfbn-ren-1-1026-62.w92-139.abo.wanadoo.fr) (Ping timeout: 268 seconds)
12:56:34 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
12:56:52 xb0o2 joins (~xb0o2@user/xb0o2)
12:59:41 yauhsien_ joins (~yauhsien@61-231-62-246.dynamic-ip.hinet.net)
13:04:29 × yauhsien_ quits (~yauhsien@61-231-62-246.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
13:05:12 nunggu joins (~q@user/nunggu)
13:10:58 fendor_ joins (~fendor@178.115.77.166.wireless.dyn.drei.com)
13:11:17 × incertia quits (~incertia@24.42.229.53) (Read error: Connection reset by peer)
13:13:33 × fendor quits (~fendor@178.165.192.6.wireless.dyn.drei.com) (Ping timeout: 256 seconds)
13:19:16 ec joins (~ec@gateway/tor-sasl/ec)
13:19:36 × ec quits (~ec@gateway/tor-sasl/ec) (Client Quit)
13:23:39 × Morrow quits (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 268 seconds)
13:24:48 geranim0 joins (~geranim0@modemcable242.171-178-173.mc.videotron.ca)
13:26:27 justsomeguy joins (~justsomeg@user/justsomeguy)
13:27:48 stevenxl joins (~stevenxl@c-73-72-2-81.hsd1.il.comcast.net)
13:29:04 xkuru joins (~xkuru@user/xkuru)
13:32:03 Morrow joins (~Morrow@bzq-110-168-31-106.red.bezeqint.net)
13:32:14 cosimone joins (~user@93-47-230-23.ip115.fastwebnet.it)
13:39:51 ProfSimm joins (~ProfSimm@87.227.196.109)
13:42:37 × alp quits (~alp@user/alp) (Ping timeout: 240 seconds)
13:43:17 max22- joins (~maxime@2a01cb088335980025090258985cbdb2.ipv6.abo.wanadoo.fr)
13:46:23 × cosimone quits (~user@93-47-230-23.ip115.fastwebnet.it) (Read error: Connection reset by peer)
13:47:24 slack1256 joins (~slack1256@191.125.227.213)
13:51:37 × cfricke quits (~cfricke@user/cfricke) (Ping timeout: 240 seconds)
13:52:08 cosimone joins (~user@93-47-230-23.ip115.fastwebnet.it)
13:52:25 incertia joins (~incertia@207.98.176.56)
13:52:27 alp joins (~alp@user/alp)
13:54:51 hrdl parts (~hrdl@mail.hrdl.eu) ()
13:58:48 ksqsf joins (~user@2001:da8:d800:611:7915:1763:796:9db6)
14:00:19 × Guest5225 quits (~Guest52@80-100-97-100.ip.xs4all.nl) (Quit: Connection closed)
14:00:22 <merijn> after much study I think the solution to my problem is to use a Bounding Volume Hierarchy. Sadly, finding a good explanation of how to construct those is hard to find. I don't suppose anyone here knows a good introduction? :p
14:00:35 Guest5261 joins (~Guest52@80-100-97-100.ip.xs4all.nl)
14:00:45 <[exa]> merijn: what was the problem btw?
14:02:20 <merijn> [exa]: I have a large volume partitioned into sub-volumes (hypercuboids?) where each sub-volume has a corresponding value, the problem is: Given a point what is the value associated with the subvolume the point falls in
14:03:23 × cosimone quits (~user@93-47-230-23.ip115.fastwebnet.it) (Remote host closed the connection)
14:03:30 <[exa]> there's no hierarchy in the subvolumes right?
14:03:46 <c_wraith> Is a bounding volume hierarchy a generalization of quadtree/octree/etc?
14:03:48 <merijn> [exa]: There is no overlap no, so not really
14:03:54 <merijn> c_wraith: Not quite
14:04:05 <merijn> c_wraith: kd-trees are a generalisation of those
14:04:35 <[exa]> everything is axis aligned?
14:04:51 <merijn> c_wraith: But making those handle dense cases is tricky
14:04:52 <[exa]> dimensionality is ~5, ~20, or greater?
14:05:15 <merijn> [exa]: Probably ~5 and only (hyper)cuboids, so axis aligned, yeah
14:05:33 cosimone joins (~user@93-47-230-23.ip115.fastwebnet.it)
14:05:34 <[exa]> then some kind of R-trees should work
14:05:49 <c_wraith> Heck, with that much structure you could just do a binary search on each axis
14:05:51 <merijn> c_wraith: Effectively BVH are trees where every node is marked with the bounding volume of its sub-nodes
14:06:02 <merijn> c_wraith: I'm not sure you can?
14:06:07 <merijn> c_wraith: How would that work?
14:06:13 <[exa]> merijn: how many volumes do you have there btw?
14:06:43 <merijn> [exa]: Common case: Very little (tens-hundreds), theoretical worst case: millions
14:07:15 <merijn> c_wraith: What would you binary search on?
14:07:16 <[exa]> I'd throw it to a GPU and just bruteforce it
14:07:24 <[exa]> even for millions it's like in 1 click
14:07:44 n3rdy1 joins (~n3rdy1@2600:1700:4570:3480::41)
14:08:34 <c_wraith> I mean, it's not maximally efficient, but it's simple. search over a sorted list of bounds in each dimension, intersect the results. I suppose that could be bad if the active set is changing a lot.
14:09:01 slowButPresent joins (~slowButPr@user/slowbutpresent)
14:09:03 <[exa]> in the other case I'd go with some variant of R tree constructed along simple splitting planes
14:09:14 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Quit: ChaiTRex)
14:09:49 <[exa]> the chances you hit a good binary split in a few tries is quite high usually
14:09:54 <[exa]> *are
14:10:04 ChaiTRex joins (~ChaiTRex@user/chaitrex)
14:10:09 <[exa]> unless your data is pathological, at which point it is sometimes better to just subdivide the data
14:11:17 × romesrf quits (~romes@44.190.189.46.rev.vodafone.pt) (Quit: WeeChat 3.4)
14:14:09 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
14:15:53 × deadmarshal quits (~deadmarsh@95.38.113.215) (Ping timeout: 256 seconds)
14:17:03 × xkuru quits (~xkuru@user/xkuru) (Read error: Connection reset by peer)
14:20:41 xkuru joins (~xkuru@user/xkuru)
14:21:18 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
14:28:17 × qrpnxz quits (abc4f95c31@user/qrpnxz) (Quit: Gateway shutdown)
14:28:43 deadmarshal joins (~deadmarsh@95.38.113.215)
14:30:15 × max22- quits (~maxime@2a01cb088335980025090258985cbdb2.ipv6.abo.wanadoo.fr) (Ping timeout: 268 seconds)
14:32:16 × justsomeguy quits (~justsomeg@user/justsomeguy) (Quit: WeeChat 3.3)
14:32:45 allbery_b joins (~geekosaur@xmonad/geekosaur)
14:32:45 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b)))
14:32:47 mcgroin joins (~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr)
14:32:48 allbery_b is now known as geekosaur
14:38:05 LiaoTao joins (~LiaoTao@gateway/tor-sasl/liaotao)
14:41:59 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
14:41:59 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
14:41:59 wroathe joins (~wroathe@user/wroathe)
14:42:10 × phma quits (phma@2001:5b0:211b:b1e8:ef4c:8052:a169:f66a) (Read error: Connection reset by peer)
14:42:11 <merijn> [exa]: R-trees seem to, effectively, be trickier versions of BVHs?
14:42:29 waleee joins (~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4)
14:43:05 phma joins (phma@2001:5b0:211f:5068:5bee:1f6d:8374:247d)
14:43:22 <merijn> [exa]: Additionally I also don't know how to construct R-trees, so that just turns my "what's a good introduction to how to construct a BVH" to "what's a good introduction to constructing an R-tree?"
14:44:08 o-90 joins (~o-90@gateway/tor-sasl/o-90)
14:44:49 <merijn> oh, actually, turns out R-trees are a subset of BVHs :p
14:44:57 <[exa]> R trees are BVHs that allow overlap
14:45:14 <[exa]> or maybe the other way, yeah
14:46:05 <[exa]> re construction method: you'll get a pretty good R tree by just trying random separating planes at each step, and making 1 child from "everything that's wholly on side" and the second child from "everything that's left"
14:46:11 max22- joins (~maxime@2a01cb08833598001513a4ce4dc1d3d2.ipv6.abo.wanadoo.fr)
14:46:24 <[exa]> I'd suggest trying like 5-10 random choices and pick the one that separates best
14:46:42 <[exa]> random trees are really good in average case
14:49:34 rusrushal13 joins (~rusrushal@2409:4056:e03:14be:158d:b825:79a6:6bc)
14:53:31 × o-90 quits (~o-90@gateway/tor-sasl/o-90) (Remote host closed the connection)
14:53:36 × SummerSonw quits (~The_viole@203.77.49.232) (Remote host closed the connection)
14:53:59 SummerSonw joins (~The_viole@203.77.49.232)
14:55:18 Pickchea joins (~private@user/pickchea)
14:55:19 × red-snail quits (~snail@static.151.210.203.116.clients.your-server.de) (Quit: ZNC 1.8.2 - https://znc.in)
14:55:28 × euandreh quits (~euandreh@2804:14c:33:9fe5:9d95:c71:11e4:3e0f) (Quit: WeeChat 3.3)
14:55:41 red-snail joins (~snail@static.151.210.203.116.clients.your-server.de)
14:56:41 × ProfSimm quits (~ProfSimm@87.227.196.109) (Remote host closed the connection)
14:56:57 × n3rdy1 quits (~n3rdy1@2600:1700:4570:3480::41) (Ping timeout: 240 seconds)
14:56:59 ProfSimm joins (~ProfSimm@87.227.196.109)
14:57:14 burnside_ joins (~burnsides@dhcp168-027.wadham.ox.ac.uk)
14:57:15 euandreh joins (~euandreh@2804:14c:33:9fe5:c17:d8ca:f795:73f0)
15:00:39 × burnsidesLlama quits (~burnsides@dhcp168-027.wadham.ox.ac.uk) (Ping timeout: 256 seconds)
15:01:13 × Pickchea quits (~private@user/pickchea) (Ping timeout: 256 seconds)
15:02:50 Pickchea joins (~private@user/pickchea)
15:07:55 × ProfSimm quits (~ProfSimm@87.227.196.109) (Remote host closed the connection)
15:08:13 ProfSimm joins (~ProfSimm@87.227.196.109)
15:08:48 ec joins (~ec@gateway/tor-sasl/ec)
15:10:00 n3rdy1 joins (~n3rdy1@2600:1700:4570:3480:1b88:50f:dae0:9293)
15:10:14 × coot quits (~coot@89-64-85-93.dynamic.chello.pl) (Quit: coot)
15:10:57 × xff0x quits (~xff0x@2001:1a81:52b8:8500:6c95:ecd6:fb54:75ad) (Ping timeout: 240 seconds)
15:11:06 slac94902 joins (~slack1256@186.11.31.133)
15:11:32 <byorgey> geekosaur: ah, sad (re: matrix builder)
15:13:22 × slack1256 quits (~slack1256@191.125.227.213) (Ping timeout: 250 seconds)
15:17:39 × rusrushal13 quits (~rusrushal@2409:4056:e03:14be:158d:b825:79a6:6bc) (Ping timeout: 256 seconds)
15:24:36 Sgeo joins (~Sgeo@user/sgeo)
15:26:29 rusrushal13 joins (~rusrushal@2409:4056:e03:14be:158d:b825:79a6:6bc)
15:26:45 kaph joins (~kaph@net-2-47-208-144.cust.vodafonedsl.it)
15:28:14 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
15:28:58 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 250 seconds)
15:31:34 × ksqsf quits (~user@2001:da8:d800:611:7915:1763:796:9db6) (Ping timeout: 250 seconds)
15:35:24 × SummerSonw quits (~The_viole@203.77.49.232) (Ping timeout: 256 seconds)
15:36:55 × rusrushal13 quits (~rusrushal@2409:4056:e03:14be:158d:b825:79a6:6bc) (Ping timeout: 256 seconds)
15:37:25 × incertia quits (~incertia@207.98.176.56) (Read error: Connection reset by peer)
15:37:32 × vysn quits (~vysn@user/vysn) (Ping timeout: 240 seconds)
15:37:43 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
15:37:43 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
15:37:43 wroathe joins (~wroathe@user/wroathe)
15:37:57 × n3rdy1 quits (~n3rdy1@2600:1700:4570:3480:1b88:50f:dae0:9293) (Ping timeout: 240 seconds)
15:42:16 incertia joins (~incertia@24.42.246.251)
15:42:35 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds)
15:42:48 shapr joins (~user@2601:7c0:c37c:46d0:25fd:6854:a2a7:2f62)
15:42:59 × burnside_ quits (~burnsides@dhcp168-027.wadham.ox.ac.uk) (Remote host closed the connection)
15:43:33 xff0x joins (~xff0x@2001:1a81:52b8:8500:6c95:ecd6:fb54:75ad)
15:43:46 slack1256 joins (~slack1256@191.126.227.213)
15:44:15 × alp quits (~alp@user/alp) (Ping timeout: 268 seconds)
15:45:50 ksqsf joins (~user@2001:da8:d800:611:7915:1763:796:9db6)
15:45:59 × slac94902 quits (~slack1256@186.11.31.133) (Ping timeout: 256 seconds)
15:48:49 × merijn quits (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
15:50:32 × ksqsf quits (~user@2001:da8:d800:611:7915:1763:796:9db6) (Ping timeout: 240 seconds)
15:53:52 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:494b:f936:f65f:424f)
15:57:11 ksqsf joins (~user@2001:da8:d800:611:d47b:4206:e65:5027)
15:57:57 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:494b:f936:f65f:424f) (Ping timeout: 240 seconds)
15:57:57 × Guest5261 quits (~Guest52@80-100-97-100.ip.xs4all.nl) (Ping timeout: 240 seconds)
16:01:54 × ksqsf quits (~user@2001:da8:d800:611:d47b:4206:e65:5027) (Ping timeout: 250 seconds)
16:05:10 × ProfSimm quits (~ProfSimm@87.227.196.109) (Remote host closed the connection)
16:05:12 <hololeap> I just had to patch someone's library for ghc-9.0.2, where this first line gives an error, but this second line works fine. what is the explaination for this?
16:05:36 <hololeap> applyMap = view ∘ mapIso
16:05:42 <hololeap> applyMap m = view $ mapIso m
16:05:54 dyeplexer joins (~dyeplexer@user/dyeplexer)
16:06:10 <[exa]> monomorphism restriction? <- blind shot
16:06:25 <[exa]> the definition of ∘ is the same as of . right?
16:06:36 <hololeap> yes, AFAIK
16:06:47 <[exa]> does the function have an explicit type signature?
16:06:49 <ski> is there any type signature for `applyMap' ?
16:06:55 <[exa]> (if not, try the first variant with the type signature)
16:06:56 ski low fours [exa]
16:07:12 × Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
16:07:19 <geekosaur> simplified subsumption?
16:07:24 Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
16:07:26 <hololeap> https://github.com/mvoidex/text-region/blob/master/src/Data/Text/Region.hs#L81
16:07:41 <maerwald> https://downloads.haskell.org/~ghc/9.0.1/docs/html/users_guide/exts/rank_polymorphism.html#simple-subsumption
16:07:50 <geekosaur> see the 9.0.1 release notes and https://downloads.haskell.org/ghc/9.0.2/docs/html/users_guide/exts/rank_polymorphism.html#simple-subsumption
16:07:51 <maerwald> geekosaur: what I thought
16:08:04 <ski> are any of `Map' or `Region' type synonyms ?
16:08:23 <hololeap> Couldn't match type: forall (p :: * -> * -> *) (f :: * -> *). (Profunctor p, Functor f) => p Region (f Region) -> p Region (f Region) with: (Region -> Const Region Region) -> Region -> Const Region Region
16:08:45 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
16:08:45 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
16:08:45 wroathe joins (~wroathe@user/wroathe)
16:09:40 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:ba7b:1b5c:238c:4447) (Quit: WeeChat 2.8)
16:10:15 <hololeap> Expected: Map -> Getting Region Region Region Actual: Map -> Iso' Region Region
16:12:47 <[exa]> is it just me or is there a dangling ) in the 9.0.1 release notes, in the signature of `g4` ?
16:13:03 <[exa]> or missing (
16:13:05 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
16:13:11 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds)
16:13:19 lavaman joins (~lavaman@98.38.249.169)
16:13:27 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
16:13:49 <ski> [exa] : i think the trailing `) -> Bool' should be removed
16:14:22 <[exa]> very true
16:15:01 ksqsf joins (~user@222.195.66.54)
16:15:03 <[exa]> also "arbitrary-aank" types below
16:15:34 <[exa]> where do I send a patch?
16:16:20 <maerwald> ghc repo? :D
16:19:30 myShoggoth joins (~myShoggot@97-120-67-120.ptld.qwest.net)
16:19:38 <[exa]> `grep aank ghc -r` -> nothing ;_;
16:19:47 <[exa]> maybe it's fixed in master now
16:19:59 × ksqsf quits (~user@222.195.66.54) (Ping timeout: 256 seconds)
16:19:59 merijn joins (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
16:20:41 burnsidesLlama joins (~burnsides@dhcp168-027.wadham.ox.ac.uk)
16:21:03 <maerwald> oh, new alex release, causing new build failures with c2hs/language-c
16:21:06 jakalx parts (~jakalx@base.jakalx.net) (Error from remote client)
16:22:13 <maerwald> https://github.com/simonmar/alex/issues/197
16:22:28 ksqsf joins (~user@2001:da8:d800:611:7c44:28ce:f32f:226)
16:22:52 Guest|28 joins (~Guest|28@136.228.217.112)
16:23:36 × Guest|28 quits (~Guest|28@136.228.217.112) (Client Quit)
16:23:52 <maerwald> I'm starting to believe in stackage snapshots
16:24:37 × merijn quits (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds)
16:24:38 × fef quits (~thedawn@user/thedawn) (Quit: Leaving)
16:24:44 <maerwald> even critical core packages can't maintain PVP expectations
16:24:49 × lagash_ quits (lagash@lagash.shelltalk.net) (Quit: ZNC - https://znc.in)
16:25:05 × burnsidesLlama quits (~burnsides@dhcp168-027.wadham.ox.ac.uk) (Ping timeout: 256 seconds)
16:25:16 lagash joins (lagash@lagash.shelltalk.net)
16:27:02 × ksqsf quits (~user@2001:da8:d800:611:7c44:28ce:f32f:226) (Ping timeout: 240 seconds)
16:31:30 × ezzieyguywuf quits (~Unknown@user/ezzieyguywuf) (Ping timeout: 256 seconds)
16:33:26 ezzieyguywuf joins (~Unknown@user/ezzieyguywuf)
16:34:30 × Jing quits (~hedgehog@240e:390:7c53:a7e1:81fd:e333:1e93:e27e) (Quit: My MacBook has gone to sleep. ZZZzzz…)
16:35:02 × CiaoSen quits (~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
16:36:04 shriekingnoise joins (~shrieking@201.231.16.156)
16:36:54 justJustache is now known as justache
16:38:59 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
16:38:59 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
16:38:59 wroathe joins (~wroathe@user/wroathe)
16:39:36 ksqsf joins (~user@2001:da8:d800:611:2156:d87c:1289:bb62)
16:40:00 × deadmarshal quits (~deadmarsh@95.38.113.215) (Ping timeout: 256 seconds)
16:43:33 Akiva joins (~Akiva@user/Akiva)
16:43:47 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds)
16:43:58 lavaman joins (~lavaman@98.38.249.169)
16:44:48 × ksqsf quits (~user@2001:da8:d800:611:2156:d87c:1289:bb62) (Ping timeout: 250 seconds)
16:45:46 alp joins (~alp@user/alp)
16:46:42 jakalx joins (~jakalx@base.jakalx.net)
16:48:19 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 256 seconds)
16:48:29 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
16:48:30 tzh joins (~tzh@c-24-21-73-154.hsd1.or.comcast.net)
16:52:22 <EvanR> if there's a function emb :: A -> B and for any function f on A's a function h f :: B -> B such that g f (emb x) = emb (f x)... what is that, or is that somehow just automatic and obvious
16:52:36 × vpan quits (~0@212.117.1.172) (Quit: Leaving.)
16:52:42 <EvanR> and does this make A and subtype of B or vice versa
16:52:49 <EvanR> A a*
16:53:10 <EvanR> ... g should be h
16:53:14 <EvanR> I got mixed up
16:53:33 × Pickchea quits (~private@user/pickchea) (Quit: Leaving)
16:55:01 <ski> hm, reminds me of dynamical systems
16:55:23 <EvanR> https://paste.tomsmeding.com/CqElZb7k
16:55:50 <ski> yep, i just conceptualized that commuting diagram
16:56:02 × zer0bitz quits (~zer0bitz@2001:2003:f444:a000:295b:27c3:87b1:2b8f) (Ping timeout: 240 seconds)
16:57:44 burnsidesLlama joins (~burnsides@dhcp168-027.wadham.ox.ac.uk)
16:57:46 ksqsf joins (~user@222.195.66.54)
16:58:53 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
16:59:36 lbseale joins (~ep1ctetus@user/ep1ctetus)
17:00:03 <ski> hm. `emb' induces a partition on `A' (two elements are in the same partition if they map to the same element of `B'). the diagram then claims that `f' must map all elements in a part into a common part, and `h f' must map the `b' of the first part to the `b' of the second part
17:00:24 × remedan quits (~remedan@octo.cafe) (Ping timeout: 256 seconds)
17:01:09 <ski> also, if there's any element of `b' that's not in the image of `emb', then `h f' is free to choose where to send it
17:01:55 × incertia quits (~incertia@24.42.246.251) (Ping timeout: 256 seconds)
17:01:59 <EvanR> this h is kind of tricky then
17:02:29 × Akiva quits (~Akiva@user/Akiva) (Ping timeout: 256 seconds)
17:02:50 <EvanR> it has to obey a law in some case (emb is looking at you) and not others
17:03:04 <ski> hm. so what if we pick an `f' that does not respect the partition induced by `emb' ?
17:03:14 × burnsidesLlama quits (~burnsides@dhcp168-027.wadham.ox.ac.uk) (Ping timeout: 256 seconds)
17:03:33 <ski> i guess we're talking about a situation with an `A', an `B', and an `emb', where there is no such `f'
17:04:09 <EvanR> "any function f on A's" might be the tricky part
17:04:18 <ski> hm, which would imply that `emb' is injective, so that the partition is the discrete/trivial one
17:04:22 incertia joins (~incertia@207.98.242.204)
17:04:43 <ski> hm
17:05:25 remedan joins (~remedan@octo.cafe)
17:05:33 <ski> yea, if every element of `A' is in its own part / equivalence class, then there's no restriction on differering elements (in the same part) having to be mapped into a common part
17:05:34 <EvanR> h is kind of like fmap
17:05:43 <EvanR> isn't it
17:06:14 <ski> so, unless i'm missing something, it seems that like one would be able to prove that `emb' must be injective, for this condition to hold
17:06:36 <EvanR> i didn't follow that, what condition
17:06:37 <ski> (which i guess then justifies using the name `emb', as in "embedding", for it)
17:07:31 <ski> forall f :: A -> A. exists g :: B -> B. g . emb = emb . f
17:07:43 <ski> (the condition you started with)
17:07:57 <EvanR> ah
17:08:36 <EvanR> gnarly
17:09:47 wroathe joins (~wroathe@user/wroathe)
17:09:58 <EvanR> what's the meaning of these g's that do whatever they want with B not in the image of emb
17:11:21 <EvanR> also, if emb is necessarily injective, then I guess that makes A and subset / subtype? of B
17:11:32 <EvanR> ... A a
17:11:41 <ski> yes
17:11:58 <ski> (trying to think of how one might be able to prove injectivity)
17:12:46 × xb0o2 quits (~xb0o2@user/xb0o2) (Quit: Client closed)
17:13:56 <EvanR> well if B = (), it seems hard to be injective xD
17:14:16 <ski> heh, then `A' is a subsingleton, yea
17:14:21 <ski> (aka a proposition)
17:14:42 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 250 seconds)
17:14:59 <EvanR> then g = id and works
17:16:04 xb0o2 joins (~xb0o2@user/xb0o2)
17:16:38 <EvanR> hmm? A could be Int, f any Int function, and B = () and g = id?
17:16:55 <EvanR> what subsingleton u talkin about
17:17:02 × Major_Biscuit quits (~MajorBisc@c-001-024-001.client.tudelft.eduvpn.nl) (Ping timeout: 240 seconds)
17:17:54 darchitect joins (~darchitec@2a00:23c6:3584:df00:7dec:bf13:8fa:748c)
17:17:58 <darchitect> #haskell
17:17:59 <EvanR> there's at most 1 partition, yeah
17:18:08 <darchitect> ?src ($)
17:18:08 <lambdabot> f $ x = f x
17:18:18 <ski> oh, right. with the indiscrete/cotrivial partition (everything in the same part / equivalence class), there's also no restriction
17:18:27 merijn joins (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
17:18:28 × darchitect quits (~darchitec@2a00:23c6:3584:df00:7dec:bf13:8fa:748c) (Client Quit)
17:18:38 ski blinks
17:18:45 geekosaur wonders what that was about
17:19:05 <EvanR> apparently you can use ? to invoke lambdabot
17:19:18 <geekosaur> yep
17:19:25 <geekosaur> some people do so habitually
17:19:29 <maerwald> ??
17:19:31 <ski> EvanR : if `B' is `()', and `emb' injective, then `A' is a subsingleton (subtype of unit)
17:19:37 × ksqsf quits (~user@222.195.66.54) (Ping timeout: 240 seconds)
17:19:49 <maerwald> ?(?)
17:19:55 <EvanR> just to be clear, we can't prove emb is an injection in general right
17:20:08 <geekosaur> @(?)
17:20:11 lavaman joins (~lavaman@98.38.249.169)
17:20:18 <ski> maybeit requires axiom of choice, or proof-by-contradiction, or something ..
17:20:22 <geekosaur> apparently lb ignores some kinds of noise
17:20:32 <ski> (or maybe i was missing something in my information consideration above)
17:20:34 <EvanR> maybe I missed another condition you brought up
17:20:40 <geekosaur> ?info blah
17:20:40 <lambdabot> blah
17:20:45 <maerwald> geekosaur: makes sense, it's been ignoring me for some time xD
17:20:56 <ski> i'm not immediately seeing how you could prove it, constructively, anyway
17:20:59 <monochrom> ?info is auto-corrected to ?undo
17:21:05 <EvanR> didn't I just disprove it?
17:21:08 <EvanR> is what I'm saying
17:21:11 <geekosaur> yes, I know
17:21:33 <ski> EvanR : oh, ah. sorry, yes
17:21:48 <ski> hm
17:21:57 <geekosaur> (I seriously considered adding a line to lb to output when it was doing that, back when I was using lb as a channel logger)
17:22:50 <EvanR> since it seems functor like, you'd expect some "embeddings" to cause loss of info
17:23:02 <EvanR> collision
17:23:19 LukeHoersten joins (~LukeHoers@user/lukehoersten)
17:23:29 <EvanR> I guess embedding is supposed to imply that doesn't happen
17:24:17 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 240 seconds)
17:24:38 <ski> hm, so if we have at least two parts, at least one of them containing at least two elements (iow `emb' being non-injective), then there's an `f' that doesn't respect the partition
17:24:53 <EvanR> it's a functor between two categories of endomorphisms
17:25:07 <ski> so, i guess, either `B' is subsingleton, or `emb' is injective
17:25:28 <ski> (that's presumably a multiplicative / non-constructive disjunction)
17:26:21 <EvanR> what does f respecting the partition mean
17:26:22 <ski> how's it a functor ?
17:26:52 <ski> EvanR : the aforementioned condition
17:27:19 <EvanR> g . emb = emb . f
17:27:23 <ski> (if two elements are in the same part, then `f' must map them into a common part)
17:27:32 <EvanR> oh
17:27:54 <EvanR> yeah so that's what you've been working with the whole time, I see how that is easily not the case
17:28:13 econo joins (uid147250@user/econo)
17:29:47 <ski> emb (f x) = g (emb x) ={ `x',`y' in same part }= g (emb y) = emb (f y)
17:29:54 <ski> ergo, `f x',`f y' in same part
17:32:20 ksqsf joins (~user@222.195.66.54)
17:32:57 × Gurkenglas quits (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) (Ping timeout: 240 seconds)
17:33:36 <EvanR> oh, that's cool. So f has to respect the partition
17:33:56 <EvanR> is that right
17:34:20 <EvanR> I take back my functor thing, I was mixed up
17:34:50 <ski> yes, that's what `g . emb = emb . f' says (and `g' is the part mapping)
17:34:50 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
17:35:40 <EvanR> so the existence of B, emb, and these g's induces dynamical partitions on A...
17:35:45 <EvanR> weird
17:35:59 <ski> `emb' induces the partition
17:36:14 <EvanR> by itself?
17:36:28 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:494b:f936:f65f:424f)
17:36:44 <EvanR> the dynamical partitioning doesn't know about emb
17:36:46 <ski> `x' and `y' are defined to be equivalent (in the same part) iff `emb x = emb y'
17:36:53 <EvanR> the f's
17:37:04 <ski> and the insistance of there being a `g' for every `f' seems to imply that either `B' is subsingleton, or `emb' is injective
17:37:06 × ksqsf quits (~user@222.195.66.54) (Ping timeout: 268 seconds)
17:37:56 <EvanR> I'm trippin, any f :: A -> A results in some kind of dynamic partition, even if it's trivial
17:38:02 <EvanR> orbits
17:38:18 <ski> any `f' describes a dynamical system on `A'
17:38:32 × Morrow quits (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 240 seconds)
17:38:50 <EvanR> f automatically respects those
17:38:59 <ski> and you're claiming that for any dynamical system on `A', there is a dynamical system on `B', with `emb' being the dynamical system morphism between them
17:39:15 <ski> (s/you/your condition/)
17:40:37 <ski> so, we're talking about objects `A',`B' and morphism `emb' such that any dynamical system on `A' induces one on `B', with `emb' a morphism between them
17:41:09 <EvanR> is the g unique
17:41:24 <EvanR> guess not since you could reverse whatever the g system is
17:41:41 <EvanR> or shift it over one
17:41:58 <ski> you had no such condition. if `emb' is not surjective, then there's leeway/choice in where `g' sends "unassigned parts"
17:42:08 <EvanR> oh yeah that
17:42:42 <EvanR> dynamical system morphism, got it
17:42:53 <ski> (although if we're talking about some other category than `Set', considering dynamical systems over that, we could probably have a unique `g' even if `emb' is not epi)
17:44:37 <ski> ("f automatically respects those" -- which ?)
17:44:44 <EvanR> it's own orbits
17:44:52 <EvanR> partitions
17:45:01 <ski> yea, `f . f = f . f'
17:45:33 <ski> well, the orbits aren't the parts induced by `emb'
17:45:34 <EvanR> um, interesting xD
17:45:40 <EvanR> no, the orbits are just there
17:46:33 <ski> anyway, yes, `f' is a morphism from the dynamical system `(A,f)' to itself
17:47:08 <ski> (which `f . f = f . f' verifies)
17:47:42 <EvanR> and if any two morphisms compose, it's a category
17:47:58 <EvanR> with compatible types
17:48:04 <ski> well, i'd not call them morphisms, otherwise :p
17:49:21 <EvanR> does any morphism have 1 to 1 correspondence between orbits
17:49:25 <tomjaguarpaw> Does DerivingVia only make sense for things of kind Type?
17:49:31 zincy_ joins (~zincy@2a00:23c8:970c:4801:f0bc:c4cb:1665:1c67)
17:49:55 <tomjaguarpaw> Could I, for example, implement the MTL instance boilerplate using DerivingVia?
17:50:16 <tomjaguarpaw> The instances of are things of kind (Type -> Type) -> Type -> Type which makes me think not
17:50:31 <tomjaguarpaw> There wouldn't be a suitable Coercible
17:50:51 <awpr> oddly enough Coercible does exist for partially applied type constructors
17:51:40 <tomjaguarpaw> Aha, that sounds useful
17:51:40 <ski> forall DA : DynSys | U DA = A. exists DB : DynSys | U DB = B. exists demb : DA >---> DB. U demb = emb
17:51:48 <ski> something like that, i guess .. hmm
17:51:57 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:494b:f936:f65f:424f) (Remote host closed the connection)
17:52:05 <ski> EvanR : hm, not sure what you mean by that ?
17:52:11 <awpr> > let x :: Coercible m n => m a -> n a; x = coerce in x @Maybe @Maybe
17:52:12 <lambdabot> <hint>:1:53: error:
17:52:12 <lambdabot> Pattern syntax in expression context: x@Maybe
17:52:12 <lambdabot> Did you mean to enable TypeApplications?
17:52:21 <awpr> % let x :: Coercible m n => m a -> n a; x = coerce in x @Maybe @Maybe
17:52:21 <yahb> awpr: ; <interactive>:18:1: error:; * No instance for (Show (Maybe a0 -> Maybe a0)) arising from a use of `print'; (maybe you haven't applied a function to enough arguments?); * In a stmt of an interactive GHCi command: print it
17:52:32 × merijn quits (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
17:53:37 <ski> % let x :: Coercible m n => m a -> n a; x = coerce in x @Maybe @Maybe @Void Nothing
17:53:37 <yahb> ski: Nothing
17:54:07 alexd joins (~nineonine@50.216.62.2)
17:54:33 <awpr> IIRC `Coercible (m :: k -> Type) n` means for all equal type arguments (note: not all coercible arguments), GHC will use it to solve `Coercible (m a) (n a)`. but there's another thing you need if that's to be useful: the instances need to exist, and I don't know off the top of my head whether they do
17:56:02 <awpr> actually this is probably an unnecessary diversion: DerivingVia is used routinely for Monad instances, where the kind is `Type -> Type`. is this case actually any different from that?
17:56:36 × alMalsamo quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 276 seconds)
17:59:28 <EvanR> ski, the source and target dynamical system have the same number of orbits, i.e. their set of orbits are in a 1 to 1 correspondence?
17:59:53 vicfred joins (~vicfred@user/vicfred)
18:00:49 <ski> clearly you can map a DS consisting of two loops, to one consisting of just one (the length of which must then be a common divisor of the lengths of the previous ones)
18:00:50 <EvanR> the morphism doesn't "split" orbits into suborbits, or doe sit
18:01:18 <EvanR> wha
18:01:34 <ski> (that's a non-injective morphism, obviously)
18:02:27 <EvanR> how does the larger loop have a length that is a common divisor of two smaller loops
18:02:35 <ski> if you think of the endofunction as (discrete) time. then if you take one time step, and then map over to the other system, that must be the same as mapping over to the other system, then taking a time step there
18:02:51 <EvanR> yes
18:02:55 × ubert1 quits (~Thunderbi@p200300ecdf09943ef05cebfd8a506150.dip0.t-ipconnect.de) (Remote host closed the connection)
18:03:30 deadmarshal joins (~deadmarsh@95.38.113.215)
18:03:31 <ski> the second system "simulates" the first, there's an "image" of the first, inside the second. this image might be non-singular, might conflate/coalesce different states of the former system, in case the morphism was non-injective
18:03:37 × Henson quits (~kvirc@107-179-133-201.cpe.teksavvy.com) (Ping timeout: 240 seconds)
18:03:40 CiaoSen joins (~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
18:04:10 <ski> larger loop ?
18:04:23 <EvanR> oh now I see
18:04:35 <EvanR> two big loops coalesce into 1 smaller loop
18:04:40 <EvanR> tricky
18:04:46 <ski> if you have a system `C_6 + C_10' (a six-loop and a ten-loop), you can map that to a `C_2' (two-loop)
18:05:08 <EvanR> so the number of orbits stays the same or decreases
18:05:47 <ski> (also, because the endofunctions are not required to be invertible, you can have "hairs"/"dendrites". so a dynamical system is a loop, with such "dendrites" (trees) hanging off it. (an infinite strand is considered a zero-loop))
18:05:49 <EvanR> orbits are non-renewable
18:06:55 <EvanR> almost forgot about not-loops
18:07:07 <ski> well, could you clarify exactly what you mean by an orbit, here ? a maximal subset of elements where any two elements eventually end up the same, after time passing ?
18:07:43 <EvanR> oh, and if f is not invertible, it could "fork when going back in time"
18:07:44 <ski> or maybe you mean a map from `(Nat,succ)' ? (or `(Integer,succ)' ?)
18:07:52 <ski> right, that's the tree branching
18:08:10 <EvanR> I was thinking invertible
18:08:23 <EvanR> an an orbit is a linear thing
18:08:27 <EvanR> sequence
18:08:42 <ski> extending in one direction ? or both ?
18:09:18 <ski> mhm
18:09:24 × LukeHoersten quits (~LukeHoers@user/lukehoersten) (Quit: My MacBook has gone to sleep. ZZZzzz…)
18:09:27 <EvanR> for loops might as well go 1 way, otherwise go back to the start
18:09:38 <EvanR> oops there might not be a start
18:09:51 <EvanR> both ways
18:09:52 <ski> a map from `(Nat,succ)' is a sequence of elements, with a starting-point
18:10:03 <ski> such maps are in bijection with the elements of the DS
18:10:21 <ski> so `(Nat,succ)' plays the role of `()', in this category
18:12:41 <ski> then there's also another DS, `(Nat,pred)' (where `pred 0 = 0'), which acts like a "truth-value object" (aka "subobject classifier"). any subobject (`(S,e)') of a DS `(A,f)' (iow, with a mono from `(S,e)' to `(A,f)) corresponds exactly to a map (the characteristic map) from `(A,f)' to `(Nat,pred)'
18:13:30 <ski> oh, sorry, that should actually be `InfNat' (it also contains an infinity element)
18:13:53 <ski> in `(Nat,pred)', `0' means "true", or "yes, the element is in the sub-DS". `1' means "false now, but true in one time step", and so on. then `inf' (or `fix succ') means "forever false"
18:14:15 <ski> (`pred inf = inf', naturally)
18:14:27 × incertia quits (~incertia@207.98.242.204) (Ping timeout: 256 seconds)
18:14:36 <EvanR> cool
18:14:54 mc47 joins (~mc47@xmonad/TheMC47)
18:15:03 <ski> (well .. that's a bit aside. but it might be nice/fun to ponder)
18:15:12 wroathe joins (~wroathe@user/wroathe)
18:15:14 w1gz_ is now known as w1gz
18:15:21 incertia joins (~incertia@207.98.168.249)
18:15:38 <EvanR> that ended up being a lot richer than my diagram led me to believe
18:15:49 × TimWolla quits (~timwolla@2a01:4f8:150:6153:beef::6667) (Quit: Bye)
18:17:05 Akiva joins (~Akiva@user/Akiva)
18:19:57 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 240 seconds)
18:21:37 TimWolla joins (~timwolla@2a01:4f8:150:6153:beef::6667)
18:21:57 <ski> i'm still wondering if there's a nicer way to think about it, in terms of the underlying functor, or somesuch (like i attempted to formulate it, above)
18:23:58 × max22- quits (~maxime@2a01cb08833598001513a4ce4dc1d3d2.ipv6.abo.wanadoo.fr) (Ping timeout: 268 seconds)
18:25:15 <monochrom> I'm still in set theory. Here is what I found. The image of emb is a singleton, or emb is injective.
18:25:36 <EvanR> really
18:25:40 <ski> yea, i had s/singleton/subsingleton/
18:26:02 <EvanR> why can't it be somewhere in between
18:26:27 <ski> (but, if `B' is empty, then obviously `emb' is injective, so ..)
18:26:27 ksqsf joins (~user@222.195.66.54)
18:26:53 <monochrom> I have a social commentary reading of that, too. The two Pareto points of evolution of society: everyone is part of the same hive mind, or everyone is independent >:)
18:27:04 <ski> hehee :)
18:27:10 zmt00 joins (~zmt00@user/zmt00)
18:27:39 ProfSimm joins (~ProfSimm@176-12-60-137.pon.spectrumnet.bg)
18:30:50 × dyeplexer quits (~dyeplexer@user/dyeplexer) (Remote host closed the connection)
18:31:01 bontaq joins (~user@ool-45779fe5.dyn.optonline.net)
18:31:38 × ksqsf quits (~user@222.195.66.54) (Ping timeout: 256 seconds)
18:32:42 coot joins (~coot@89-64-85-93.dynamic.chello.pl)
18:34:14 <tomjaguarpaw> awpr: I got it to work it seems, thanks!
18:35:02 × raym quits (~raym@user/raym) (Ping timeout: 256 seconds)
18:35:59 raym joins (~raym@user/raym)
18:38:17 × Akiva quits (~Akiva@user/Akiva) (Ping timeout: 240 seconds)
18:39:01 Siv joins (~fuag1@174.127.249.180)
18:39:31 <Siv> I'm having trouble getting a project to build on windows with it requiring unix, but unix not providing a library. I'm using stack
18:39:53 <maerwald> Siv: that's pretty unfortunate
18:40:24 <Siv> is there a work around or do i need to set up mingw32 or somethin' similar
18:41:03 <polyphem> doesnt windows have linux subsystem now ?
18:41:08 <geekosaur> there's a unix-compat library that will work for some things, but you may well need WSL or mingw
18:41:12 <EvanR> somewhere someone is on unix cursing a project that requires windows to build
18:41:15 × ProfSimm quits (~ProfSimm@176-12-60-137.pon.spectrumnet.bg) (Remote host closed the connection)
18:41:32 jgeerds joins (~jgeerds@55d4a547.access.ecotel.net)
18:41:32 <Siv> or a way to tell exactly what is causing the unix dependency? is unix a cross platform library that wraps posix functionality, it kinda looks like it
18:41:34 ProfSimm joins (~ProfSimm@176-12-60-137.pon.spectrumnet.bg)
18:41:43 <Siv> yeah i can try the compat layer, i think its network is isolated though which is a problem
18:42:38 <maerwald> unix package doesn't work on windows
18:43:01 <maerwald> so it's likely that you're trying to build a package that's not supported on windows
18:43:59 <geekosaur> what package is this?
18:44:01 <maerwald> mingw32 is already set up... stack does that automatically
18:44:14 <Siv> is there a way to list what is getting pulled in by what to try to unpack what the conflict is? maybe i can hack in a replacement faster
18:44:17 <geekosaur> yeh, mingw32 only goes so far
18:44:24 <maerwald> Siv: yes... if you use cabal
18:44:40 <Siv> oof, stack was a bad choice then
18:44:41 <Siv> lol
18:45:04 <maerwald> cabal puts resolution into dist-newstyle/cache/plan.json
18:45:06 <Siv> its a project i did but i dev'd on unix and didn't think i was using anything super platform specific
18:45:08 CHUD joins (~CHUD@cpc142034-slou6-2-0-cust488.17-4.cable.virginm.net)
18:45:13 <polyphem> windows too :)
18:45:42 <maerwald> Siv: well, link to the project would help
18:46:11 × ProfSimm quits (~ProfSimm@176-12-60-137.pon.spectrumnet.bg) (Ping timeout: 256 seconds)
18:46:59 <Siv> tis private but i'm just finidng i actually list unix in the dependencies. hmm i wish i remembered why, going to try removing it
18:47:14 <geekosaur> try swapping with unix-compat first
18:47:30 <maerwald> are you writing a HACK?
18:47:31 <geekosaur> if you're lucky that will be good enough
18:48:09 ProfSimm joins (~ProfSimm@176-12-60-137.pon.spectrumnet.bg)
18:48:39 <Siv> no i just rolled this on unix. I was never planning on running it on a windows host. Turns out wsl and docker and exposing all that to the windows host is super non-trivial
18:49:12 Henson joins (~kvirc@107-179-133-201.cpe.teksavvy.com)
18:49:39 <Siv> but maybe eating taking the time to figure that out is the way to go. Its kinda crazy to me that docker on windows has no real option to expose ports to the host
18:49:47 <Siv> s/real/simple/
18:50:02 vysn joins (~vysn@user/vysn)
18:50:20 max22- joins (~maxime@2a01cb0883359800a734b5267d8e6eaf.ipv6.abo.wanadoo.fr)
18:50:26 <Siv> but thats far from a stack problem. unix-compat didn't pan out
18:51:02 <geekosaur> :(
18:52:21 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:494b:f936:f65f:424f)
18:52:49 themc47 joins (~mc47@xmonad/TheMC47)
18:52:52 <Siv> well, i GET to learn more about windows / wsl networking today :P
18:53:12 <Siv> thanks for the suggestions of unix-compat and pointing out this is likely a dead end to try to hack around
18:53:33 × mc47 quits (~mc47@xmonad/TheMC47) (Ping timeout: 256 seconds)
18:53:33 × themc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection)
18:54:00 × Henson quits (~kvirc@107-179-133-201.cpe.teksavvy.com) (Client Quit)
18:54:29 mc47 joins (~mc47@xmonad/TheMC47)
18:56:17 × ph88 quits (~ph88@2a02:8109:9e00:71d0:e821:f261:3387:e512) (Quit: Leaving)
18:56:37 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:494b:f936:f65f:424f) (Ping timeout: 240 seconds)
18:57:07 ksqsf joins (~user@2001:da8:d800:611:9019:cb2c:2b8f:4e39)
18:57:18 tzh_ joins (~tzh@c-24-21-73-154.hsd1.or.comcast.net)
18:57:34 × tzh quits (~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Remote host closed the connection)
19:00:55 lechner joins (~lechner@debian/lechner)
19:01:04 <maerwald> windows WSL2 works great
19:01:44 × ksqsf quits (~user@2001:da8:d800:611:9019:cb2c:2b8f:4e39) (Ping timeout: 250 seconds)
19:04:55 johnw joins (~johnw@2607:f6f0:3004:1:c8b4:50ff:fef8:6bf0)
19:05:32 <Siv> yeah, i'm reading up on it, if you have experience maybe you have some tips. I need to host a postgresql server and some web servers that need to be connected to by my windows host and others on my network. I can allow the ports needed through my firewall, route through my modem, and create a proxy to the wsl2 vm
19:06:01 <maerwald> sounds like you're writing a HACK
19:06:06 <Siv> last time i tried running a postgresql db from wsl2 i was told to sod off for some reason that I cant remember so I'm doing a dry run of that
19:06:16 <maerwald> but networking is one of the few things that doesn't work that well in WSL2, lol
19:06:31 × alp quits (~alp@user/alp) (Ping timeout: 268 seconds)
19:07:02 <Siv> is HACK an acronym or do you mean literal hacking to try to get something odd to work
19:07:29 <Siv> ideally i'd have a 2nd machine on the network i can just run all this crud on but i'm in a dual boot setup
19:08:06 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 276 seconds)
19:09:32 jpds joins (~jpds@gateway/tor-sasl/jpds)
19:11:02 Gurkenglas joins (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de)
19:11:05 roboguy joins (~roboguy@user/roboguy)
19:12:13 <maerwald> Siv: https://stackoverflow.com/questions/61002681/connecting-to-wsl2-server-via-local-network
19:12:30 Neuromancer joins (~Neuromanc@user/neuromancer)
19:14:56 × mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection)
19:15:02 <Siv> yeah, and i jsut got postgresql to run on wsl2 successfully! ok, so if i forgo the nice docker images i prepared and just run everything in wsl2 with a proxy things should be good :D, we'll see in... an hour or so
19:15:09 × max22- quits (~maxime@2a01cb0883359800a734b5267d8e6eaf.ipv6.abo.wanadoo.fr) (Ping timeout: 268 seconds)
19:15:34 mc47 joins (~mc47@xmonad/TheMC47)
19:17:36 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:494b:f936:f65f:424f)
19:21:32 × tafama quits (~tafa@user/tafa) (Quit: ZNC - https://znc.in)
19:21:47 whatif joins (~user@123.123.223.41)
19:22:35 alp joins (~alp@user/alp)
19:23:03 <whatif> why there's no splitOn in String but in Text? why there's readFile and yet no readLines? I need to read the file and replace the '\n' char with "<br>" string, how to appendFile to append data in the beginning not the ending?
19:23:24 <EvanR> fmap lines readFile
19:23:40 tafa joins (~tafa@user/tafa)
19:23:50 <whatif> ok
19:23:50 <dsal> :t fmap lines . readFile
19:23:51 <lambdabot> FilePath -> IO [String]
19:24:37 <EvanR> there's an unfortunate package for splitting lists with like 100 different ways to do it
19:24:39 <maerwald> whatif: https://hackage.haskell.org/package/split-0.2.3.4/docs/Data-List-Split.html#v:splitOn
19:24:55 <EvanR> ^
19:25:02 <dsal> :t fmap (intercalate "<br>\n" . lines) . readFile
19:25:03 <lambdabot> FilePath -> IO [Char]
19:25:20 <whatif> maerwald this isn't came with the standard library
19:25:27 ksqsf joins (~user@2001:da8:d800:611:f824:c8ac:863e:f879)
19:25:33 <maerwald> whatif: yeah, the standard library isn't very good
19:25:35 × ProfSimm quits (~ProfSimm@176-12-60-137.pon.spectrumnet.bg) (Remote host closed the connection)
19:25:39 <dsal> You can only do so much with the standard library.
19:25:40 <whatif> maerwald why splitOn isn't in Data.List?
19:25:42 <EvanR> they couldn't agree on what the best split API would be
19:25:50 <EvanR> so there is the split package
19:25:54 <dsal> whatif: We don't need a standard library that covers every possible use case.
19:25:54 ProfSimm joins (~ProfSimm@176-12-60-137.pon.spectrumnet.bg)
19:26:20 <EvanR> you can also create your own list split with span and break
19:26:23 <EvanR> :t break
19:26:24 <lambdabot> (a -> Bool) -> [a] -> ([a], [a])
19:26:26 <whatif> dsal: but splitOn is so much used than splitAt
19:26:26 <dsal> :t fix
19:26:27 <lambdabot> (a -> a) -> a
19:26:46 <dsal> whatif: In your code perhaps? I don't use it very much at all.
19:27:08 <EvanR> String isn't the greatest option for doing heavy amounts of text processing
19:27:11 <dsal> (and when I do, it's in Text)
19:27:56 × zincy_ quits (~zincy@2a00:23c8:970c:4801:f0bc:c4cb:1665:1c67) (Remote host closed the connection)
19:28:08 <maerwald> dsal: I'm pretty sure the number of splitOn from extras and split package across hackage is massive
19:28:18 × mc47 quits (~mc47@xmonad/TheMC47) (Ping timeout: 256 seconds)
19:28:44 briandaed joins (~briandaed@185.234.208.208.r.toneticgroup.pl)
19:29:05 <whatif> what's the name to do `foldl1 <> ["a","bc"]`?
19:29:21 <dsal> fold
19:29:30 <dsal> > fold ["a", "bc"]
19:29:31 <lambdabot> "abc"
19:29:32 <EvanR> > join ["a","bc"] -- xD
19:29:34 <lambdabot> "abc"
19:29:52 <EvanR> > concat ["a","bc"]
19:29:53 <lambdabot> "abc"
19:29:54 <whatif> why don't name it "reduce"?
19:29:54 × ksqsf quits (~user@2001:da8:d800:611:f824:c8ac:863e:f879) (Ping timeout: 250 seconds)
19:30:01 <dsal> Why would it be named reduce?
19:30:13 <EvanR> flatten, which is what join really means
19:30:20 alexd parts (~nineonine@50.216.62.2) (Leaving...)
19:30:20 <whatif> since lisp and other language did it
19:30:23 × CHUD quits (~CHUD@cpc142034-slou6-2-0-cust488.17-4.cable.virginm.net) (Ping timeout: 256 seconds)
19:30:38 <EvanR> reduce doesn't always
19:30:47 <EvanR> i.e. scanl
19:30:54 <ski> `reduce' takes a callback, `concat' doesn't
19:31:10 <maerwald> yeah, this isn't npm
19:31:12 <geekosaur> join is generalized concat
19:31:19 <geekosaur> :t join
19:31:20 <lambdabot> Monad m => m (m a) -> m a
19:31:33 <ski> @type mconcat
19:31:33 <geekosaur> % :t join @[]
19:31:33 <yahb> geekosaur: [[a]] -> [a]
19:31:34 <lambdabot> Monoid a => [a] -> a
19:31:37 <ski> @type Data.Semigroup.sconcat
19:31:38 <lambdabot> Semigroup a => NonEmpty a -> a
19:33:00 aliosablack joins (~chomwitt@ppp-94-67-1-27.home.otenet.gr)
19:33:10 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:494b:f936:f65f:424f) (Remote host closed the connection)
19:33:43 <whatif> string is [Char] so ["a"...] would be [[Char]],so join can get [Char] which is String, neat
19:34:20 <ski> yea, it wasn't totally clear if the strings were just an example, or if it was important that you had a list of lists
19:34:57 × chomwitt quits (~chomwitt@athedsl-15695.home.otenet.gr) (Ping timeout: 240 seconds)
19:35:21 <whatif> appendFile, how to insert at the beginning?
19:35:30 <ski> (also, since you asked about `foldl1 (<>)' (and not about `foldl1' itself), "reduce" sounded inappropriate, rather it being applied to some specific callback could be more similar)
19:35:34 <whatif> insertFile?
19:36:46 <whatif> ski: could `foldl1 <>` == join?
19:36:54 <geekosaur> there's no good way to do that, even outside of haskell
19:37:16 <geekosaur> rename file to file.old, write new content, append old file to new?
19:37:36 <ski> whatif : are you talking about `join :: [[a]] -> [a]' (iow `concat'), or the more general (monadic) meaning of `join' ?
19:37:38 <whatif> oh, no, if different m
19:37:56 <EvanR> if the OS supported comprehending any file in reverse, maybe it could be done nicely
19:37:59 <whatif> ski: never mind
19:38:06 <ski> ok
19:38:23 <ski> (anyway, `foldl1' doesn't work on empty list ..)
19:38:31 <whatif> in list they're equal, not on others
19:38:47 <EvanR> efficiently reverse the file, write your data in reverse, then efficiently reverse that file again
19:38:58 <whatif> @hoogle insertFile
19:38:58 <lambdabot> No results found
19:39:08 <whatif> insertFile, could we have a insertFile?
19:39:26 <EvanR> files don't support efficient insert
19:39:29 <EvanR> in general
19:39:43 <whatif> I mean insert the data in the beginning of the file
19:39:48 <EvanR> nor that
19:39:51 <geekosaur> yes, files do not support that
19:39:57 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
19:40:18 <whatif> not others language support that?
19:40:35 <geekosaur> [21 19:36:54] <geekosaur> there's no good way to do that, even outside of haskell
19:40:46 <geekosaur> has nothing to do with haskell. *files* do not support that
19:41:17 <whatif> but I did a lot opening my file and type something at the beginning
19:41:31 <geekosaur> editors can do it by rewriting the whole file
19:41:32 <[exa]> whatif: you were deceived by your userfriendly editor!
19:41:36 <monochrom> In an editor? That's just RAM.
19:41:42 <geekosaur> which is the only way to do it
19:41:57 <monochrom> Noticely nicely that if you don't hit "save" nothing happens to the file.
19:42:04 <geekosaur> there's no way to just stuff some data at the start of a file without rewriting the whole file
19:42:33 <whatif> [exa]: we can do readFile and writeFile to do insertFile
19:42:40 <[exa]> yeah
19:42:47 <monochrom> And if you do hit "save", it's erase-and-start-over-write-it-from-the-very-beginning-to-the-very-end.
19:43:00 <monochrom> Try saving a 2GB file some time.
19:43:02 ec joins (~ec@gateway/tor-sasl/ec)
19:43:16 <[exa]> but that's readfile and writefile, basically makes a new file. If your file is sufficiently big, it's gonna fail
19:43:27 <whatif> monochrom: 2GB file, with editors, it's slow?
19:43:35 <monochrom> You haven't tried?
19:43:58 <whatif> monochrom: my laptop only has 4GB RAM
19:44:11 <whatif> open a 2GB file is too hard to my laptop
19:44:24 <whatif> if I have a 16GB RAM, may I try it
19:44:42 <geekosaur> still slow
19:44:49 <geekosaur> editors don't like files that large
19:45:10 <EvanR> opening the file isn't the problem, it's inserting stuff at the beginning
19:45:13 <whatif> which editor can edit a 2GB file
19:45:14 <EvanR> and saving
19:45:35 <monochrom> Also the word "open" becomes double-speak at this point.
19:45:52 <monochrom> The OS-level "open file" is not the editor-level "open file".
19:46:22 <monochrom> In particular, editor-level "open" means OS-level open, read, close.
19:46:30 <EvanR> oof
19:47:05 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
19:47:06 <geekosaur> and save is open, write entire file, close
19:47:13 <monochrom> At some point, as a programmer, you are supposed to understand the following much more than average users:
19:47:26 azimut joins (~azimut@gateway/tor-sasl/azimut)
19:47:35 <monochrom> 1. The computer system has many layers of abstractions. 2. Every layer lies.
19:48:48 CHUD joins (~CHUD@cpc142034-slou6-2-0-cust488.17-4.cable.virginm.net)
19:48:56 merijn joins (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
19:50:50 × zmt00 quits (~zmt00@user/zmt00) (Quit: Leaving)
19:51:22 Erutuon joins (~Erutuon@user/erutuon)
19:52:24 ksqsf joins (~user@2001:da8:d800:611:bc8a:94b2:c042:3f5f)
19:53:03 × CHUD quits (~CHUD@cpc142034-slou6-2-0-cust488.17-4.cable.virginm.net) (Ping timeout: 256 seconds)
19:53:04 × ProfSimm quits (~ProfSimm@176-12-60-137.pon.spectrumnet.bg) (Remote host closed the connection)
19:53:24 ProfSimm joins (~ProfSimm@176-12-60-137.pon.spectrumnet.bg)
19:54:44 <whatif> how to solve file locking? I readFile then writeFile on the same file?
19:55:01 <whatif> is there a @hoogle closeFile
19:55:03 <monochrom> OS-depending.
19:55:09 <monochrom> err, OS-dependent.
19:55:13 <whatif> monochrom: debian
19:56:00 <geekosaur> readFile and writeFile are whole-file operations and you should not have to explicitly close, although you may have to force data to avoid laziness holding it open
19:56:03 <monochrom> then read up on "unix advisory file locking"
19:56:41 <EvanR> readFile, complete your read (tricky if you used the lazy readFile), then writeFile
19:57:05 × coot quits (~coot@89-64-85-93.dynamic.chello.pl) (Remote host closed the connection)
19:57:12 × ksqsf quits (~user@2001:da8:d800:611:bc8a:94b2:c042:3f5f) (Ping timeout: 250 seconds)
19:57:20 <whatif> EvanR which one readFile isn't lazy?
19:57:30 coot joins (~coot@2a02:a310:e03f:8500:5cc8:47c:8ec0:b827)
19:57:40 <EvanR> you don't want a strict readFile for [Char]
19:57:48 <EvanR> use Data.ByteString or Text
19:58:09 × ProfSimm quits (~ProfSimm@176-12-60-137.pon.spectrumnet.bg) (Ping timeout: 256 seconds)
19:58:32 <monochrom> System.Posix.IO has bindings to the locking operations. Comes with GHC on unixes.
19:59:07 <whatif> EvanR the Internal one or the Lazy one?
19:59:59 ProfSimm joins (~ProfSimm@176-12-60-137.pon.spectrumnet.bg)
20:00:34 lavaman joins (~lavaman@98.38.249.169)
20:00:35 <geekosaur> monochrom, I think the "locking" they're talking about is the RTS Handle locking, in this case meaning readFile is lazy and so writeFile fails with a "handle locked" error
20:00:54 <monochrom> Oh that.
20:01:14 <c_wraith> is that new?
20:01:22 burnsidesLlama joins (~burnsides@dhcp168-027.wadham.ox.ac.uk)
20:01:29 Morrow joins (~Morrow@bzq-110-168-31-106.red.bezeqint.net)
20:01:39 <c_wraith> I remember the combination of readFile and writeFile being happy to just lose all your data for you
20:01:57 <geekosaur> it was fixed relatively recently I think
20:02:17 <geekosaur> I recall a fair amount of complaining when people started getting the "locked" errors
20:02:21 <monochrom> I just don't do that. I don't even do that in shell scripts.
20:02:33 <geekosaur> but the Haskell standard requires it specifically because it can lose data otherwise
20:02:33 <monochrom> Always write to a temp file then mv.
20:02:34 <c_wraith> yeah, it causes data loss even in shell scripts
20:03:22 <monochrom> Hell I even wrote a shell script for this "atomic destructive update" design pattern :)
20:03:27 <c_wraith> writing to a temp file then moving isn't perfect either. the ext filesystems can still lose your data on a power loss because it syncs data and metadata separately
20:03:50 <monochrom> I invested in a UPS for that :)
20:04:02 <monochrom> either that, or a laptop battery
20:04:04 <c_wraith> you need write/fdatasync/rename
20:04:12 <c_wraith> then you at least have atomicity
20:04:23 × ProfSimm quits (~ProfSimm@176-12-60-137.pon.spectrumnet.bg) (Ping timeout: 256 seconds)
20:04:24 <monochrom> Ah nice, thanks, good to know.
20:05:34 <monochrom> fdatasink >:)
20:05:37 <zzz> what's the best way to force let bindings to be exaustive?
20:06:05 × burnsidesLlama quits (~burnsides@dhcp168-027.wadham.ox.ac.uk) (Ping timeout: 256 seconds)
20:06:34 <c_wraith> let bindings don't branch in the pattern match portion - only if there are also guards.
20:06:43 <c_wraith> So exhaustiveness checks don't apply.
20:06:56 <c_wraith> If you need to match against multiple patterns, you need a case
20:06:58 <monochrom> Oh maybe pattern guards then heh
20:07:04 <ski> (and the guards "face inwards", not outwards)
20:07:25 <zzz> ski: what does it mean?
20:07:32 <whatif> EvanR Data.ByteString.readFile and writeFile work
20:07:46 <monochrom> But really "exhaustive pattern binding" is an oxymoron.
20:08:05 <c_wraith> whatif: those have different semantics - readFile actually reads then closes the entire file before it returns.
20:08:12 × roboguy quits (~roboguy@user/roboguy) ()
20:08:21 × briandaed quits (~briandaed@185.234.208.208.r.toneticgroup.pl) (Quit: Lost terminal)
20:08:30 burnsidesLlama joins (~burnsides@dhcp168-027.wadham.ox.ac.uk)
20:09:10 <monochrom> If your file has 2GB, Data.ByteString.readFile takes 2GB RAM. I thought you were afraid of that.
20:09:12 <zzz> ski: i think i see what you mean
20:09:23 <whatif> c_wraith: then why System.IO readFile and writeFile locking?
20:09:28 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:494b:f936:f65f:424f)
20:09:46 <ski> in a non-function `let'/`where' binding, `<pat> = <expr>' or `<pat> | <guard> = <expr> | ...', there's still only one pattern that you're matching against, not multiple ones. the guards only serve to determine which value will be matched with the pattern, not to select a branch after matching the pattern
20:09:46 <monochrom> Also let me scaremonger you further about killing cache locality...
20:09:49 <whatif> monochrom: I don't have that big file, just some text file
20:10:03 <c_wraith> whatif: because System.IO readFile doesn't read the entire file before it returns. It just opens it. The value it returns hides a bunch of magic for actually reading from the file on demand.
20:10:45 coot_ joins (~coot@2a02:a310:e03f:8500:5cc8:47c:8ec0:b827)
20:10:51 <whatif> c_wraith: then what's its purpose? why it's doing that
20:10:53 <EvanR> System.IO readFile is the "gotcha" at the door to the haskell club
20:10:58 <geekosaur> and this is why you can find yourself still reading the file when you go to write it
20:11:18 <whatif> return immetly after open it?
20:11:22 <geekosaur> lazy I/O is convenient. until it bites your ass, at least
20:11:24 <ski> contrast with function bindings `f <pat> ... = <expr>; ...' or `f <pat> ... | <guard> = <expr> | ...; ...', where the matching on the argument patterns will select a defining equation, and the any associated guards will select a particular branch
20:11:27 × tolt quits (~weechat-h@li219-154.members.linode.com) (Quit: WeeChat 2.9)
20:11:28 <c_wraith> whatif: it does that so that it bounds memory use. Or at least enables you to bound memory use if you are careful.
20:11:34 <ski> zzz : am i making sense ?
20:11:47 <c_wraith> whatif: you can open a 10TB file and only ever use a couple kilobytes of memory
20:12:32 <monochrom> I don't have a 10TB file, my disk is too small :(
20:12:42 <monochrom> Oh! I have /dev/zero :)
20:12:44 <c_wraith> Of course, getting that *right* requires you to know enough that you could use a library with a saner interface...
20:13:00 tolt joins (~weechat-h@li219-154.members.linode.com)
20:13:04 <whatif> c_wraith: in python they would read a certain mount of Bytes of a big file, that's fine too
20:13:37 × Siv quits (~fuag1@174.127.249.180) (Ping timeout: 240 seconds)
20:13:42 <geekosaur> hGet is a thing. or hGetLine.
20:13:53 <geekosaur> actually I think it's hGetBuf?
20:13:53 <c_wraith> if that's what you want to do, write code that does it.
20:13:55 <whatif> monochrom: I only have a 256GB disk
20:14:01 <geekosaur> % :t System.IO.hGetBuf
20:14:02 <yahb> geekosaur: Handle -> Ptr a -> Int -> IO Int
20:14:03 <c_wraith> Don't use readFile
20:14:21 × coot quits (~coot@2a02:a310:e03f:8500:5cc8:47c:8ec0:b827) (Ping timeout: 268 seconds)
20:14:31 <geekosaur> Ptr a? seriously?
20:14:38 <geekosaur> % :t hGet
20:14:39 <yahb> geekosaur: ; <interactive>:1:1: error:; * Variable not in scope: hGet; * Perhaps you meant one of these: `BSL.hGet' (imported from Data.ByteString.Lazy), `BS.hGet' (imported from Data.ByteString)
20:14:48 <c_wraith> you went digging for the primitive, you found the primitive :)
20:14:52 <geekosaur> come to think of it, I guess yes
20:14:54 <ski> @hoogle openFile
20:14:54 <lambdabot> System.IO openFile :: FilePath -> IOMode -> IO Handle
20:14:54 <lambdabot> GHC.IO.FD openFile :: FilePath -> IOMode -> Bool -> IO (FD, IODeviceType)
20:14:54 <lambdabot> GHC.IO.Handle.FD openFile :: FilePath -> IOMode -> IO Handle
20:15:30 <zzz> ski: yes, that's what i thought you meant
20:15:42 ski nods
20:16:23 <whatif> does anyone use scotty? why that author of scotty doesn't provide a login session?
20:16:38 <c_wraith> logging in isn't part of the web.
20:16:46 <c_wraith> scotty is a web server
20:16:54 <EvanR> HTTP AUTH
20:16:56 <whatif> c_wraith: and yesod is a web server?
20:17:06 <c_wraith> no, warp is a web server
20:17:11 <geekosaur> yesod is an application framework
20:17:16 <geekosaur> far moe than a web server
20:17:20 <c_wraith> yesod is an application framework built on top of warp
20:17:21 <whatif> EvanR how to do http auth?
20:17:46 <zzz> it just seems to me it would be useful to have a warning for something like `f x = let Just y = x in y`
20:18:24 <EvanR> don't do http auth
20:18:47 <EvanR> use a horrible canned auth solution
20:18:53 <EvanR> like everyone else
20:19:13 <whatif> EvanR how they do?
20:19:15 <ski> % let Just y = Nothing in y
20:19:15 <yahb> ski: *** Exception: <interactive>:25:5-20: Non-exhaustive patterns in Just y
20:19:27 <polyphem> whatif: ther is scotty-session
20:19:32 <ski> % :set -Wincomplete-uni-patterns
20:19:32 <yahb> ski:
20:19:34 <ski> % let Just y = Nothing in y
20:19:34 <yahb> ski: ; <interactive>:27:5: warning: [-Wincomplete-uni-patterns]; Pattern match(es) are non-exhaustive; In a pattern binding: Patterns not matched: Nothing; *** Exception: <interactive>:27:5-20: Non-exhaustive patterns in Just y
20:19:39 <ski> zzz ^
20:19:49 <whatif> polyphem: is it candidate?
20:19:49 <zzz> oh yay
20:20:00 <c_wraith> ski: that's runtime. There really isn't a compile-time warning for an irrefutable pattern match
20:20:05 ProfSimm joins (~ProfSimm@87.227.196.109)
20:21:11 <geekosaur> incomplete-uni-patterns is a warning
20:21:13 <polyphem> whatif: it provides session functionality , you could build your login on it
20:21:49 <whatif> ok
20:21:55 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
20:21:55 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
20:21:55 wroathe joins (~wroathe@user/wroathe)
20:21:56 <geekosaur> it's separate from full pattern matching because it only applies to things that can't have alternatives (like let-bound values or lambda parameters)
20:22:10 <c_wraith> geekosaur: doesn't seem to trigger for me in ghc 9.2.1
20:22:28 <ski> % let f x = let Just y = x in y
20:22:28 <yahb> ski: ; <interactive>:28:15: warning: [-Wincomplete-uni-patterns]; Pattern match(es) are non-exhaustive; In a pattern binding: Patterns not matched: Nothing
20:22:44 <ski> c_wraith ^ ?
20:22:57 × merijn quits (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds)
20:23:05 × coot_ quits (~coot@2a02:a310:e03f:8500:5cc8:47c:8ec0:b827) (Quit: coot_)
20:23:11 <geekosaur> works for me in 9.2.1
20:23:51 <c_wraith> Oh, it's a ghci thing. It doesn't apply to top-level lets in ghci. they have to be in a function body
20:24:16 <geekosaur> let in ghci is "special", yeh
20:24:20 × gehmehgeh quits (~user@user/gehmehgeh) (Remote host closed the connection)
20:24:28 <c_wraith> my mistake
20:24:29 <geekosaur> recall that used to be the only syntax for binding a value
20:24:59 gehmehgeh joins (~user@user/gehmehgeh)
20:25:00 <c_wraith> yeah, but that used the do block let syntax, not let-in
20:31:10 Tuplanolla joins (~Tuplanoll@91-159-68-166.elisa-laajakaista.fi)
20:32:55 <zzz> why doesn't this throw an exception?: f x = let Just !v = x in const mempty v
20:33:11 roboguy joins (~roboguy@user/roboguy)
20:33:26 <zzz> f $ Just (undefined :: ())
20:33:39 × unyu quits (~pyon@user/pyon) (Quit: WeeChat 3.4)
20:33:46 <ski> > let !(Just v) = Nothing in const () v
20:33:47 <lambdabot> *Exception: <interactive>:3:5-23: Non-exhaustive patterns in Just v
20:34:10 <monochrom> > const 4 undefined
20:34:11 <lambdabot> 4
20:34:14 <monochrom> Because of that.
20:34:35 <ski> that `Just !v' basically acts like `~(Just !v)' (since it's a `let'/`where' binding), so the irrefutable `~' is hiding the `!' (which is useless)
20:34:35 <zzz> shouldn't the !v force the evaluation on undefined?
20:34:43 <zzz> ah
20:34:49 <zzz> let bindings are irrefutable
20:34:51 <zzz> thanks
20:34:56 <ski> np
20:35:10 <monochrom> Perhaps you meant !(Just v)
20:35:35 <zzz> monochrom: that would have the same effect
20:35:47 <ski> no
20:35:51 <zzz> no?
20:35:52 <ski> (see example above)
20:36:20 <ski> if there's an outer `!', then there's no implicit `~' wrapping
20:36:45 <polyphem> whatif: theres also wai-hmac-auth
20:37:00 <zzz> > let f x = let !(Just v) = x in const mempty v in f (Just (undefined :: ())
20:37:01 <lambdabot> <hint>:1:75: error:
20:37:02 <lambdabot> parse error (possibly incorrect indentation or mismatched brackets)
20:37:19 <zzz> > f x = let !(Just v) = x in const mempty v; f (Just (undefined :: ())
20:37:21 <lambdabot> <hint>:1:5: error: parse error on input ‘=’
20:37:24 <ski> > let f x = let !(Just v) = x in const mempty v in f (Just (undefined :: ()))
20:37:25 <lambdabot> ()
20:37:53 <monochrom> OK, perhaps you meant !(Just !v)
20:38:01 <zzz> :)
20:38:05 <ski> ah, if you pass a `Just', then it will match, and `v' will be bound to `undefined'
20:38:11 <ski> > let f x = let !(Just !v) = x in const mempty v in f (Just (undefined :: ()))
20:38:12 <lambdabot> *Exception: Prelude.undefined
20:38:29 <ski> (sorry, i missed your initial `f $ Just ...' thing)
20:39:19 <zzz> understood
20:39:27 <zzz> let bindings are tricky
20:42:55 × incertia quits (~incertia@207.98.168.249) (Ping timeout: 256 seconds)
20:45:25 zmt00 joins (~zmt00@user/zmt00)
20:45:52 briandaed joins (~root@185.234.208.208.r.toneticgroup.pl)
20:48:16 × zmt00 quits (~zmt00@user/zmt00) (Client Quit)
20:48:18 <Sqaure> I believed there was a "both ::(a -> b) -> (a, a) -> (b, b)" in base? Cannot find it now
20:49:01 <EvanR> there is bimap
20:49:03 <EvanR> :t bimap
20:49:04 <lambdabot> Bifunctor p => (a -> b) -> (c -> d) -> p a c -> p b d
20:49:20 <EvanR> :t bimap f f
20:49:21 <lambdabot> (Bifunctor p, Show a, Show c, FromExpr b, FromExpr d) => p a c -> p b d
20:49:22 <Sqaure> gotcha
20:49:37 <EvanR> :t \f -> bimap f f
20:49:38 <lambdabot> Bifunctor p => (a -> d) -> p a a -> p d d
20:49:59 <EvanR> I think it's not in base but in bifunctors
20:50:07 <Hecate> Axman6: I require an explanation at once https://twitter.com/isobelroe/status/1484273468313337856
20:50:29 <Hecate> what the fuck is happening in North Queenland
20:56:28 zmt00 joins (~zmt00@user/zmt00)
20:57:08 × aliosablack quits (~chomwitt@ppp-94-67-1-27.home.otenet.gr) (Quit: Leaving)
20:57:31 chomwitt joins (~chomwitt@2a02:587:dc03:8b00:12c3:7bff:fe6d:d374)
20:58:35 wootehfoot joins (~wootehfoo@user/wootehfoot)
20:59:38 argento joins (~argent0@168-227-96-53.ptr.westnet.com.ar)
21:01:21 Siv joins (~fuag1@174.127.249.180)
21:03:21 <EvanR> not haskell
21:03:57 × alp quits (~alp@user/alp) (Ping timeout: 240 seconds)
21:04:04 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 256 seconds)
21:04:17 <geekosaur> was wondering what that was doing in here
21:04:50 pavonia joins (~user@user/siracusa)
21:05:23 Hawker_ joins (~pi@user/hawker)
21:06:05 × Hawker_ quits (~pi@user/hawker) (Client Quit)
21:06:58 × xff0x quits (~xff0x@2001:1a81:52b8:8500:6c95:ecd6:fb54:75ad) (Ping timeout: 250 seconds)
21:07:06 zebrag joins (~chris@user/zebrag)
21:08:00 xff0x joins (~xff0x@2001:1a81:52b8:8500:732c:1822:8f35:ae7)
21:12:02 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:494b:f936:f65f:424f) (Remote host closed the connection)
21:13:02 × vysn quits (~vysn@user/vysn) (Ping timeout: 240 seconds)
21:14:50 × cosimone quits (~user@93-47-230-23.ip115.fastwebnet.it) (Quit: ERC (IRC client for Emacs 27.1))
21:16:06 johnjaye joins (~pi@173.209.65.233)
21:16:41 timCF joins (~timCF@m91-129-100-224.cust.tele2.ee)
21:19:56 × werneta quits (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 256 seconds)
21:20:02 <timCF> Hello! I'm trying to compile executable with ghc, and doing it inside docker container. Executable compiles fine, but I'm not able to run it oh host system for some reason (it crashes with error "No such file or directory"). I do suspect it's something related to linking, tried to build inside alpine and ubuntu containers - the same result. Host system is ubuntu. Did anybody experienced something similar?
21:21:33 <geekosaur> did it say which file it couldn't find?
21:21:50 werneta joins (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
21:22:12 × dsrt^ quits (~dsrt@207.182.73.202) (Ping timeout: 256 seconds)
21:22:13 × califax quits (~califax@user/califx) (Remote host closed the connection)
21:22:13 <geekosaur> (if it claimed the executable, but it's there, it might be missing the dynamic loader)
21:22:32 califax joins (~califax@user/califx)
21:22:57 <timCF> No, full error looks like "bash: ./build/my-exe: No such file or directory"
21:23:29 <timCF> Executable is definitely there, 14MB size
21:23:57 × briandaed quits (~root@185.234.208.208.r.toneticgroup.pl) (Ping timeout: 240 seconds)
21:24:12 × stevenxl quits (~stevenxl@c-73-72-2-81.hsd1.il.comcast.net) (Quit: leaving)
21:25:25 <timCF> Inside docker container executable actualy runs file
21:25:29 <timCF> * fine
21:25:33 <dsal> It's probably a ld library
21:26:02 <dsal> ldd ./build/my-exe
21:26:07 n3rdy1 joins (~n3rdy1@2600:1700:4570:3480::41)
21:26:08 × _ht quits (~quassel@82-168-34-160.fixed.kpn.net) (Remote host closed the connection)
21:26:15 × sheb quits (~sheb@31.223.228.71) (Quit: Leaving)
21:27:12 <timCF> dsal: interesing, it shows a lot of stuff
21:27:16 <geekosaur> objdump -j .interp -s ./build/myexe
21:27:40 <geekosaur> this should print out a filename, although as a hex+char dump. make sure that file exists
21:27:40 <timCF> "libffi.so.8 => not found" - this is one of the lines
21:27:55 <timCF> it might be an actual issue?
21:28:02 <geekosaur> yes
21:28:21 <geekosaur> sounds like you are missing a bunch of shared objects and possibly the core loader
21:28:34 MajorBiscuit joins (~MajorBisc@86-88-79-148.fixed.kpn.net)
21:29:05 <geekosaur> typically when the file itself is claimed to be missing but is there, it's the loader that is missing. run the objdump command I specified above and see if the named file exists
21:29:47 <geekosaur> on my system it names /lib64/ld-linux-x86-64.so.2
21:30:59 <zzz> Sqaure: join bimap is one of my go to's
21:31:03 <timCF> geekosaur: it gives this output, but honestly I do have no idea what does it mean :)
21:31:07 <zzz> @type join bimap
21:31:07 <lambdabot> Bifunctor p => (c -> d) -> p c c -> p d d
21:31:08 <timCF> geekosaur: https://gist.github.com/21it/80d95734d9e17973c61da465d45ee5c4
21:31:46 <zzz> > join bimap succ (6,8)
21:31:47 <lambdabot> (7,9)
21:32:37 <EvanR> V2 a = V2 !a !a functor is handy
21:32:37 × n3rdy1 quits (~n3rdy1@2600:1700:4570:3480::41) (Ping timeout: 240 seconds)
21:32:40 <geekosaur> timcf, welp. you got a loader form nix somehow
21:33:27 <timCF> yeah, nix is a lot of fun, and it's always working until it's not
21:33:30 <geekosaur> there's a patchelf command you can use to fix it
21:33:56 <geekosaur> https://github.com/NixOS/patchelf
21:34:53 <timCF> geekosaur: thanks a lot, I'll take a look!
21:35:23 <geekosaur> can probabl;y install that via nix if you have nix installed on the host, or arrange to do it in the docker container
21:35:24 <geekosaur> look for the host (not nix) loader, which stands a good chance of being where I said mine was because I run ubuntu
21:35:24 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
21:36:13 × infinity0 quits (~infinity0@occupy.ecodis.net) (Ping timeout: 240 seconds)
21:37:04 geekosaur joins (~geekosaur@xmonad/geekosaur)
21:38:09 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
21:38:24 infinity0 joins (~infinity0@occupy.ecodis.net)
21:40:07 alMalsamo joins (~alMalsamo@gateway/tor-sasl/almalsamo)
21:40:22 <timCF> geekosaur: do you think with this util I'll be able to run on ubuntu executable which was built on alpine image?
21:41:09 <geekosaur> that one is less likely, although I think alpine builds things statically by default so they should work pretty much anywhere
21:43:20 <geekosaur> (sadly if it's also using nix that may be false and you would again need patchelf. and would again have to watch for missing/wrong version shared objects
21:43:46 <geekosaur> )
21:45:34 incertia joins (~incertia@207.98.163.88)
21:46:32 <timCF> I only heard buzz words like musl (used by alpine) and glibc (used by ubuntu) and that there will be some problems related to this. I'll try anyway, because alpine image is much smaller
21:47:47 wyrd joins (~wyrd@gateway/tor-sasl/wyrd)
21:49:13 × ukari quits (~ukari@user/ukari) (Ping timeout: 256 seconds)
21:51:45 <maerwald> there are no problems
21:52:51 <geekosaur> there would be problems going the other way but alpine executable should work fine unless nix builds make them dynamic for some reason
21:53:19 <maerwald> (there are no problem with building static binaries in alpine docker containers)
21:56:35 × Siv quits (~fuag1@174.127.249.180) (Ping timeout: 256 seconds)
21:56:37 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 240 seconds)
21:57:06 × wyrd quits (~wyrd@gateway/tor-sasl/wyrd) (Ping timeout: 276 seconds)
22:02:18 coot joins (~coot@89-64-85-93.dynamic.chello.pl)
22:03:20 ukari joins (~ukari@user/ukari)
22:04:36 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
22:04:36 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
22:04:36 wroathe joins (~wroathe@user/wroathe)
22:06:03 × roboguy quits (~roboguy@user/roboguy) ()
22:08:08 × alphabeta quits (~kilolympu@31.205.200.235) (Remote host closed the connection)
22:08:29 wyrd joins (~wyrd@gateway/tor-sasl/wyrd)
22:09:37 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds)
22:10:22 × deadmarshal quits (~deadmarsh@95.38.113.215) (Ping timeout: 256 seconds)
22:11:43 alphabeta joins (~kilolympu@31.205.200.235)
22:12:23 × fendor_ quits (~fendor@178.115.77.166.wireless.dyn.drei.com) (Remote host closed the connection)
22:12:26 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:494b:f936:f65f:424f)
22:16:37 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:494b:f936:f65f:424f) (Ping timeout: 240 seconds)
22:17:43 alp joins (~alp@user/alp)
22:19:35 merijn joins (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
22:20:30 × stiell quits (~stiell@gateway/tor-sasl/stiell) (Ping timeout: 276 seconds)
22:21:50 max22- joins (~maxime@2a01cb0883359800536f505f6298e408.ipv6.abo.wanadoo.fr)
22:24:55 × bontaq quits (~user@ool-45779fe5.dyn.optonline.net) (Ping timeout: 256 seconds)
22:25:22 stiell joins (~stiell@gateway/tor-sasl/stiell)
22:28:52 Siv joins (~fuag1@174.127.249.180)
22:29:18 × gehmehgeh quits (~user@user/gehmehgeh) (Quit: Leaving)
22:33:35 tommd joins (~tommd@67-42-147-226.ptld.qwest.net)
22:33:58 × coot quits (~coot@89-64-85-93.dynamic.chello.pl) (Quit: coot)
22:44:55 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
22:53:49 × merijn quits (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
22:56:50 boxscape_ joins (~boxscape_@p4ff0b9d5.dip0.t-ipconnect.de)
22:57:10 <boxscape_> can I say in my cabal.project file that hpack should be used for a particular repository to create the cabal file?
22:57:48 × AWizzArd quits (~code@gehrels.uberspace.de) (Changing host)
22:57:48 AWizzArd joins (~code@user/awizzard)
22:58:10 <boxscape_> (because the repository only has a package.yaml file)
23:01:17 × max22- quits (~maxime@2a01cb0883359800536f505f6298e408.ipv6.abo.wanadoo.fr) (Quit: Leaving)
23:02:06 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
23:06:19 <ephemient> as far as I know, only stack has built-in support for hpack (and even then, it's still recommended to check in the .cabal file)
23:06:55 <boxscape_> I was thinking maybe there's a way to run an arbitrary command on a package or something with cabal
23:07:18 <geekosaur> I think the only hook for doing that is a custom Setup.hs
23:07:56 × Cale quits (~cale@cpef48e38ee8583-cm30b7d4b3fc20.cpe.net.cable.rogers.com) (Remote host closed the connection)
23:07:57 <boxscape_> sounds like I won't get around changing files directly in the dependency then
23:08:09 <boxscape_> in which case I'll just add a cabal file
23:08:11 <ephemient> ah, perhaps https://cabal.readthedocs.io/en/latest/cabal-project.html#cfg-field-post-checkout-command
23:08:18 <boxscape_> ah, interesting
23:08:26 <boxscape_> I'll try it, thanks
23:09:54 Cale joins (~cale@cpef48e38ee8583-cm30b7d4b3fc20.cpe.net.cable.rogers.com)
23:10:23 <boxscape_> seems to work! Though for some reason it doesn't build my own program after generating the cabal file for the dependency. I imagine I'll figure it out htough.
23:10:26 × mcgroin quits (~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 256 seconds)
23:11:41 × michalz quits (~michalz@185.246.204.58) (Remote host closed the connection)
23:12:24 mcgroin joins (~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr)
23:12:29 × mcgroin quits (~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Remote host closed the connection)
23:13:05 × Gurkenglas quits (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) (Ping timeout: 256 seconds)
23:13:39 × MajorBiscuit quits (~MajorBisc@86-88-79-148.fixed.kpn.net) (Ping timeout: 256 seconds)
23:14:42 <zzz> if i want to see the type of join applied to an arrow (using TypeApplications), how would i write it?
23:15:38 <geekosaur> % :t join @((->) _)
23:15:38 <yahb> geekosaur: (w -> (w -> a)) -> w -> a
23:15:54 <boxscape_> looks like this is responsible for what I'm seeing https://github.com/haskell/cabal/issues/7641
23:17:37 <zzz> geekosaur: ah, holes! thanks
23:18:03 <boxscape_> Ohh I was thinking "what does join have to do with the Arrow class"
23:18:12 son0p joins (~ff@181.136.122.143)
23:23:21 sagax joins (~sagax_nb@user/sagax)
23:25:42 lispy joins (~lispy3@84.69.59.93)
23:30:16 × burnsidesLlama quits (~burnsides@dhcp168-027.wadham.ox.ac.uk) (Remote host closed the connection)
23:31:06 yauhsien joins (~yauhsien@61-231-58-250.dynamic-ip.hinet.net)
23:34:59 Akiva joins (~Akiva@user/Akiva)
23:35:17 × yauhsien quits (~yauhsien@61-231-58-250.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
23:36:54 × foul_owl quits (~kerry@174-21-143-101.tukw.qwest.net) (Ping timeout: 250 seconds)
23:39:43 × slack1256 quits (~slack1256@191.126.227.213) (Ping timeout: 256 seconds)
23:41:45 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
23:41:45 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
23:41:45 wroathe joins (~wroathe@user/wroathe)
23:44:26 <ephemient> boxscape_: as a workaround I suppose you could make your post-checkout command exit failure for now :)
23:45:00 × argento quits (~argent0@168-227-96-53.ptr.westnet.com.ar) (Ping timeout: 256 seconds)
23:45:52 <boxscape_> Hah, true! But it has since turned out I don't need it, since I thought I needed it to get package compatibility with 9.2, but have now found out I can also use 9.0 and use the hackage version of that package.
23:46:16 <boxscape_> chances are, the next time I'll encounter a situation where I need a post-checkout command, I'll be on a cabal version where it's fixed
23:46:38 CHUD joins (~CHUD@cpc142034-slou6-2-0-cust488.17-4.cable.virginm.net)
23:48:03 burnsidesLlama joins (~burnsides@dhcp168-027.wadham.ox.ac.uk)
23:48:10 × zebrag quits (~chris@user/zebrag) (Quit: Konversation terminated!)
23:52:01 foul_owl joins (~kerry@94.140.8.106)
23:53:47 × shapr quits (~user@2601:7c0:c37c:46d0:25fd:6854:a2a7:2f62) (Remote host closed the connection)
23:54:01 shapr joins (~user@2601:7c0:c37c:46d0:25fd:6854:a2a7:2f62)
23:59:52 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:494b:f936:f65f:424f)

All times are in UTC on 2022-01-21.