2022/06/19

2022-06-19 00:00:51 +0200Tuplanolla(~Tuplanoll@91-159-68-181.elisa-laajakaista.fi) (Quit: Leaving.)
2022-06-19 00:01:20 +0200jakalx(~jakalx@base.jakalx.net) ()
2022-06-19 00:02:01 +0200zebrag(~chris@user/zebrag) (Ping timeout: 248 seconds)
2022-06-19 00:11:16 +0200jakalx(~jakalx@base.jakalx.net)
2022-06-19 00:11:17 +0200Vajb(~Vajb@2001:999:40:4c50:1b24:879c:6df3:1d06) (Read error: Connection reset by peer)
2022-06-19 00:12:01 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2022-06-19 00:17:32 +0200gmg(~user@user/gehmehgeh) (Quit: Leaving)
2022-06-19 00:22:17 +0200mc47(~mc47@xmonad/TheMC47) (Remote host closed the connection)
2022-06-19 00:23:53 +0200zeenk(~zeenk@2a02:2f04:a013:9000:e45d:7fb3:ec71:e806)
2022-06-19 00:25:04 +0200quarkyalice(~quarkyali@user/quarkyalice)
2022-06-19 00:26:19 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:7587:2ca7:7a17:98c6)
2022-06-19 00:27:38 +0200takuan(~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
2022-06-19 00:30:28 +0200Feuermagier(~Feuermagi@user/feuermagier) (Remote host closed the connection)
2022-06-19 00:32:41 +0200Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2022-06-19 00:34:32 +0200zebrag(~chris@user/zebrag)
2022-06-19 00:41:18 +0200lisbeths(uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity)
2022-06-19 00:48:24 +0200jgeerds(~jgeerds@55d45f48.access.ecotel.net) (Ping timeout: 248 seconds)
2022-06-19 00:49:49 +0200o-90(~o-90@gateway/tor-sasl/o-90)
2022-06-19 00:53:31 +0200kannon(~NK@c-73-170-170-57.hsd1.ca.comcast.net)
2022-06-19 00:53:38 +0200o-90(~o-90@gateway/tor-sasl/o-90) (Remote host closed the connection)
2022-06-19 00:54:00 +0200o-90(~o-90@gateway/tor-sasl/o-90)
2022-06-19 00:54:48 +0200 <kannon> ok I think I'm on the libera network finally :)
2022-06-19 00:55:58 +0200 <kannon> when I load Control.Monad, I'm getting an error: PRELUDE> join Maybe (Maybe 5)
2022-06-19 00:56:21 +0200 <hpc> Maybe is the type, you want Just instead
2022-06-19 00:56:23 +0200 <hpc> @src Maybe
2022-06-19 00:56:24 +0200 <lambdabot> data Maybe a = Nothing | Just a
2022-06-19 00:56:29 +0200 <hpc> @src Bool
2022-06-19 00:56:29 +0200 <lambdabot> data Bool = False | True deriving (Eq, Ord)
2022-06-19 00:56:52 +0200 <hpc> Nothing :: Maybe a
2022-06-19 00:56:55 +0200 <hpc> Just :: a -> Maybe a
2022-06-19 00:56:59 +0200 <geekosaur> also, missing set of parens
2022-06-19 00:57:16 +0200 <kannon> I am a dumbass thanks hpc
2022-06-19 00:57:45 +0200 <hpc> this is a pretty common issue with learning ADT syntax
2022-06-19 00:58:01 +0200funsafe(~funsafe@76.105.238.154) (Ping timeout: 248 seconds)
2022-06-19 00:58:46 +0200 <hpc> i think GADT syntax would make more sense if you're learning the language, but i have no real evidence for it other than my own experience
2022-06-19 00:58:47 +0200nate4(~nate@98.45.169.16)
2022-06-19 00:58:52 +0200 <hpc> but that's a whole other thing
2022-06-19 00:59:09 +0200 <hpc> something you can google later maybe
2022-06-19 00:59:49 +0200funsafe(~funsafe@76.105.238.154)
2022-06-19 01:01:56 +0200 <kannon> thanks all. also, in haskell, anyone have a simple explanation for the math notation like when I see forall a.a :: " ... ". is that like when in abs algebra the set has to be all of the same type?
2022-06-19 01:02:34 +0200o-90(~o-90@gateway/tor-sasl/o-90) (Ping timeout: 240 seconds)
2022-06-19 01:02:43 +0200 <kannon> (never finished abstract algebra)
2022-06-19 01:03:46 +0200 <hpc> it comes from logic, and in that context it's fairly obvious - https://en.wikipedia.org/wiki/Forall
2022-06-19 01:04:21 +0200 <hpc> in haskell, it's basically just bringing type variables into scope
2022-06-19 01:04:42 +0200 <hpc> kind of like how a lambda brings value-level variables into scope
2022-06-19 01:04:53 +0200 <EvanR> forall types a . something something a something
2022-06-19 01:05:09 +0200 <EvanR> where what "types" means can be refined with kind signatures
2022-06-19 01:05:22 +0200 <hpc> (\x -> ...) is kind of like saying "for all x, this other thing that uses x"
2022-06-19 01:05:27 +0200 <hpc> :t map
2022-06-19 01:05:29 +0200 <lambdabot> (a -> b) -> [a] -> [b]
2022-06-19 01:05:32 +0200 <hpc> % :t map
2022-06-19 01:05:32 +0200 <yahb2> map :: (a -> b) -> [a] -> [b]
2022-06-19 01:05:42 +0200 <hpc> bah, pretend that shows foralls
2022-06-19 01:05:50 +0200 <hpc> map :: forall a b. the rest of it
2022-06-19 01:06:13 +0200 <hpc> is saying "for all types a and b, there's a function 'map' that does the things map does"
2022-06-19 01:06:57 +0200 <geekosaur> % :set -fprint-explicit-foralls
2022-06-19 01:06:57 +0200 <yahb2> <no output>
2022-06-19 01:06:58 +0200 <hpc> this gets interesting when you can put that forall somewhere other than right at the beginning
2022-06-19 01:07:03 +0200 <geekosaur> % :t map
2022-06-19 01:07:03 +0200 <yahb2> map :: forall {a} {b}. (a -> b) -> [a] -> [b]
2022-06-19 01:07:12 +0200 <hpc> but that's too interesting for someone just starting out
2022-06-19 01:07:23 +0200 <hpc> the thing to google is RankNTypes
2022-06-19 01:08:19 +0200 <kannon> so yeah one doesn't really need to think of that notation. it's sort of redundant?
2022-06-19 01:08:42 +0200 <hpc> it's redundant until it isn't
2022-06-19 01:09:11 +0200 <hpc> but more or less yeah, so it gets omitted until you're doing the weird stuff
2022-06-19 01:09:21 +0200 <kannon> hmmm ok thanks
2022-06-19 01:09:59 +0200 <EvanR> the conventional use of a, b, c as type variables makes it easy to infer that you intended to just introduce them, but you can name them anything, then it's less obvious
2022-06-19 01:10:29 +0200 <monochrom> Implicit quantifiers are historically proven to impede learning.
2022-06-19 01:10:32 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-06-19 01:10:45 +0200 <hpc> other common type variable conventions are f, g, m, k, s
2022-06-19 01:10:45 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:7587:2ca7:7a17:98c6) (Remote host closed the connection)
2022-06-19 01:10:45 +0200 <EvanR> especially when you have some other type signature in scope using scoped type variables
2022-06-19 01:11:03 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl) (Client Quit)
2022-06-19 01:11:06 +0200 <hpc> or you can just give them full names, if you're doing something specific enough that a single letter isn't helpful
2022-06-19 01:14:06 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:7587:2ca7:7a17:98c6)
2022-06-19 01:15:28 +0200 <kannon> I was reading Rank N types literature.. I don't follow this: https://wiki.haskell.org/Rank-N_types
2022-06-19 01:16:31 +0200 <kannon> when forall is written on the left of (->) or right, i.e.
2022-06-19 01:16:51 +0200zeenk(~zeenk@2a02:2f04:a013:9000:e45d:7fb3:ec71:e806) (Quit: Konversation terminated!)
2022-06-19 01:17:36 +0200 <hpc> it changes who "picks the type", so to speak
2022-06-19 01:18:20 +0200 <hpc> if you have say, foo :: forall a. Num a => (a -> a) -> Int -> Int, you can't define it as foo f x = f x
2022-06-19 01:18:34 +0200 <hpc> because someone might pass an f :: Double -> Double, and that would be valid
2022-06-19 01:18:58 +0200 <hpc> but if you instead wrote foo :: (forall a. Num a => (a -> a)) -> Int -> Int, you can define it as foo f x = f x
2022-06-19 01:19:20 +0200 <hpc> but now the only things that you can pass as f have to be as polymorphic as what foo's type says it should be
2022-06-19 01:19:30 +0200 <hpc> it has to be something that can be applied to any number
2022-06-19 01:19:49 +0200 <hpc> this also means you can write foo :: (forall a. Num a => (a -> a)) -> (Int, Double) -> (Int, Double)
2022-06-19 01:19:54 +0200 <hpc> foo f (x, y) = (f x, f y)
2022-06-19 01:20:26 +0200 <hpc> because it knows f is polymorphic enough to be applied to both an Int and a Double without breaking any rules
2022-06-19 01:20:57 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 248 seconds)
2022-06-19 01:21:04 +0200TonyStone(~TonyStone@2603-7080-8607-c36a-4880-a368-0091-2141.res6.spectrum.com) (Remote host closed the connection)
2022-06-19 01:21:14 +0200 <kannon> I will study that hpc. thank you!
2022-06-19 01:21:31 +0200 <hpc> (this is a very simplified explanation, there's a lot to learn about higher-ranked types and definitely more than i can properly explain)
2022-06-19 01:22:28 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915)
2022-06-19 01:22:59 +0200TonyStone(~TonyStone@2603-7080-8607-c36a-514e-68a6-af12-10c9.res6.spectrum.com)
2022-06-19 01:25:00 +0200 <kannon> so it's like this: forall m a. m (m a) -> m a ... m is added because it confirms that all a's need to be contained in a monad structure ?
2022-06-19 01:25:55 +0200 <kannon> both m and a are on the right side of the (->) operator
2022-06-19 01:26:01 +0200 <kannon> pardon left side
2022-06-19 01:28:01 +0200prolic(~prolic@2803:2a00:2c0f:b96d:69a9:fa3b:385:e53d)
2022-06-19 01:28:05 +0200 <hpc> on the outside, as it were
2022-06-19 01:28:15 +0200 <hpc> read it like forall m a. (m (m a) -> m a)
2022-06-19 01:29:03 +0200 <hpc> relative to (->), there's 3 places in the syntax tree forall can appear
2022-06-19 01:29:17 +0200 <hpc> outside and right are essentially the same
2022-06-19 01:29:23 +0200 <hpc> and left is the weird one
2022-06-19 01:30:21 +0200 <kannon> what would you write if you put it on the "right" ?
2022-06-19 01:31:27 +0200 <kannon> (m (m a) -> m a) forall m a.
2022-06-19 01:31:35 +0200 <monochrom> It is very simple and robotic. Suppose "v :: forall t. blahbah". Then the receiver of v chooses what t becomes. The provider is not allowed to.
2022-06-19 01:31:50 +0200shapr(~user@2600:4040:2d31:7100:c9e6:4184:8419:55f7) (Ping timeout: 255 seconds)
2022-06-19 01:32:39 +0200 <monochrom> Therefore, for example, suppose you code up "foo :: forall a. (forall b. -> [b]) -> Maybe a", and let me use it.
2022-06-19 01:32:40 +0200 <hpc> kannon: more like (Something Monomorphic -> forall a. a)
2022-06-19 01:32:48 +0200 <hpc> is the same as forall a. (Something Monomorphic -> a)
2022-06-19 01:33:02 +0200 <monochrom> I am the receiver of the outer "forall a", therefore I choose what a becomes, you don't.
2022-06-19 01:33:24 +0200 <hpc> (can't think of a good example where the type variable isn't also on the left :P)
2022-06-19 01:33:31 +0200o-90(~o-90@gateway/tor-sasl/o-90)
2022-06-19 01:33:41 +0200 <monochrom> But I have to pass a parameter "p :: forall b. b -> [b]" to you. You are the receiver of that "forall b". Therefore, you choose what b becomes, I don't.
2022-06-19 01:34:45 +0200prolic(~prolic@2803:2a00:2c0f:b96d:69a9:fa3b:385:e53d) (Quit: Client closed)
2022-06-19 01:34:56 +0200 <monochrom> This is the same in the 2-person-game semantics of logic.
2022-06-19 01:35:35 +0200 <kannon> so to be clear the "outer is the far left, correct?
2022-06-19 01:35:37 +0200 <monochrom> When I have to prove a "forall x ..." theorem, I am the provider of that theorem, therefore I don't choose what x is; users of that theorem choose.
2022-06-19 01:35:43 +0200 <kannon> "outer"
2022-06-19 01:36:06 +0200 <monochrom> I imagine an Arabic writer would write it at the far right.
2022-06-19 01:36:35 +0200 <hpc> kannon: outside the parens, but the nature of forall syntax does put it on the left visually yeah
2022-06-19 01:36:48 +0200 <monochrom> Actually I imagine that an English mathematician would write like "x + 1 > x for all x" so it's far right too.
2022-06-19 01:37:24 +0200 <hpc> haha
2022-06-19 01:37:52 +0200 <monochrom> Now consider "there exists c>0 s.t. x+c > x for all x".
2022-06-19 01:37:58 +0200hpctries as hard as he can not to rant about how mathematicians write :P
2022-06-19 01:38:15 +0200 <kannon> I cannot let humor enter into this at this stage :/
2022-06-19 01:38:17 +0200 <monochrom> Sorry, I just did. >:)
2022-06-19 01:38:53 +0200 <kannon> but I will get to the bottom of it....thanks
2022-06-19 01:39:13 +0200 <hpc> or will you... get to the undefined of it? :D
2022-06-19 01:39:38 +0200 <kannon> but is this related to overloaded functions?
2022-06-19 01:39:45 +0200 <monochrom> No.
2022-06-19 01:40:10 +0200 <hpc> this has all been part of plain old parametric polymorphism
2022-06-19 01:40:31 +0200 <monochrom> http://www.vex.net/~trebla/humour/tautologies.html #0
2022-06-19 01:41:40 +0200 <hpc> #4 has a permanent place on my whiteboard
2022-06-19 01:42:11 +0200 <hpc> it has a very thecodelesscode kind of feel to it
2022-06-19 01:42:22 +0200 <kannon> I am willing to be the brunt of jokes. :)
2022-06-19 01:43:21 +0200[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 248 seconds)
2022-06-19 01:44:14 +0200o-90(~o-90@gateway/tor-sasl/o-90) (Remote host closed the connection)
2022-06-19 01:45:05 +0200pleo(~pleo@user/pleo) (Quit: quit)
2022-06-19 01:45:24 +0200 <kannon> anyone know how to use this blasted irssi chat client? I cannot scroll upward. or is there a log of this chat?
2022-06-19 01:45:53 +0200 <dsal> topic has a logs url
2022-06-19 01:46:08 +0200 <kannon> can't see it dsal
2022-06-19 01:46:34 +0200 <yushyin> /topic
2022-06-19 01:46:41 +0200 <hpc> pageup/pagedown
2022-06-19 01:47:21 +0200 <dsal> https://ircbrowse.tomsmeding.com/browse/lchaskell
2022-06-19 01:47:37 +0200[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2022-06-19 01:47:38 +0200 <kannon> got it dsal / hpc thanks
2022-06-19 01:47:56 +0200 <kannon> itchyjunk ? lol
2022-06-19 01:49:17 +0200mvk(~mvk@2607:fea8:5ce3:8500::4588)
2022-06-19 01:50:50 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 240 seconds)
2022-06-19 01:54:00 +0200ph88(~ph88@2a02:8109:9e00:71d0::f476) (Quit: Leaving)
2022-06-19 01:58:51 +0200 <kannon> pageup
2022-06-19 01:58:57 +0200 <kannon> shit
2022-06-19 01:59:28 +0200juri__(~juri@79.140.114.236)
2022-06-19 02:01:03 +0200stefan-_(~cri@42dots.de) (Ping timeout: 256 seconds)
2022-06-19 02:01:16 +0200causal(~user@50.35.83.177)
2022-06-19 02:02:45 +0200juri_(~juri@79.140.114.143) (Ping timeout: 256 seconds)
2022-06-19 02:04:32 +0200sebastiandb(~sebastian@pool-108-31-128-56.washdc.fios.verizon.net)
2022-06-19 02:05:07 +0200stefan-_(~cri@42dots.de)
2022-06-19 02:06:20 +0200 <sebastiandb> I've been trying to add a dependency to my Stack project (Data.Text), but although the guide online (https://docs.haskellstack.org/en/v1.5.0/GUIDE/) says to modify the *.cabal file, that's modified every time I run 'stack build'. How do I properly add a dependency in this case, then? Using stack.yaml?
2022-06-19 02:07:45 +0200 <dsal> sebastiandb: Do you have a package.yaml?
2022-06-19 02:07:59 +0200 <sebastiandb> Yes.
2022-06-19 02:08:05 +0200 <dsal> @where paste
2022-06-19 02:08:05 +0200 <lambdabot> Help us help you: please paste full code, input and/or output at e.g. https://paste.tomsmeding.com
2022-06-19 02:08:41 +0200 <dsal> Things may sometimes get strange if you edit the cabal file *and* use hpack.
2022-06-19 02:08:58 +0200 <sebastiandb> So, that's the file I have to edit, then? I haven't changed it from the default after running stack new [projectname].
2022-06-19 02:09:33 +0200machinedgod(~machinedg@66.244.246.252) (Ping timeout: 256 seconds)
2022-06-19 02:09:55 +0200 <sebastiandb> I appreciate the prompt answer, BTW
2022-06-19 02:09:59 +0200machinedgod(~machinedg@66.244.246.252)
2022-06-19 02:11:02 +0200 <dsal> Yeah, it depends on what your template did and stuff, but there might be dependencies already. You can just add `text` there.
2022-06-19 02:11:56 +0200perdent(~perdent@124.188.208.163)
2022-06-19 02:13:29 +0200 <sebastiandb> How do I add it? I've added a bullet point listing "text" there, but it doesn't work. I'll just copy/paste my file like you suggested.
2022-06-19 02:14:57 +0200 <sebastiandb> https://paste.tomsmeding.com/e0WauBNe
2022-06-19 02:15:12 +0200kannon(~NK@c-73-170-170-57.hsd1.ca.comcast.net) (Quit: Lost terminal)
2022-06-19 02:15:18 +0200 <sebastiandb> The module is called fizz buzz, because it's a basic fizz buzz program so I can learn how Stack works.
2022-06-19 02:15:48 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2022-06-19 02:15:53 +0200quarkyalice(~quarkyali@user/quarkyalice) (Quit: quarkyalice)
2022-06-19 02:18:41 +0200 <dsal> sebastiandb: below the "- base" line, just add a line that says "- text"
2022-06-19 02:19:20 +0200 <dsal> You added it as a dependency to your exe, but perhaps you need it in your lib? Or tests?
2022-06-19 02:19:38 +0200 <dsal> If you do it at the top, it should be available everywhere.
2022-06-19 02:20:29 +0200 <sebastiandb> That makes sense. Thanks for clarifying the distinction. I've added it and it works. Thanks for the help!
2022-06-19 02:20:51 +0200 <dsal> Woo. It'll all downhill from there.
2022-06-19 02:25:12 +0200 <sebastiandb> By compiling using stack build, it installed the executable at [project root]/.stack-work/install/x86_64-linux-tinfo6/8b5312344a6ad4cb9963965e9b12e5e7971068b57c3e3847d5dba4265a79f112/9.0.2/bin. Is there a way to also have a temporary copy at the root of the project directory, so I don't have to refer to this to run the executable?
2022-06-19 02:26:56 +0200Axman6(~Axman6@user/axman6) (Ping timeout: 252 seconds)
2022-06-19 02:27:36 +0200 <sebastiandb> dsal: Forgot to mention your name, my bad
2022-06-19 02:28:31 +0200wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-06-19 02:28:31 +0200wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-06-19 02:28:31 +0200wroathe(~wroathe@user/wroathe)
2022-06-19 02:28:41 +0200 <dsal> sebastiandb: stack exec fizzbuzz
2022-06-19 02:28:57 +0200 <dsal> stack install will put it in ~/.local/bin
2022-06-19 02:29:05 +0200 <dsal> stack test will run your unit tests
2022-06-19 02:29:16 +0200 <dsal> `stack test --file-watch` will run the tests on every change. :)
2022-06-19 02:29:31 +0200acarrico(~acarrico@dhcp-68-142-48-19.greenmountainaccess.net)
2022-06-19 02:30:26 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:7587:2ca7:7a17:98c6) (Remote host closed the connection)
2022-06-19 02:30:36 +0200 <sebastiandb> Thanks! That's useful to know. Better than relying on Makefiles to do that, haha.
2022-06-19 02:33:10 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 240 seconds)
2022-06-19 02:34:21 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2022-06-19 02:43:59 +0200gurkenglas(~gurkengla@dslb-084-057-085-111.084.057.pools.vodafone-ip.de) (Ping timeout: 246 seconds)
2022-06-19 02:46:23 +0200natechan(~nate@98.45.169.16) (Ping timeout: 244 seconds)
2022-06-19 02:49:03 +0200natechan(~nate@98.45.169.16)
2022-06-19 02:54:32 +0200jao(~jao@211.68.17.95.dynamic.jazztel.es)
2022-06-19 02:59:44 +0200Infinite(~Infinite@49.39.121.77)
2022-06-19 03:07:19 +0200quarkyalice(~quarkyali@user/quarkyalice)
2022-06-19 03:12:50 +0200albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
2022-06-19 03:14:28 +0200quarkyalice(~quarkyali@user/quarkyalice) (Quit: quarkyalice)
2022-06-19 03:16:34 +0200Typedfern(~Typedfern@202.red-83-37-35.dynamicip.rima-tde.net) (Remote host closed the connection)
2022-06-19 03:16:36 +0200quarkyalice(~quarkyali@user/quarkyalice)
2022-06-19 03:16:38 +0200leeb(~leeb@KD106155002213.au-net.ne.jp)
2022-06-19 03:17:05 +0200Typedfern(~Typedfern@202.red-83-37-35.dynamicip.rima-tde.net)
2022-06-19 03:18:57 +0200albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8)
2022-06-19 03:19:36 +0200Guest48(~Guest48@2601:283:4602:3820:bd97:9401:9c23:cecb)
2022-06-19 03:19:53 +0200jao(~jao@211.68.17.95.dynamic.jazztel.es) (Remote host closed the connection)
2022-06-19 03:22:02 +0200waleee(~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 244 seconds)
2022-06-19 03:23:29 +0200jao(~jao@211.68.17.95.dynamic.jazztel.es)
2022-06-19 03:24:09 +0200Guest48(~Guest48@2601:283:4602:3820:bd97:9401:9c23:cecb) (Client Quit)
2022-06-19 03:26:37 +0200mixfix41(~sdenynine@user/mixfix41) (Ping timeout: 256 seconds)
2022-06-19 03:29:20 +0200quarkyalice(~quarkyali@user/quarkyalice) (Quit: quarkyalice)
2022-06-19 03:30:50 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:7587:2ca7:7a17:98c6)
2022-06-19 03:32:59 +0200quarkyalice(~quarkyali@user/quarkyalice)
2022-06-19 03:35:21 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:7587:2ca7:7a17:98c6) (Ping timeout: 248 seconds)
2022-06-19 03:37:44 +0200quarkyalice(~quarkyali@user/quarkyalice) (Client Quit)
2022-06-19 03:38:30 +0200sebastiandb(~sebastian@pool-108-31-128-56.washdc.fios.verizon.net) (Ping timeout: 240 seconds)
2022-06-19 03:46:40 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:7587:2ca7:7a17:98c6)
2022-06-19 03:48:12 +0200Me-me(~me-me@tunnel690570-pt.tunnel.tserv12.mia1.ipv6.he.net) (Changing host)
2022-06-19 03:48:12 +0200Me-me(~me-me@user/me-me)
2022-06-19 03:53:46 +0200perdent(~perdent@124.188.208.163) (Quit: Client closed)
2022-06-19 03:54:08 +0200Midjak(~Midjak@82.66.147.146) (Quit: This computer has gone to sleep)
2022-06-19 04:00:13 +0200pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.5)
2022-06-19 04:00:42 +0200Axman6(~Axman6@user/axman6)
2022-06-19 04:00:52 +0200Axma98290(~Axman6@user/axman6)
2022-06-19 04:02:10 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 240 seconds)
2022-06-19 04:05:34 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 240 seconds)
2022-06-19 04:07:30 +0200td_(~td@94.134.91.116) (Ping timeout: 240 seconds)
2022-06-19 04:08:11 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-06-19 04:09:40 +0200td_(~td@muedsl-82-207-238-050.citykom.de)
2022-06-19 04:14:00 +0200Axman6(~Axman6@user/axman6) (Killed (NickServ (GHOST command used by Axma98290)))
2022-06-19 04:14:06 +0200Axma98290Axman6
2022-06-19 04:18:11 +0200nate4(~nate@98.45.169.16) (Ping timeout: 256 seconds)
2022-06-19 04:19:19 +0200kannon(~NK@135-180-47-54.fiber.dynamic.sonic.net)
2022-06-19 04:22:08 +0200nate4(~nate@98.45.169.16)
2022-06-19 04:24:03 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-06-19 04:24:45 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl) (Client Quit)
2022-06-19 04:29:31 +0200liz(~liz@cpc84585-newc17-2-0-cust60.16-2.cable.virginm.net)
2022-06-19 04:30:28 +0200even4void(even4void@came.here.for-some.fun) (Quit: fBNC - https://bnc4free.com)
2022-06-19 04:30:39 +0200andreas303(andreas303@ip227.orange.bnc4free.com) (Quit: fBNC - https://bnc4free.com)
2022-06-19 04:30:39 +0200xacktm(xacktm@user/xacktm) (Quit: fBNC - https://bnc4free.com)
2022-06-19 04:31:53 +0200kannon(~NK@135-180-47-54.fiber.dynamic.sonic.net) (Quit: leaving)
2022-06-19 04:33:12 +0200kannon(~NK@135-180-47-54.fiber.dynamic.sonic.net)
2022-06-19 04:35:30 +0200kannon(~NK@135-180-47-54.fiber.dynamic.sonic.net) (Client Quit)
2022-06-19 04:35:41 +0200finn_elija(~finn_elij@user/finn-elija/x-0085643)
2022-06-19 04:35:41 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
2022-06-19 04:35:41 +0200finn_elijaFinnElija
2022-06-19 04:35:42 +0200kannon(~NK@135-180-47-54.fiber.dynamic.sonic.net)
2022-06-19 04:37:12 +0200nate4(~nate@98.45.169.16) (Ping timeout: 248 seconds)
2022-06-19 04:39:28 +0200Unicorn_Princess(~Unicorn_P@93-103-228-248.dynamic.t-2.net) (Remote host closed the connection)
2022-06-19 04:48:04 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 240 seconds)
2022-06-19 04:50:29 +0200even4void(even4void@came.here.for-some.fun)
2022-06-19 04:53:58 +0200andreas303(andreas303@ip227.orange.bnc4free.com)
2022-06-19 04:55:16 +0200xacktm(xacktm@user/xacktm)
2022-06-19 04:56:38 +0200sebastiandb(~sebastian@pool-108-31-128-56.washdc.fios.verizon.net)
2022-06-19 04:56:55 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-06-19 04:56:57 +0200kannon(~NK@135-180-47-54.fiber.dynamic.sonic.net) (Quit: leaving)
2022-06-19 04:58:40 +0200liz(~liz@cpc84585-newc17-2-0-cust60.16-2.cable.virginm.net) (Quit: leaving)
2022-06-19 05:04:13 +0200sebastiandb(~sebastian@pool-108-31-128-56.washdc.fios.verizon.net) (Quit: Leaving)
2022-06-19 05:07:42 +0200nate4(~nate@98.45.169.16)
2022-06-19 05:10:18 +0200luke-clifton[m](~luke-clif@2001:470:69fc:105::2:3122)
2022-06-19 05:14:51 +0200img(~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in)
2022-06-19 05:16:30 +0200bontaq(~user@ool-45779fe5.dyn.optonline.net) (Ping timeout: 240 seconds)
2022-06-19 05:18:50 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 240 seconds)
2022-06-19 05:18:50 +0200machinedgod(~machinedg@66.244.246.252) (Ping timeout: 240 seconds)
2022-06-19 05:21:11 +0200img(~img@user/img)
2022-06-19 05:26:31 +0200kimjetwav(~user@2607:fea8:2340:da00:c6e9:fbcb:640d:f8d)
2022-06-19 05:39:01 +0200dmj`(sid72307@id-72307.hampstead.irccloud.com) ()
2022-06-19 05:39:41 +0200dmj`(sid72307@id-72307.hampstead.irccloud.com)
2022-06-19 05:44:53 +0200nate4(~nate@98.45.169.16) (Ping timeout: 256 seconds)
2022-06-19 05:47:02 +0200nate4(~nate@98.45.169.16)
2022-06-19 05:48:50 +0200zebrag(~chris@user/zebrag) (Remote host closed the connection)
2022-06-19 05:54:46 +0200img(~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in)
2022-06-19 06:03:37 +0200mvk(~mvk@2607:fea8:5ce3:8500::4588) (Ping timeout: 248 seconds)
2022-06-19 06:08:12 +0200img(~img@user/img)
2022-06-19 06:08:21 +0200Volt_(~Volt_@c-68-49-170-216.hsd1.mi.comcast.net) (Quit: )
2022-06-19 06:11:37 +0200jao(~jao@211.68.17.95.dynamic.jazztel.es) (Ping timeout: 248 seconds)
2022-06-19 06:12:15 +0200Sgeo(~Sgeo@user/sgeo)
2022-06-19 06:20:35 +0200yauhsien(~yauhsien@61-231-58-85.dynamic-ip.hinet.net)
2022-06-19 06:24:50 +0200yauhsien(~yauhsien@61-231-58-85.dynamic-ip.hinet.net) (Ping timeout: 246 seconds)
2022-06-19 06:45:31 +0200vglfr(~vglfr@coupling.penchant.volia.net) (Ping timeout: 256 seconds)
2022-06-19 06:55:08 +0200raym(~raym@user/raym)
2022-06-19 06:55:54 +0200Natch(~natch@c-9e07225c.038-60-73746f7.bbcust.telenor.se) (Remote host closed the connection)
2022-06-19 06:56:16 +0200szkl(uid110435@id-110435.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
2022-06-19 06:57:34 +0200yauhsien(~yauhsien@61-231-58-85.dynamic-ip.hinet.net)
2022-06-19 07:01:17 +0200Natch(~natch@c-9e07225c.038-60-73746f7.bbcust.telenor.se)
2022-06-19 07:01:40 +0200vglfr(~vglfr@88.155.15.21)
2022-06-19 07:11:11 +0200benin0(~benin@183.82.205.9)
2022-06-19 07:11:41 +0200lisbeths(uid135845@id-135845.lymington.irccloud.com)
2022-06-19 07:20:57 +0200yauhsien(~yauhsien@61-231-58-85.dynamic-ip.hinet.net) (Ping timeout: 248 seconds)
2022-06-19 07:35:53 +0200leeb(~leeb@KD106155002213.au-net.ne.jp) (Ping timeout: 248 seconds)
2022-06-19 07:37:56 +0200leeb(~leeb@KD106155000043.au-net.ne.jp)
2022-06-19 07:45:43 +0200cosimone(~user@2001:b07:ae5:db26:57c7:21a5:6e1c:6b81) (Remote host closed the connection)
2022-06-19 07:48:41 +0200vglfr(~vglfr@88.155.15.21) (Ping timeout: 248 seconds)
2022-06-19 07:53:07 +0200cosimone(~user@93-44-186-171.ip98.fastwebnet.it)
2022-06-19 07:55:43 +0200 <lisbeths> In theory is it possible to take haskell and port it to a different core than the core of ghc
2022-06-19 07:55:51 +0200dsrt^(~dsrt@50-207-196-30-static.hfc.comcastbusiness.net)
2022-06-19 07:57:04 +0200azimut(~azimut@gateway/tor-sasl/azimut) (Ping timeout: 240 seconds)
2022-06-19 07:59:13 +0200 <dsal> There used to be more than one haskell implementation, but haskell is pretty much GHC these days.
2022-06-19 08:01:24 +0200azimut(~azimut@gateway/tor-sasl/azimut)
2022-06-19 08:02:10 +0200benin0(~benin@183.82.205.9) (Ping timeout: 240 seconds)
2022-06-19 08:02:32 +0200benin0(~benin@183.82.204.151)
2022-06-19 08:02:35 +0200nate4(~nate@98.45.169.16) (Ping timeout: 256 seconds)
2022-06-19 08:11:04 +0200natechan(~nate@98.45.169.16) (Ping timeout: 248 seconds)
2022-06-19 08:13:12 +0200kitty1(~kitty@096-039-147-043.res.spectrum.com) (Ping timeout: 248 seconds)
2022-06-19 08:15:12 +0200frost(~frost@user/frost)
2022-06-19 08:16:27 +0200kitty1(~kitty@096-039-147-043.res.spectrum.com)
2022-06-19 08:21:01 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:7587:2ca7:7a17:98c6) (Remote host closed the connection)
2022-06-19 08:22:44 +0200kitty2(~kitty@096-039-147-043.res.spectrum.com)
2022-06-19 08:22:49 +0200kitty1(~kitty@096-039-147-043.res.spectrum.com) (Ping timeout: 248 seconds)
2022-06-19 08:25:31 +0200[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
2022-06-19 08:28:10 +0200nate4(~nate@98.45.169.16)
2022-06-19 08:32:37 +0200dsrt^(~dsrt@50-207-196-30-static.hfc.comcastbusiness.net) (Ping timeout: 256 seconds)
2022-06-19 08:34:40 +0200takuan(~takuan@178-116-218-225.access.telenet.be)
2022-06-19 08:35:23 +0200nate4(~nate@98.45.169.16) (Ping timeout: 246 seconds)
2022-06-19 08:44:14 +0200gmg(~user@user/gehmehgeh)
2022-06-19 08:46:35 +0200coot(~coot@213.134.190.95)
2022-06-19 08:51:41 +0200soulomoon(~soulomoon@103.156.242.114)
2022-06-19 08:53:59 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-06-19 08:54:10 +0200dsrt^(~dsrt@50-207-196-30-static.hfc.comcastbusiness.net)
2022-06-19 09:03:13 +0200kuribas(~user@ptr-17d51eou2t4ghz8c28s.18120a2.ip6.access.telenet.be)
2022-06-19 09:04:47 +0200dsrt^(~dsrt@50-207-196-30-static.hfc.comcastbusiness.net) (Ping timeout: 246 seconds)
2022-06-19 09:05:39 +0200soulomoon(~soulomoon@103.156.242.114) (Quit: Client closed)
2022-06-19 09:15:55 +0200yauhsien(~yauhsien@61-231-58-85.dynamic-ip.hinet.net)
2022-06-19 09:21:25 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:7587:2ca7:7a17:98c6)
2022-06-19 09:25:45 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:7587:2ca7:7a17:98c6) (Ping timeout: 248 seconds)
2022-06-19 09:26:34 +0200 <jchia[m]> Can the dependency version bounds on the hackage page for a package differ from the cabal file in the downloaded package tarball?
2022-06-19 09:27:21 +0200 <sclv> yes. the raw downloaded tarball doesn’t contain revisions
2022-06-19 09:27:43 +0200 <jchia[m]> I'm seeing different upper bounds for bytestring in the nanovg package.
2022-06-19 09:29:03 +0200 <jchia[m]> sclv: cabal files can have dependency version bounds. Are we talking about the same thing?
2022-06-19 09:41:41 +0200benin0(~benin@183.82.204.151) (Quit: Ping timeout (120 seconds))
2022-06-19 09:42:01 +0200benin0(~benin@183.82.205.9)
2022-06-19 09:43:15 +0200tzh(~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz)
2022-06-19 09:45:53 +0200quarkyalice(~quarkyali@user/quarkyalice)
2022-06-19 09:55:51 +0200quarkyalice(~quarkyali@user/quarkyalice) (Quit: quarkyalice)
2022-06-19 09:57:00 +0200dsrt^(~dsrt@50-207-196-30-static.hfc.comcastbusiness.net)
2022-06-19 09:58:05 +0200abccgr(abccgr@117.194.188.23)
2022-06-19 09:59:11 +0200 <kuribas> https://twitter.com/jdegoes/status/1471147030680645638
2022-06-19 10:00:03 +0200 <kuribas> I rather disagree, you get a lot of bang for buck, for a relatively little effort (depending on the problem).
2022-06-19 10:01:04 +0200 <kuribas> "The pedagogical and boilerplate overhead of HKD is significant. You can't even compare two 'Person f' for equality unless you know a LOT!"
2022-06-19 10:01:22 +0200 <kuribas> Erm, the hkd approach reduces boilerplate.
2022-06-19 10:01:54 +0200 <kuribas> And I can write "deriving instance Eq (Person Identity)"
2022-06-19 10:02:01 +0200leeb(~leeb@KD106155000043.au-net.ne.jp) (Ping timeout: 248 seconds)
2022-06-19 10:02:38 +0200arthurs115(~arthurs11@78.196.67.166)
2022-06-19 10:02:56 +0200benin06(~benin@183.82.204.151)
2022-06-19 10:03:32 +0200 <kuribas> What do you guys think about hkd?
2022-06-19 10:04:00 +0200frost(~frost@user/frost) (Quit: Client closed)
2022-06-19 10:04:59 +0200benin0(~benin@183.82.205.9) (Ping timeout: 256 seconds)
2022-06-19 10:04:59 +0200benin06benin0
2022-06-19 10:09:36 +0200abccgr(abccgr@117.194.188.23) ()
2022-06-19 10:12:00 +0200Guest64(~Guest64@2401:4900:1cc8:c493:1996:37e1:9729:88af)
2022-06-19 10:16:51 +0200 <jackdk> I think to really get value out of hkd you want a team that's comfortable with rank2 version of traversable
2022-06-19 10:17:15 +0200 <jackdk> Similarly, to not have to write a zillion deriving instances, you have to be able to come up with something like `deriving instance (forall a . Eq a => Eq (f a)) => Eq (Person f)`
2022-06-19 10:19:30 +0200vglfr(~vglfr@coupling.penchant.volia.net)
2022-06-19 10:20:28 +0200 <jackdk> So I think there's a valley before you get all the payoff, and I think if I was leading an industrial team I'd probably teach higher-payoff things first
2022-06-19 10:22:06 +0200 <kuribas> jackdk: this? https://hackage.haskell.org/package/hkd-0.1/docs/Data-HKD.html#v:gftraverse
2022-06-19 10:22:21 +0200 <kuribas> jackdk: what are higher-payoff things?
2022-06-19 10:23:30 +0200 <jackdk> kuribas: https://hackage.haskell.org/package/hkd-0.1/docs/Data-HKD.html#v:ftraverse is the interface, you've linked the generic-deriving helper
2022-06-19 10:23:30 +0200 <kuribas> also, "deriving instance Eq (Person Identity)", is the same for the alternative (separate data definitions).
2022-06-19 10:24:20 +0200 <kuribas> rank2 traverse is not that scary, is it?
2022-06-19 10:24:28 +0200 <jackdk> For example, if I could choose between a team fluent in servant or a team fluent in hkd, I'd probably pick servant
2022-06-19 10:24:50 +0200 <jackdk> If I could choose between fluency in lens or fluency in hkd, I'd probably pick lens
2022-06-19 10:25:26 +0200 <kuribas> But the useful subset of lens is pretty small.
2022-06-19 10:25:40 +0200 <kuribas> most of the "scary" lens stuff is extra fluff.
2022-06-19 10:26:35 +0200 <kuribas> basic lenses or optics (view, over, toListOff, traverseOf, ...) are not that hard, or are they?
2022-06-19 10:26:43 +0200 <jackdk> "rank2 traverse is not that scary" - not _that_ scary in itself , but you also have to be comfortable with functor composition to understand how it works
2022-06-19 10:26:46 +0200 <kuribas> I mean, ideally you'd know both.
2022-06-19 10:26:58 +0200 <kuribas> hmm, good point.
2022-06-19 10:27:48 +0200 <jackdk> kuribas: ideally you'd know everything, yes, but the question is: how much do you need to teach someone before he or she becomes productive?
2022-06-19 10:27:50 +0200 <kuribas> I think these things are easier explained using examples, than by analysing the type.
2022-06-19 10:28:22 +0200 <kuribas> jackdk: well, I have been "simplifying" my code by removing transformers, and using IO, IORefs and exceptions.
2022-06-19 10:28:45 +0200 <jackdk> I personally would not go that direction but ok
2022-06-19 10:28:58 +0200 <kuribas> But I found the hkd records to be simplifying the code a lot.
2022-06-19 10:29:25 +0200 <kuribas> jackdk: maybe clojure *is* a better language for average developers after all...
2022-06-19 10:30:08 +0200 <kuribas> as, instead of using hkd records, you just use hashmaps everywhere!
2022-06-19 10:30:46 +0200 <jackdk> I think that's swinging too far, the type-checker does _so_ much
2022-06-19 10:31:25 +0200 <kuribas> true, but how can you encode "record variants", in an easy, but type-safe way?
2022-06-19 10:32:23 +0200 <jackdk> newtypes and a few type variables in a template record
2022-06-19 10:32:38 +0200 <kuribas> what's a "template record"?
2022-06-19 10:32:56 +0200 <kuribas> you mean TH to generate records?
2022-06-19 10:34:00 +0200mc47(~mc47@xmonad/TheMC47)
2022-06-19 10:34:19 +0200 <jackdk> data `Person timestamp = { name :: Text, updatedAt :: timestamp, createdAt :: timestamp }; newtype NewPerson = NewPerson (Person ()); newtype StoredPerson = StoredPerson (Person UTCTime)`. Or perhaps `type`
2022-06-19 10:35:10 +0200Guest64(~Guest64@2401:4900:1cc8:c493:1996:37e1:9729:88af) (Quit: Guest64)
2022-06-19 10:36:39 +0200 <kuribas> that's less flexible than a hkd type variable.
2022-06-19 10:37:51 +0200coot(~coot@213.134.190.95) (Quit: coot)
2022-06-19 10:38:16 +0200Tuplanolla(~Tuplanoll@91-159-68-181.elisa-laajakaista.fi)
2022-06-19 10:42:10 +0200 <jackdk> yes
2022-06-19 10:42:23 +0200 <jackdk> I was never arguing otherwise
2022-06-19 10:43:41 +0200 <kuribas> then I could argue that the clojure approach is superior, as it gives you more flexibility.
2022-06-19 10:44:28 +0200 <kuribas> For example, I could make a hashmap that describes how to parse each field.
2022-06-19 10:44:36 +0200_ht(~quassel@231-169-21-31.ftth.glasoperator.nl)
2022-06-19 10:52:01 +0200mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds)
2022-06-19 10:54:04 +0200 <kuribas> jackdk: do you have experience with teaching this?
2022-06-19 10:54:10 +0200mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475)
2022-06-19 10:56:25 +0200jmdaemon(~jmdaemon@user/jmdaemon) (Ping timeout: 248 seconds)
2022-06-19 10:57:58 +0200 <jackdk> You could, but then I would say that giving up type safety entirely is the greater loss
2022-06-19 10:58:23 +0200 <kuribas> yeah, opinions differ on that part.
2022-06-19 10:58:47 +0200 <kuribas> But personally I prefer type safety over conciseness.
2022-06-19 10:58:57 +0200 <jackdk> I've taught FP for a few years now.
2022-06-19 10:59:27 +0200 <jackdk> All else being equal, I'd like more type safety, but as an extreme example I don't find singletons often justify their weight in Haskell
2022-06-19 10:59:44 +0200 <kuribas> ah, I agree there.
2022-06-19 11:00:18 +0200flo[m](~flosansps@2001:470:69fc:105::1:c22d) (Quit: You have been kicked for being idle)
2022-06-19 11:00:50 +0200 <kuribas> Though I am not sure that's because the problem is inherently hard, or the library is overengineered.
2022-06-19 11:01:04 +0200flo[m](~flosansps@2001:470:69fc:105::1:c22d)
2022-06-19 11:01:31 +0200 <kuribas> As a workaround, you can usually make a GADT to link type level and value level.
2022-06-19 11:01:35 +0200 <tomsmeding> I suspect the general problem that singletons is trying to solve is inherently hard
2022-06-19 11:01:39 +0200arthurs115(~arthurs11@78.196.67.166) (Ping timeout: 256 seconds)
2022-06-19 11:01:44 +0200 <tomsmeding> making your own singletons for particular types is really not so hard
2022-06-19 11:01:50 +0200 <tomsmeding> yeah
2022-06-19 11:03:21 +0200Tuplanolla(~Tuplanoll@91-159-68-181.elisa-laajakaista.fi) (Ping timeout: 248 seconds)
2022-06-19 11:04:04 +0200arthurs115(~arthurs11@78.196.67.166)
2022-06-19 11:04:44 +0200 <kuribas> wouldn't a simple macro to "unlift" data be useful?
2022-06-19 11:05:51 +0200 <kuribas> MyData Foo = MkFoo | MkBar; instance UnLift 'MkFoo Foo; instance UnLift 'MkBar Foo
2022-06-19 11:07:33 +0200coco(~coco@212-51-146-199.fiber7.init7.net)
2022-06-19 11:08:41 +0200dsrt^(~dsrt@50-207-196-30-static.hfc.comcastbusiness.net) (Ping timeout: 246 seconds)
2022-06-19 11:08:55 +0200 <coco> Does the cabal executable provide a command or flag to list the specification version that it supports? I can't find any
2022-06-19 11:09:22 +0200flo[m](~flosansps@2001:470:69fc:105::1:c22d) ()
2022-06-19 11:09:23 +0200 <jchia[m]> I'm getting an error from allocaBytesAligned. How can I track down the caller that is calling it with invalid alignment? "allocaBytesAligned: invalid argument (alignment (=24) must be a power of two!)"
2022-06-19 11:09:31 +0200 <jchia[m]> IDK which library is doing this
2022-06-19 11:13:41 +0200coot(~coot@213.134.190.95)
2022-06-19 11:13:42 +0200dsrt^(~dsrt@50-207-196-30-static.hfc.comcastbusiness.net)
2022-06-19 11:14:11 +0200 <turlando> I'm having an hard time trying to typecheck the following expression. I have to benchmark a function encrypt :: MonadRandom m => Curve -> PublicPoint -> Integer -> m (Maybe (Point, Point)) and I'm using Gauge as bench library. I'm doing something like bench "encrypt" $ whnf (encrypt curve public) clearText, but GHC says «Ambiguous type variable ‘m0’ arising from a use of ‘encrypt’ prevents the constraint ‘(MonadRandom m0)’ from being solved.
2022-06-19 11:14:11 +0200 <turlando> Probable fix: use a type annotation to specify what ‘m0’ should be.» The only issue is that I'm not sure what exactly should I annotate and how
2022-06-19 11:19:02 +0200Tuplanolla(~Tuplanoll@91-159-69-97.elisa-laajakaista.fi)
2022-06-19 11:19:32 +0200 <maerwald[m]> encrypt @IO
2022-06-19 11:23:34 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:7587:2ca7:7a17:98c6)
2022-06-19 11:25:27 +0200dsrt^(~dsrt@50-207-196-30-static.hfc.comcastbusiness.net) (Ping timeout: 256 seconds)
2022-06-19 11:27:42 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:7587:2ca7:7a17:98c6) (Ping timeout: 244 seconds)
2022-06-19 11:27:59 +0200perdent(~perdent@124.188.208.163)
2022-06-19 11:31:06 +0200zeenk(~zeenk@2a02:2f04:a013:9000:e45d:7fb3:ec71:e806)
2022-06-19 11:32:22 +0200arthurs115(~arthurs11@78.196.67.166) (Quit: arthurs115)
2022-06-19 11:32:30 +0200coot(~coot@213.134.190.95) (Quit: coot)
2022-06-19 11:32:36 +0200arthurs115(~arthurs11@78.196.67.166)
2022-06-19 11:33:57 +0200Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2022-06-19 11:43:59 +0200dsrt^(~dsrt@50-207-196-30-static.hfc.comcastbusiness.net)
2022-06-19 11:46:19 +0200yauhsien(~yauhsien@61-231-58-85.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-06-19 11:47:39 +0200econo(uid147250@user/econo) (Quit: Connection closed for inactivity)
2022-06-19 11:49:17 +0200mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 246 seconds)
2022-06-19 11:50:41 +0200Flonk(~Flonk@vps-zap441517-1.zap-srv.com) (Ping timeout: 246 seconds)
2022-06-19 11:51:31 +0200mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475)
2022-06-19 11:52:15 +0200yauhsien(~yauhsien@61-231-58-85.dynamic-ip.hinet.net)
2022-06-19 11:55:10 +0200dsrt^(~dsrt@50-207-196-30-static.hfc.comcastbusiness.net) (Ping timeout: 240 seconds)
2022-06-19 11:57:13 +0200yauhsien(~yauhsien@61-231-58-85.dynamic-ip.hinet.net) (Ping timeout: 248 seconds)
2022-06-19 12:00:53 +0200Flonk(~Flonk@134.255.252.174)
2022-06-19 12:01:07 +0200Kevin578(~Kevin578@pool-173-76-179-30.bstnma.fios.verizon.net)
2022-06-19 12:03:06 +0200gurkenglas(~gurkengla@dslb-084-057-085-111.084.057.pools.vodafone-ip.de)
2022-06-19 12:04:59 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-06-19 12:06:58 +0200dsrt^(~dsrt@50-207-196-30-static.hfc.comcastbusiness.net)
2022-06-19 12:07:24 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-06-19 12:08:20 +0200yauhsien(~yauhsien@61-231-58-85.dynamic-ip.hinet.net)
2022-06-19 12:10:36 +0200Ether17(~Ether17@2401:f40:100c:b164:1ac0:4dff:fe69:b9d5)
2022-06-19 12:14:54 +0200juri__juri_
2022-06-19 12:17:04 +0200noteness(~noteness@user/noteness) (Ping timeout: 240 seconds)
2022-06-19 12:17:33 +0200noteness(~noteness@user/noteness)
2022-06-19 12:18:01 +0200dsrt^(~dsrt@50-207-196-30-static.hfc.comcastbusiness.net) (Ping timeout: 248 seconds)
2022-06-19 12:18:03 +0200Ether17(~Ether17@2401:f40:100c:b164:1ac0:4dff:fe69:b9d5) (Quit: Client closed)
2022-06-19 12:18:34 +0200chexum(~quassel@gateway/tor-sasl/chexum) (Ping timeout: 240 seconds)
2022-06-19 12:18:52 +0200chexum(~quassel@gateway/tor-sasl/chexum)
2022-06-19 12:24:00 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
2022-06-19 12:25:04 +0200yauhsien(~yauhsien@61-231-58-85.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-06-19 12:25:22 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643)
2022-06-19 12:30:19 +0200yauhsien(~yauhsien@61-231-58-85.dynamic-ip.hinet.net)
2022-06-19 12:35:17 +0200Flonk(~Flonk@134.255.252.174) (Read error: Connection reset by peer)
2022-06-19 12:35:51 +0200Flonk(~Flonk@134.255.252.174)
2022-06-19 12:38:01 +0200kuribas(~user@ptr-17d51eou2t4ghz8c28s.18120a2.ip6.access.telenet.be) (Remote host closed the connection)
2022-06-19 12:40:49 +0200coco(~coco@212-51-146-199.fiber7.init7.net) (Ping timeout: 256 seconds)
2022-06-19 12:53:26 +0200odnes(~odnes@5-203-174-51.pat.nym.cosmote.net)
2022-06-19 12:54:09 +0200coco(~coco@212-51-146-199.fiber7.init7.net)
2022-06-19 12:58:59 +0200__monty__(~toonn@user/toonn)
2022-06-19 13:02:05 +0200perdent(~perdent@124.188.208.163) (Quit: Client closed)
2022-06-19 13:02:50 +0200HotblackDesiato(~HotblackD@gateway/tor-sasl/hotblackdesiato) (Remote host closed the connection)
2022-06-19 13:08:01 +0200raym(~raym@user/raym) (Ping timeout: 256 seconds)
2022-06-19 13:08:06 +0200HotblackDesiato(~HotblackD@gateway/tor-sasl/hotblackdesiato)
2022-06-19 13:14:57 +0200nate4(~nate@98.45.169.16)
2022-06-19 13:17:51 +0200jao(~jao@211.68.17.95.dynamic.jazztel.es)
2022-06-19 13:19:21 +0200nate4(~nate@98.45.169.16) (Ping timeout: 256 seconds)
2022-06-19 13:20:02 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
2022-06-19 13:22:21 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643)
2022-06-19 13:24:14 +0200pavonia(~user@user/siracusa) (Quit: Bye!)
2022-06-19 13:24:24 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:7587:2ca7:7a17:98c6)
2022-06-19 13:25:35 +0200jao(~jao@211.68.17.95.dynamic.jazztel.es) (Ping timeout: 256 seconds)
2022-06-19 13:30:02 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:7587:2ca7:7a17:98c6) (Ping timeout: 255 seconds)
2022-06-19 13:34:08 +0200bontaq(~user@ool-45779fe5.dyn.optonline.net)
2022-06-19 13:35:05 +0200Topsi(~Topsi@dyndsl-095-033-092-199.ewe-ip-backbone.de)
2022-06-19 13:49:27 +0200dsrt^(~dsrt@50-207-196-30-static.hfc.comcastbusiness.net)
2022-06-19 13:53:12 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2022-06-19 13:53:48 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2022-06-19 13:56:48 +0200dimsuz(~dimsuz@185.17.131.99)
2022-06-19 13:59:04 +0200 <Infinite> What does simply {} mean?
2022-06-19 13:59:04 +0200 <Infinite> For example in this snippet:
2022-06-19 13:59:05 +0200 <Infinite> instance Diagnostic PsMessage where
2022-06-19 13:59:05 +0200 <Infinite>   diagnosticReason = \case
2022-06-19 13:59:06 +0200 <Infinite>      PSErrParse{} -> ErrorWithoutFlag
2022-06-19 14:00:06 +0200 <hpc> it's pattern matching on a record and saying it doesn't care about the fields
2022-06-19 14:00:11 +0200dsrt^(~dsrt@50-207-196-30-static.hfc.comcastbusiness.net) (Ping timeout: 246 seconds)
2022-06-19 14:00:22 +0200 <hpc> it's like saying \case PSErrParse _ _ _ _ _ _ ... -> ErrorWithoutFlag
2022-06-19 14:00:32 +0200 <hpc> however many fields that constructor has
2022-06-19 14:01:42 +0200dimsuz(~dimsuz@185.17.131.99) (Quit: Client closed)
2022-06-19 14:02:07 +0200dsrt^(~dsrt@50-207-196-30-static.hfc.comcastbusiness.net)
2022-06-19 14:02:26 +0200waleee(~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
2022-06-19 14:05:17 +0200myme1(~myme@2a01:799:d5a:cd00:f2f:d1a:66d5:4462) (Ping timeout: 244 seconds)
2022-06-19 14:06:07 +0200myme1(~myme@2a01:799:d5a:cd00:3de4:f2de:722d:a4ae)
2022-06-19 14:14:58 +0200Midjak(~Midjak@82.66.147.146)
2022-06-19 14:15:06 +0200dsrt^(~dsrt@50-207-196-30-static.hfc.comcastbusiness.net) (Ping timeout: 244 seconds)
2022-06-19 14:15:32 +0200nate4(~nate@98.45.169.16)
2022-06-19 14:16:00 +0200gmg(~user@user/gehmehgeh) (Quit: Leaving)
2022-06-19 14:20:08 +0200nate4(~nate@98.45.169.16) (Ping timeout: 246 seconds)
2022-06-19 14:30:58 +0200Unicorn_Princess(~Unicorn_P@93-103-228-248.dynamic.t-2.net)
2022-06-19 14:31:49 +0200 <Axman6> Infinite: see https://stackoverflow.com/questions/38052553/haskell-record-pattern-matching
2022-06-19 14:32:30 +0200dsrt^(~dsrt@50-207-196-30-static.hfc.comcastbusiness.net)
2022-06-19 14:33:46 +0200henninb(~henninb@97-116-138-116.mpls.qwest.net) (Ping timeout: 272 seconds)
2022-06-19 14:35:27 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2022-06-19 14:36:51 +0200albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
2022-06-19 14:42:46 +0200benin0(~benin@183.82.204.151) (Quit: The Lounge - https://thelounge.chat)
2022-06-19 14:42:58 +0200albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8)
2022-06-19 14:48:04 +0200[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2022-06-19 14:49:18 +0200odnes_(~odnes@5-203-186-208.pat.nym.cosmote.net)
2022-06-19 14:50:33 +0200odnes(~odnes@5-203-174-51.pat.nym.cosmote.net) (Ping timeout: 248 seconds)
2022-06-19 14:54:05 +0200tristanC_tristanC
2022-06-19 14:55:32 +0200Axman6(~Axman6@user/axman6) (Remote host closed the connection)
2022-06-19 14:55:46 +0200Axman6(~Axman6@user/axman6)
2022-06-19 15:04:24 +0200Everything(~Everythin@37.115.210.35)
2022-06-19 15:04:40 +0200uberrice(~uberrice@77-58-67-184.dclient.hispeed.ch)
2022-06-19 15:06:35 +0200 <uberrice> Hi there, quick question: I have fun01 :: a->b->a, and now I want to make fun02 :: a -> [b] -> a that takes an array of b and applies fun01 to a one after another. I assume I have to use foldl, but I'm getting a bit confused with syntax
2022-06-19 15:07:03 +0200 <tomsmeding> :t foldl'
2022-06-19 15:07:05 +0200 <lambdabot> Foldable t => (b -> a -> b) -> b -> t a -> b
2022-06-19 15:07:29 +0200 <tomsmeding> (when you think you want foldl, you almost always want foldl'; if you really need foldl you would know)
2022-06-19 15:07:36 +0200waleee(~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 248 seconds)
2022-06-19 15:08:04 +0200 <tomsmeding> :t foldl' :: (a -> b -> a) -> a -> [b] -> a
2022-06-19 15:08:05 +0200 <lambdabot> (a -> b -> a) -> a -> [b] -> a
2022-06-19 15:08:51 +0200 <tomsmeding> uberrice: I switched 'a' and 'b', because they're just names, and I instantiated 't a' to '[a]'; [] is an instance of Foldable
2022-06-19 15:09:29 +0200 <tomsmeding> does that help?
2022-06-19 15:11:38 +0200 <uberrice> Theoretically, yes. I'm still in the process of learning functional programming so it's somewhat confusing. From looking at the type notation, foldl' needs an (a->b->a) that would be fun01 in my case (?), then a then b to yield a. Can i write this as: fun02 a b = foldl' fun01 a b? ghci somehow says foldl' isn't found, would that be foldl1?
2022-06-19 15:12:09 +0200 <geekosaur> @index foldl'
2022-06-19 15:12:09 +0200 <lambdabot> Data.Foldable, Data.List, GHC.OldList, Data.ByteString.Lazy.Char8, Data.ByteString.Lazy, Data.ByteString.Char8, Data.ByteString, Data.IntMap.Strict, Data.IntMap.Lazy, Data.IntMap, Data.IntSet, Data.
2022-06-19 15:12:09 +0200 <lambdabot> Map.Lazy, Data.Map.Strict, Data.Map, Data.Set
2022-06-19 15:12:38 +0200dsrt^(~dsrt@50-207-196-30-static.hfc.comcastbusiness.net) (Ping timeout: 246 seconds)
2022-06-19 15:12:45 +0200 <tomsmeding> uberrice: import Data.List
2022-06-19 15:12:59 +0200 <tomsmeding> and yes, that's precisely how you can write it
2022-06-19 15:13:10 +0200 <tomsmeding> you can also abbreviate that as `fun02 = foldl' fun01`
2022-06-19 15:13:12 +0200 <tomsmeding> :)
2022-06-19 15:13:34 +0200azimut(~azimut@gateway/tor-sasl/azimut) (Ping timeout: 240 seconds)
2022-06-19 15:15:16 +0200azimut(~azimut@gateway/tor-sasl/azimut)
2022-06-19 15:16:48 +0200 <uberrice> hmm, yeah, then I understand the concept I guess - my actual implemented solution doesn't work though. Weird
2022-06-19 15:17:24 +0200arthurs115(~arthurs11@78.196.67.166) (Quit: arthurs115)
2022-06-19 15:17:37 +0200arthurs115(~arthurs11@78.196.67.166)
2022-06-19 15:18:22 +0200 <uberrice> Doesn't work as in seemingly doesn't apply the arguments b to a. I'm sure that's PEBCAK though
2022-06-19 15:19:51 +0200 <geekosaur> @where paste
2022-06-19 15:19:52 +0200 <lambdabot> Help us help you: please paste full code, input and/or output at e.g. https://paste.tomsmeding.com
2022-06-19 15:21:14 +0200Everything(~Everythin@37.115.210.35) (Quit: leaving)
2022-06-19 15:22:58 +0200raym(~raym@user/raym)
2022-06-19 15:23:29 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 246 seconds)
2022-06-19 15:26:12 +0200 <uberrice> yup, PEBCAK, fun02 works correctly, fun01 doesn't. Thanks for the help!
2022-06-19 15:26:48 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:7587:2ca7:7a17:98c6)
2022-06-19 15:28:10 +0200finsternis(~X@23.226.237.192) (Ping timeout: 240 seconds)
2022-06-19 15:28:51 +0200finsternis(~X@23.226.237.192)
2022-06-19 15:30:22 +0200acetakwas(~acetakwas@f240139.upc-f.chello.nl)
2022-06-19 15:31:05 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:7587:2ca7:7a17:98c6) (Ping timeout: 255 seconds)
2022-06-19 15:31:28 +0200dsrt^(~dsrt@50-207-196-30-static.hfc.comcastbusiness.net)
2022-06-19 15:40:14 +0200MajorBiscuit(~MajorBisc@86-88-79-148.fixed.kpn.net)
2022-06-19 15:41:48 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-06-19 15:42:56 +0200xff0x(~xff0x@2405:6580:b080:900:1201:81ba:ce69:9f85) (Ping timeout: 244 seconds)
2022-06-19 15:47:18 +0200xff0x(~xff0x@2405:6580:b080:900:5dff:6ec3:2660:4e43)
2022-06-19 15:55:23 +0200 <maerwald[m]> Is there an alternative for tasty with less dependencies?
2022-06-19 15:57:47 +0200mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 246 seconds)
2022-06-19 16:00:56 +0200dsrt^(~dsrt@50-207-196-30-static.hfc.comcastbusiness.net) (Ping timeout: 246 seconds)
2022-06-19 16:00:59 +0200 <maerwald[m]> Or maybe just use QuickCheck/HUnit directly. But then I still need an alternative for tasty-bench
2022-06-19 16:07:20 +0200 <tomsmeding> use criterion directly?
2022-06-19 16:07:23 +0200 <maerwald[m]> Or... put benchmarks into a separste package.
2022-06-19 16:07:48 +0200 <maerwald[m]> tomsmeding: tasty-bench doesn't use criterion
2022-06-19 16:08:05 +0200 <tomsmeding> ah!
2022-06-19 16:08:14 +0200 <maerwald[m]> It's already supposed to be more lightweight
2022-06-19 16:08:32 +0200 <maerwald[m]> But tasty pulls in shenanigans like optparse-applicative
2022-06-19 16:08:33 +0200 <tomsmeding> The benchmarks are probably already in a different component, which shields the dependencies of you main library from those of the test suite already
2022-06-19 16:09:14 +0200 <maerwald[m]> On windows this caused `cabal build` to fail, even of benchmarks are not selected for build
2022-06-19 16:09:30 +0200 <tomsmeding> if has(windows): buildable = false
2022-06-19 16:09:34 +0200 <tomsmeding> I forget the syntax
2022-06-19 16:09:41 +0200 <maerwald[m]> tomsmeding: that's what I did
2022-06-19 16:09:44 +0200 <tomsmeding> :p
2022-06-19 16:09:49 +0200 <tomsmeding> but yeah not satisfying
2022-06-19 16:09:50 +0200 <maerwald[m]> But it's ugly
2022-06-19 16:10:25 +0200 <tomsmeding> same effect but somewhat less ugly cabal file, perhaps: an automatic cabal flag that disables the benchmark suite
2022-06-19 16:10:37 +0200 <tomsmeding> if you don't want to refactor your test code
2022-06-19 16:11:03 +0200dsrt^(~dsrt@50-207-196-30-static.hfc.comcastbusiness.net)
2022-06-19 16:11:05 +0200 <maerwald[m]> tomsmeding: except this is a core package and I'm worried about unforeseen side effects lol
2022-06-19 16:11:13 +0200 <tomsmeding> ah :p
2022-06-19 16:11:59 +0200pleo(~pleo@user/pleo)
2022-06-19 16:12:05 +0200 <maerwald[m]> There should be s way to easily inline library code for such use cases
2022-06-19 16:12:45 +0200 <maerwald[m]> Like, vendor the crsp, but only the codepaths you actually use
2022-06-19 16:13:12 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-06-19 16:18:49 +0200machinedgod(~machinedg@66.244.246.252)
2022-06-19 16:20:35 +0200 <hololeap> is there a quick reference for CPP macros I can use with GHC, for instance, checking the minimum version of a dependency
2022-06-19 16:22:23 +0200 <geekosaur[m]> https://downloads.haskell.org/ghc/9.2.1/docs/html/users_guide/phases.html?highlight=__glasgow_hask…
2022-06-19 16:23:03 +0200 <geekosaur[m]> but that's only the ghc ones, cabal defines some more
2022-06-19 16:23:11 +0200 <maerwald[m]> https://guide.aelve.com/haskell/cpp-vww0qd72
2022-06-19 16:23:25 +0200 <maerwald[m]> MIN_VERSION_bytestring(0,10,4)
2022-06-19 16:23:34 +0200 <hololeap> ok, thanks
2022-06-19 16:24:33 +0200 <geekosaur[m]> https://cabal.readthedocs.io/en/3.6/cabal-package.html#conditional-compilation
2022-06-19 16:26:46 +0200cawfee(~root@2406:3003:2077:2758::babe) (Quit: WeeChat 3.4.1)
2022-06-19 16:26:54 +0200cawfee(~root@2406:3003:2077:2758::babe)
2022-06-19 16:32:32 +0200dsrt^(~dsrt@50-207-196-30-static.hfc.comcastbusiness.net) (Remote host closed the connection)
2022-06-19 16:40:29 +0200odnes__(~odnes@5-203-186-208.pat.nym.cosmote.net)
2022-06-19 16:43:05 +0200odnes_(~odnes@5-203-186-208.pat.nym.cosmote.net) (Ping timeout: 248 seconds)
2022-06-19 16:44:12 +0200haskell_apprenti(~haskell_a@2603-7000-9900-04ba-b9ff-6cab-6298-12c0.res6.spectrum.com)
2022-06-19 16:46:20 +0200 <haskell_apprenti> basic question: If I want to extract a type from parent type (not sure if that's correct terminology) ie
2022-06-19 16:46:20 +0200 <haskell_apprenti> data DatabaseItem = DbString String, and I have x = DatabaseItem "example", and I want to write a function with signature f :: DatabaseItem -> String, how do I do that?
2022-06-19 16:46:23 +0200nate4(~nate@98.45.169.16)
2022-06-19 16:48:18 +0200gmg(~user@user/gehmehgeh)
2022-06-19 16:49:22 +0200 <geekosaur> f (DatabaseItem s) = s
2022-06-19 16:49:29 +0200raym(~raym@user/raym) (Ping timeout: 248 seconds)
2022-06-19 16:49:53 +0200 <haskell_apprenti> ah ok and that takes advantage of pattern matching
2022-06-19 16:49:57 +0200 <haskell_apprenti> cool thanks
2022-06-19 16:50:24 +0200 <haskell_apprenti> ah follow up
2022-06-19 16:50:37 +0200 <haskell_apprenti> what if this is the datatype
2022-06-19 16:50:38 +0200 <haskell_apprenti> data DatabaseItem = DbString String
2022-06-19 16:50:38 +0200 <haskell_apprenti>                   | DbNumber Integer
2022-06-19 16:50:59 +0200 <haskell_apprenti> and I want to write a function to extract String in one instance, Integer in another. Do I need to write a separate function for each?
2022-06-19 16:51:17 +0200nate4(~nate@98.45.169.16) (Ping timeout: 256 seconds)
2022-06-19 16:51:38 +0200 <haskell_apprenti> what would the type signature of that function be? because we're not sure what the inner type to be extracted will be
2022-06-19 16:51:38 +0200 <geekosaur[m]> ah, sorry, what I sent you before was wrong because I used the type name instead of the data constructor: f (DbString s) = s
2022-06-19 16:51:56 +0200 <geekosaur[m]> and if you want the second one, you can't write it because your function has to have a single type
2022-06-19 16:52:53 +0200 <geekosaur[m]> it can't be Integer in one case and String in another. it could be Either String Integer though
2022-06-19 16:53:01 +0200 <geekosaur[m]> that's not really recommended
2022-06-19 16:53:48 +0200 <geekosaur[m]> on the other hand, writing separate functions, both would be partial (would have to error out if the constructor of the value was wrong)
2022-06-19 16:54:37 +0200 <geekosaur[m]> f (DbString s) = Left s; f (DbNumber n) = Right n
2022-06-19 16:54:57 +0200 <geekosaur[m]> but this is no different from the original, really, so we wouldn't bother
2022-06-19 16:56:03 +0200 <haskell_apprenti> hm not sure I follow - so recommended to write separate functions? I'm a little confused by your usage of Left and Right
2022-06-19 16:56:23 +0200 <geekosaur[m]> @src Either
2022-06-19 16:56:23 +0200 <lambdabot> Source not found. This mission is too important for me to allow you to jeopardize it.
2022-06-19 16:56:29 +0200 <geekosaur[m]> bah
2022-06-19 16:56:45 +0200 <geekosaur[m]> data Either a b = Left a | Right b
2022-06-19 16:56:55 +0200 <geekosaur[m]> so the type of f in that case is Either String Integer
2022-06-19 16:57:55 +0200 <haskell_apprenti> ah I see. but you mentioned that's not really recommended
2022-06-19 16:58:15 +0200 <geekosaur[m]> writing separate functions would otherwise be necessary, but you need to decide what to do if handed the wrong kind of DatabaseItem
2022-06-19 16:58:40 +0200 <haskell_apprenti> aha
2022-06-19 16:58:47 +0200 <geekosaur[m]> not recommended because it's no different from just using the DatabaseItem, which is already effectively Either String Integer
2022-06-19 16:59:03 +0200 <geekosaur[m]> so you gain nothing from that function
2022-06-19 16:59:41 +0200 <haskell_apprenti> right so would also be DatabaseItem return type
2022-06-19 17:00:54 +0200 <haskell_apprenti> thanks for the information
2022-06-19 17:01:54 +0200 <geekosaur[m]> "effectively". DatabaseItem is more specific, but it behaves in all ways like Either String Integer
2022-06-19 17:02:09 +0200odnes__(~odnes@5-203-186-208.pat.nym.cosmote.net) (Ping timeout: 276 seconds)
2022-06-19 17:04:59 +0200odnes(~odnes@5-203-186-208.pat.nym.cosmote.net)
2022-06-19 17:05:17 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-06-19 17:06:02 +0200haskell_apprenti(~haskell_a@2603-7000-9900-04ba-b9ff-6cab-6298-12c0.res6.spectrum.com) (Quit: Client closed)
2022-06-19 17:16:08 +0200Infinite(~Infinite@49.39.121.77) (Quit: Client closed)
2022-06-19 17:17:42 +0200Infinite(~Infinite@49.39.121.77)
2022-06-19 17:17:51 +0200arjun(~arjun@user/arjun)
2022-06-19 17:18:07 +0200coot(~coot@213.134.190.95)
2022-06-19 17:21:10 +0200stefan-_(~cri@42dots.de) (Ping timeout: 240 seconds)
2022-06-19 17:25:33 +0200stefan-_(~cri@42dots.de)
2022-06-19 17:26:25 +0200arthurs115(~arthurs11@78.196.67.166) (Ping timeout: 256 seconds)
2022-06-19 17:28:25 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-06-19 17:37:34 +0200azimut(~azimut@gateway/tor-sasl/azimut) (Ping timeout: 240 seconds)
2022-06-19 17:42:36 +0200azimut(~azimut@gateway/tor-sasl/azimut)
2022-06-19 17:46:40 +0200kimjetwav(~user@2607:fea8:2340:da00:c6e9:fbcb:640d:f8d) (Remote host closed the connection)
2022-06-19 17:46:45 +0200zeenk(~zeenk@2a02:2f04:a013:9000:e45d:7fb3:ec71:e806) (Quit: Konversation terminated!)
2022-06-19 17:47:34 +0200adanwan(~adanwan@gateway/tor-sasl/adanwan) (Ping timeout: 240 seconds)
2022-06-19 17:48:04 +0200califax(~califax@user/califx) (Ping timeout: 240 seconds)
2022-06-19 17:48:29 +0200adanwan(~adanwan@gateway/tor-sasl/adanwan)
2022-06-19 17:48:34 +0200stiell(~stiell@gateway/tor-sasl/stiell) (Ping timeout: 240 seconds)
2022-06-19 17:48:51 +0200califax(~califax@user/califx)
2022-06-19 17:49:25 +0200raym(~raym@user/raym)
2022-06-19 17:49:34 +0200chexum(~quassel@gateway/tor-sasl/chexum) (Ping timeout: 240 seconds)
2022-06-19 17:50:22 +0200chexum(~quassel@gateway/tor-sasl/chexum)
2022-06-19 17:53:13 +0200stiell(~stiell@gateway/tor-sasl/stiell)
2022-06-19 17:55:18 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-06-19 17:57:48 +0200Infinite(~Infinite@49.39.121.77) (Ping timeout: 252 seconds)
2022-06-19 18:01:10 +0200pleo(~pleo@user/pleo) (Ping timeout: 240 seconds)
2022-06-19 18:01:12 +0200azimut(~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
2022-06-19 18:01:26 +0200tzh(~tzh@c-24-21-73-154.hsd1.wa.comcast.net)
2022-06-19 18:05:01 +0200coltenwebb[m](~coltenweb@2001:470:69fc:105::2:17c7)
2022-06-19 18:06:33 +0200wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-06-19 18:06:33 +0200wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-06-19 18:06:33 +0200wroathe(~wroathe@user/wroathe)
2022-06-19 18:07:26 +0200MajorBiscuit(~MajorBisc@86-88-79-148.fixed.kpn.net) (Quit: WeeChat 3.5)
2022-06-19 18:12:54 +0200jao(~jao@211.68.17.95.dynamic.jazztel.es)
2022-06-19 18:14:06 +0200azimut(~azimut@gateway/tor-sasl/azimut)
2022-06-19 18:16:49 +0200 <hololeap> any way to write `(m a -> n b) -> ParsecT s u m a -> ParsecT s u n b`
2022-06-19 18:17:47 +0200machinedgod(~machinedg@66.244.246.252) (Ping timeout: 246 seconds)
2022-06-19 18:19:17 +0200 <geekosaur> iirc that's only possible for a small subset of monads
2022-06-19 18:20:17 +0200 <[exa]> you'd alternatively need something like `polyjoin :: m (n a) -> n a`
2022-06-19 18:20:23 +0200 <[exa]> not sure if that's got a name
2022-06-19 18:22:45 +0200 <hololeap> class Foo t where foo :: (m a -> n b) -> t m a -> t n b
2022-06-19 18:23:04 +0200 <hololeap> not sure what that's called either. isn't there some concept of a "functor over monads" or something
2022-06-19 18:24:51 +0200coot(~coot@213.134.190.95) (Quit: coot)
2022-06-19 18:26:24 +0200sebastiandb(~sebastian@pool-108-31-128-56.washdc.fios.verizon.net)
2022-06-19 18:27:21 +0200 <hololeap> foonctor
2022-06-19 18:28:10 +0200wroathe(~wroathe@user/wroathe) (Quit: leaving)
2022-06-19 18:30:02 +0200 <c_wraith> hololeap: it'd be hoist from mmorph, if Parsec had an instance for MFunctor
2022-06-19 18:30:13 +0200 <c_wraith> well. hoist is a bit more specific than that
2022-06-19 18:32:32 +0200yauhsien(~yauhsien@61-231-58-85.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-06-19 18:33:29 +0200 <uberrice> Uh, simple question, but gooogle doesn't help. Can anyone link me to a description what Dyadic is in haskell?
2022-06-19 18:36:34 +0200coot(~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
2022-06-19 18:37:19 +0200 <hololeap> I'll probably just switch from parsec to megaparsec, cuz, yeah, having MonadParsec would be really nice
2022-06-19 18:37:28 +0200wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-06-19 18:37:28 +0200wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-06-19 18:37:28 +0200wroathe(~wroathe@user/wroathe)
2022-06-19 18:38:34 +0200 <c_wraith> uberrice: it doesn't have any special haskell meaning
2022-06-19 18:39:28 +0200geekosaurwonders if someone was confused by monadic/dyadic as used in apl
2022-06-19 18:39:58 +0200 <uberrice> it just randomly comes up in some (lecture) code like a type, but it doesn't seem to have any meaning, which confuses me
2022-06-19 18:40:40 +0200 <geekosaur> can you show some of that context?
2022-06-19 18:41:07 +0200 <geekosaur> (without context I'd go with the APL meaning: an operator that takes 2 parameters)
2022-06-19 18:41:14 +0200coco(~coco@212-51-146-199.fiber7.init7.net) (Ping timeout: 246 seconds)
2022-06-19 18:41:47 +0200 <EvanR> i.e. a rank 2 tensor?
2022-06-19 18:42:01 +0200alp__(~alp@user/alp)
2022-06-19 18:42:19 +0200 <uberrice> yes, that's probably what it is. The context it always crops up: make your own 'expression handler' in haskell; with data Expr = Const Value | Var String | Dyadic Opr Expr Expr ;
2022-06-19 18:42:54 +0200 <c_wraith> ah. that *is* the definition
2022-06-19 18:43:08 +0200 <c_wraith> and it's definitely coming from someone using apl-like meanings
2022-06-19 18:43:19 +0200kimjetwav(~user@2607:fea8:2340:da00:a3ad:b89c:e37:6b8f)
2022-06-19 18:43:28 +0200 <c_wraith> in apl, "dyadic" means an operation that takes two arguments
2022-06-19 18:43:34 +0200yauhsien(~yauhsien@61-231-58-85.dynamic-ip.hinet.net)
2022-06-19 18:43:38 +0200sonny(~sonny@bras-base-toroon0812w-grc-01-142-114-220-108.dsl.bell.ca)
2022-06-19 18:43:48 +0200 <EvanR> arity 2
2022-06-19 18:43:50 +0200 <uberrice> https://paste.tomsmeding.com/x4rw4VgT (which then the task is to evaluate)
2022-06-19 18:44:07 +0200 <uberrice> (expressions in)
2022-06-19 18:44:44 +0200 <geekosaur> right, that's basically the APL meaning, an operator with 2 arguments (left and right)
2022-06-19 18:44:48 +0200 <c_wraith> It'd be more common in haskell to name that constructor something like Binary or BinOp
2022-06-19 18:44:52 +0200 <uberrice> so is there any programmatic meaning to putting Dyadic there - if you just erased the Dyadic there, am I correct in my assumption the program wouldn't care?
2022-06-19 18:45:01 +0200 <c_wraith> well, you need a constructor name
2022-06-19 18:45:16 +0200 <uberrice> aaah ok. I just got it. Man.
2022-06-19 18:45:29 +0200 <uberrice> Dyadic, with parameters of Opr, Expr and Expr
2022-06-19 18:45:41 +0200 <uberrice> as like Var, with Parameter String
2022-06-19 18:45:45 +0200 <uberrice> man that took way too long.
2022-06-19 18:45:47 +0200 <__monty__> Dyadic is just math-speak, not APL-speak in particular, https://en.wikipedia.org/wiki/Dyadic
2022-06-19 18:46:06 +0200liz(~liz@cpc84585-newc17-2-0-cust60.16-2.cable.virginm.net)
2022-06-19 18:46:14 +0200 <uberrice> thanks!
2022-06-19 18:46:17 +0200 <__monty__> uberrice: It's often called `BinOp` for binary operator. Just a name though.
2022-06-19 18:47:00 +0200 <uberrice> i was too caught up in thinking in imperative-like languages so I got confused thinking `Dyadic` was some predefined thing for some reason
2022-06-19 18:47:39 +0200 <EvanR> even the base types like Bool, Int, String etc are defined somewhere
2022-06-19 18:48:22 +0200 <EvanR> so predefined, yes, built into the language no
2022-06-19 18:48:25 +0200yauhsien(~yauhsien@61-231-58-85.dynamic-ip.hinet.net) (Ping timeout: 248 seconds)
2022-06-19 18:48:25 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 248 seconds)
2022-06-19 18:49:59 +0200econo(uid147250@user/econo)
2022-06-19 18:51:25 +0200Kevin578(~Kevin578@pool-173-76-179-30.bstnma.fios.verizon.net) (Ping timeout: 256 seconds)
2022-06-19 18:54:04 +0200 <c_wraith> Bool is a weird case, as guards generate code that depends on Bool. So.. it's sort of part of the language in a way something like String isn't
2022-06-19 18:54:36 +0200 <sebastiandb> This isn't related to what you guys are talking about, but how do you write guards on one line? This doesn't work in ghci: `let { myAbs n | n < 0 = -n; | otherwise = n } in myAbs -1`. It's not that important since you can just use if-else, but it's probably good to know.
2022-06-19 18:54:50 +0200 <geekosaur> just leave out the semicolons
2022-06-19 18:55:00 +0200 <monochrom> String literals generate code that depends on String, too.
2022-06-19 18:55:25 +0200 <monochrom> or depends on [Char].
2022-06-19 18:55:33 +0200 <geekosaur> > let foo a | a == 5 = 6 | a == 4 = 2 | otherwise = a - 3 in map foo [3..6]
2022-06-19 18:55:35 +0200 <lambdabot> [0,2,6,3]
2022-06-19 18:55:49 +0200coco(~coco@212-51-146-199.fiber7.init7.net)
2022-06-19 18:55:52 +0200 <sebastiandb> geekosaur: Thanks! Didn't realize it was that simple.
2022-06-19 18:59:09 +0200 <sonny> How does Haskell guarantee safety if a programmer uses bytestring or string?
2022-06-19 18:59:41 +0200 <monochrom> I think it doesn't.
2022-06-19 19:00:19 +0200arjun(~arjun@user/arjun) (Quit: tip toe-ing my way outta here)
2022-06-19 19:00:26 +0200nate4(~nate@98.45.169.16)
2022-06-19 19:00:29 +0200 <sonny> hmm
2022-06-19 19:00:33 +0200 <geekosaur> define safety
2022-06-19 19:00:48 +0200jakalx(~jakalx@base.jakalx.net) (Error from remote client)
2022-06-19 19:01:33 +0200 <sonny> A bytestring or string can be used as an escape hatch for other things. I was wondering how to deal with that problem so I figured maybe Haskell solved it already.
2022-06-19 19:01:36 +0200 <c_wraith> you can still write stringly-typed code in Haskell. it's just a lot of work
2022-06-19 19:01:57 +0200 <geekosaur> you can't e.g. abuse badly written printf escapes to smash the stack
2022-06-19 19:02:06 +0200 <monochrom> How do I use string as an escape hatch?
2022-06-19 19:02:23 +0200 <geekosaur> the worst that can happen with Text.Printf is a runtime type assertion
2022-06-19 19:02:49 +0200 <sonny> oh ok
2022-06-19 19:04:02 +0200 <geekosaur> most other such abuses aren't so much about string as about overflowing a stack-allocated variable, but in Haskell they're all on the heap and counted instead of using fixed buffers with NULs at the end
2022-06-19 19:04:04 +0200azimut(~azimut@gateway/tor-sasl/azimut) (Ping timeout: 240 seconds)
2022-06-19 19:05:01 +0200 <c_wraith> think of it this way: strings aren't a security issue in Java. C just makes some special choices to enable problems.
2022-06-19 19:05:17 +0200 <EvanR> think of a string as a type you can send anything, but not necessarily get it back. You lose information
2022-06-19 19:05:22 +0200fryguybo1(~fryguybob@cpe-74-67-169-145.rochester.res.rr.com) (Quit: leaving)
2022-06-19 19:05:26 +0200 <sonny> I see
2022-06-19 19:05:42 +0200 <EvanR> a parser makes that process well defined
2022-06-19 19:05:44 +0200 <monochrom> Someone needs to start studying and demonstrating heap smashing...
2022-06-19 19:06:02 +0200 <c_wraith> (and then C calls most of them undefined behavior, so you can't even count on understanding the hardware to know what will happen...)
2022-06-19 19:06:21 +0200stackdroid18(14094@user/stackdroid)
2022-06-19 19:06:21 +0200 <monochrom> The profit is huge since everyone puts all their eggs on the heap >:)
2022-06-19 19:06:51 +0200 <geekosaur> easy, just make the runtime mis-count the size of something it's allocating…
2022-06-19 19:08:11 +0200Infinite(~Infinite@49.39.117.70)
2022-06-19 19:08:24 +0200 <monochrom> Is Naur still around? He could give a talk on "the trillion dollar mistake: putting both return addresses and local arrays on the stack" >:)
2022-06-19 19:10:30 +0200 <EvanR> oh they said safety and yall heard security xD
2022-06-19 19:10:45 +0200 <monochrom> No, I heard safety.
2022-06-19 19:10:47 +0200 <EvanR> i.e. protecting it from yourself or from a deviant other
2022-06-19 19:10:57 +0200 <geekosaur> there aren't that many things that qualify for "escape hatch for oother things"
2022-06-19 19:11:02 +0200 <monochrom> But they also said "escape hatch".
2022-06-19 19:11:33 +0200 <EvanR> I interpreted escape hatch like, get out of this language and user another, like, eval or SQL or something xD
2022-06-19 19:11:48 +0200 <monochrom> And I did ask for an example, so it is not like I was assuming anything.
2022-06-19 19:11:55 +0200 <geekosaur> no escape hatch will let you escape C that way
2022-06-19 19:12:16 +0200quarkyalice(~quarkyali@user/quarkyalice)
2022-06-19 19:12:31 +0200 <geekosaur> (not even to SQL unless you plan to make the C API calls to the SQL-evaluating engine)
2022-06-19 19:12:50 +0200 <geekosaur> (which naturally differ for every database interface)
2022-06-19 19:12:55 +0200 <monochrom> The SQL engine is probably written in C, too.
2022-06-19 19:13:13 +0200 <geekosaur> but is usually in a different process (granting sqlite)
2022-06-19 19:13:24 +0200 <EvanR> printf is an example of another language
2022-06-19 19:13:31 +0200 <monochrom> haha
2022-06-19 19:15:20 +0200 <EvanR> encoding important well typed information into a String, then sending that string to another process, now it has to be verified all over again in the parser. But in haskell you can actually perform this within the same program in a well typed way, so you know the parser will succeed
2022-06-19 19:15:50 +0200 <EvanR> i.e. yeah what c_wraith said about being a lot of work
2022-06-19 19:16:26 +0200AlexZenon(~alzenon@94.233.240.20)
2022-06-19 19:16:45 +0200AlexNoo(~AlexNoo@94.233.240.20)
2022-06-19 19:17:18 +0200yauhsien(~yauhsien@61-231-58-85.dynamic-ip.hinet.net)
2022-06-19 19:17:25 +0200fryguybob(~fryguybob@cpe-74-67-169-145.rochester.res.rr.com)
2022-06-19 19:18:52 +0200ddb1(~ddb@2607:5300:203:9993::196) (Remote host closed the connection)
2022-06-19 19:19:11 +0200 <EvanR> (I wonder what use case that would be necessary for, as opposed to just not using a string for that at all)
2022-06-19 19:19:17 +0200ddb(~ddb@ipv6two.tilde.club)
2022-06-19 19:19:57 +0200Alex_test(~al_test@94.233.240.20)
2022-06-19 19:21:37 +0200quarkyalice(~quarkyali@user/quarkyalice) (Quit: quarkyalice)
2022-06-19 19:22:11 +0200quarkyalice(~quarkyali@user/quarkyalice)
2022-06-19 19:37:23 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-06-19 19:40:08 +0200machinedgod(~machinedg@66.244.246.252)
2022-06-19 19:44:07 +0200jakalx(~jakalx@base.jakalx.net)
2022-06-19 19:44:22 +0200Kevin578(~Kevin578@pool-173-76-179-30.bstnma.fios.verizon.net)
2022-06-19 19:53:55 +0200simeon(~pi@dslb-088-069-178-224.088.069.pools.vodafone-ip.de)
2022-06-19 19:56:09 +0200vglfr(~vglfr@coupling.penchant.volia.net) (Ping timeout: 248 seconds)
2022-06-19 20:01:07 +0200elkcl(~elkcl@broadband-37-110-156-162.ip.moscow.rt.ru) (Ping timeout: 256 seconds)
2022-06-19 20:01:42 +0200elkcl(~elkcl@broadband-37-110-156-162.ip.moscow.rt.ru)
2022-06-19 20:04:31 +0200Kevin578(~Kevin578@pool-173-76-179-30.bstnma.fios.verizon.net) (Ping timeout: 256 seconds)
2022-06-19 20:05:18 +0200coot(~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
2022-06-19 20:11:37 +0200nate4(~nate@98.45.169.16) (Ping timeout: 248 seconds)
2022-06-19 20:12:17 +0200Sgeo(~Sgeo@user/sgeo)
2022-06-19 20:16:52 +0200sonny(~sonny@bras-base-toroon0812w-grc-01-142-114-220-108.dsl.bell.ca) (Quit: Client closed)
2022-06-19 20:24:55 +0200quarkyalice(~quarkyali@user/quarkyalice) (Quit: quarkyalice)
2022-06-19 20:24:56 +0200yauhsien(~yauhsien@61-231-58-85.dynamic-ip.hinet.net) (Read error: Connection reset by peer)
2022-06-19 20:25:59 +0200quarkyalice(~quarkyali@user/quarkyalice)
2022-06-19 20:28:08 +0200Infinite(~Infinite@49.39.117.70) (Ping timeout: 252 seconds)
2022-06-19 20:34:41 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-06-19 20:35:21 +0200machinedgod(~machinedg@66.244.246.252) (Ping timeout: 276 seconds)
2022-06-19 20:35:45 +0200nate4(~nate@98.45.169.16)
2022-06-19 20:38:34 +0200mjs2600(~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net) (Quit: ZNC 1.8.2 - https://znc.in)
2022-06-19 20:40:12 +0200mjs2600(~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net)
2022-06-19 20:40:35 +0200nate4(~nate@98.45.169.16) (Ping timeout: 246 seconds)
2022-06-19 20:50:00 +0200quarkyalice(~quarkyali@user/quarkyalice) (Quit: quarkyalice)
2022-06-19 20:56:38 +0200dtman34(~dtman34@2601:446:4400:2ad9:dddf:8180:d61b:8240) (Quit: ZNC 1.7.2+deb3 - https://znc.in)
2022-06-19 20:56:44 +0200yauhsien(~yauhsien@61-231-58-85.dynamic-ip.hinet.net)
2022-06-19 20:56:59 +0200dtman34(~dtman34@2601:446:4400:2ad9:1078:b9d6:ea9f:9bfa)
2022-06-19 20:57:28 +0200quarkyalice(~quarkyali@user/quarkyalice)
2022-06-19 21:01:11 +0200yauhsien(~yauhsien@61-231-58-85.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
2022-06-19 21:04:15 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2022-06-19 21:11:52 +0200shapr(~user@2600:4040:2d31:7100:677f:8b5d:34bb:4aea)
2022-06-19 21:17:26 +0200zeenk(~zeenk@2a02:2f04:a013:9000:e45d:7fb3:ec71:e806)
2022-06-19 21:18:12 +0200jmdaemon(~jmdaemon@user/jmdaemon)
2022-06-19 21:18:26 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-06-19 21:20:43 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:21c1:4642:3625:e265)
2022-06-19 21:20:46 +0200lisbeths(uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity)
2022-06-19 21:22:20 +0200nate4(~nate@98.45.169.16)
2022-06-19 21:22:35 +0200 <sebastiandb> Is there a good way in Haskell to represent a matrix of any size? Something you could use to represent any of Tic-Tac-Toe, Sudoku, or the snake game? Because I feel like just using a type synonym for a list of lists is a little hackish.
2022-06-19 21:23:26 +0200 <sebastiandb> Oh, Data.Matrix. Sorry, I should have looked this up first.
2022-06-19 21:23:43 +0200 <[exa]> there are actual matrix types, also Vector (which you can "fold" yourself), and regular arrays (e.g. repa)
2022-06-19 21:23:47 +0200 <geekosaur> or Data.Vector
2022-06-19 21:23:53 +0200coot(~coot@213.134.190.95)
2022-06-19 21:23:57 +0200 <geekosaur> ohh sorry, I'm slow
2022-06-19 21:24:08 +0200 <[exa]> tbh Matrix has a lot of math connotation usually so I'd support Data.Vector, yes.
2022-06-19 21:24:27 +0200 <geekosaur> lists are probably the wrong type here, although for tic-tac-toe it would be good enough
2022-06-19 21:26:08 +0200 <sebastiandb> Thanks for the recommendation for Data.Vector, then!
2022-06-19 21:26:49 +0200jmdaemon(~jmdaemon@user/jmdaemon) (Ping timeout: 248 seconds)
2022-06-19 21:27:19 +0200 <[exa]> btw is there some kinda True Functional Representation of a zippable matrix?
2022-06-19 21:27:36 +0200jmdaemon(~jmdaemon@user/jmdaemon)
2022-06-19 21:29:25 +0200lagash_(lagash@lagash.shelltalk.net) (Remote host closed the connection)
2022-06-19 21:29:37 +0200zeenk(~zeenk@2a02:2f04:a013:9000:e45d:7fb3:ec71:e806) (Ping timeout: 244 seconds)
2022-06-19 21:29:46 +0200zeenk(~zeenk@188.26.144.225)
2022-06-19 21:30:21 +0200lagash(lagash@lagash.shelltalk.net)
2022-06-19 21:31:34 +0200 <EvanR> IntMaps are your friend
2022-06-19 21:31:57 +0200 <EvanR> (though Int isn't "true functional" data)
2022-06-19 21:32:47 +0200 <EvanR> IntMaps were great in the last advent of code which called for a lot of "grids"
2022-06-19 21:34:06 +0200 <[exa]> hmm yeah, and the thing is a tree and you can have some sane spatial ordering of the ints. great
2022-06-19 21:34:09 +0200 <[exa]> thanks!
2022-06-19 21:42:33 +0200nate4(~nate@98.45.169.16) (Ping timeout: 256 seconds)
2022-06-19 21:49:30 +0200wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-06-19 21:49:30 +0200wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-06-19 21:49:30 +0200wroathe(~wroathe@user/wroathe)
2022-06-19 21:51:57 +0200waleee(~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
2022-06-19 21:52:21 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:21c1:4642:3625:e265) (Remote host closed the connection)
2022-06-19 21:52:30 +0200quarkyalice(~quarkyali@user/quarkyalice) (Quit: quarkyalice)
2022-06-19 21:52:59 +0200earthy(~arthurvl@2a02-a469-f5e2-1-ba27-ebff-fea0-40b0.fixed6.kpn.net)
2022-06-19 21:55:27 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-06-19 21:56:01 +0200nate4(~nate@98.45.169.16)
2022-06-19 22:02:08 +0200nate4(~nate@98.45.169.16) (Ping timeout: 246 seconds)
2022-06-19 22:06:32 +0200Kevin578(~Kevin578@pool-173-76-179-30.bstnma.fios.verizon.net)
2022-06-19 22:06:41 +0200pleo(~pleo@user/pleo)
2022-06-19 22:08:57 +0200liz(~liz@cpc84585-newc17-2-0-cust60.16-2.cable.virginm.net) (Ping timeout: 248 seconds)
2022-06-19 22:09:18 +0200_ht(~quassel@231-169-21-31.ftth.glasoperator.nl) (Remote host closed the connection)
2022-06-19 22:17:57 +0200ix(~ix@2a02:8010:674f:0:d65d:64ff:fe52:5efe) (Ping timeout: 258 seconds)
2022-06-19 22:19:11 +0200pretty_dumm_guy(~trottel@eduroam-134-96-204-3.uni-saarland.de)
2022-06-19 22:19:12 +0200pretty_dumm_guy(~trottel@eduroam-134-96-204-3.uni-saarland.de) (Client Quit)
2022-06-19 22:19:50 +0200pretty_dumm_guy(~trottel@eduroam-134-96-204-3.uni-saarland.de)
2022-06-19 22:20:12 +0200pretty_dumm_guy(~trottel@eduroam-134-96-204-3.uni-saarland.de) (Client Quit)
2022-06-19 22:21:45 +0200Kevin578(~Kevin578@pool-173-76-179-30.bstnma.fios.verizon.net) (Ping timeout: 248 seconds)
2022-06-19 22:21:50 +0200coot(~coot@213.134.190.95) (Quit: coot)
2022-06-19 22:23:20 +0200ss-(~ss-@187.83.249.216.dyn.smithville.net)
2022-06-19 22:34:09 +0200jgeerds(~jgeerds@55d45f48.access.ecotel.net)
2022-06-19 22:37:18 +0200Kevin578(~Kevin578@pool-173-76-179-30.bstnma.fios.verizon.net)
2022-06-19 22:38:09 +0200coco(~coco@212-51-146-199.fiber7.init7.net) (Quit: WeeChat 3.3)
2022-06-19 22:39:11 +0200nate4(~nate@98.45.169.16)
2022-06-19 22:43:50 +0200nate4(~nate@98.45.169.16) (Ping timeout: 240 seconds)
2022-06-19 22:52:45 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:21c1:4642:3625:e265)
2022-06-19 22:57:29 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:21c1:4642:3625:e265) (Ping timeout: 255 seconds)
2022-06-19 23:02:20 +0200sebastiandb(~sebastian@pool-108-31-128-56.washdc.fios.verizon.net) (Ping timeout: 246 seconds)
2022-06-19 23:08:00 +0200machinedgod(~machinedg@66.244.246.252)
2022-06-19 23:13:40 +0200takuan(~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
2022-06-19 23:15:47 +0200[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
2022-06-19 23:19:21 +0200ss-(~ss-@187.83.249.216.dyn.smithville.net) (Quit: Client closed)
2022-06-19 23:20:35 +0200machinedgod(~machinedg@66.244.246.252) (Ping timeout: 256 seconds)
2022-06-19 23:22:36 +0200machinedgod(~machinedg@66.244.246.252)
2022-06-19 23:24:22 +0200acidjnk(~acidjnk@dynamic-002-247-244-015.2.247.pool.telefonica.de)
2022-06-19 23:25:51 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-06-19 23:34:53 +0200dwt_(~dwt_@c-98-198-103-176.hsd1.tx.comcast.net) (Ping timeout: 246 seconds)
2022-06-19 23:35:16 +0200__monty__(~toonn@user/toonn) (Quit: leaving)
2022-06-19 23:35:53 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 248 seconds)
2022-06-19 23:36:41 +0200dwt_(~dwt_@c-98-198-103-176.hsd1.tx.comcast.net)
2022-06-19 23:39:18 +0200bontaq(~user@ool-45779fe5.dyn.optonline.net) (Ping timeout: 276 seconds)
2022-06-19 23:39:52 +0200pavonia(~user@user/siracusa)
2022-06-19 23:43:52 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-06-19 23:44:32 +0200stackdroid18(14094@user/stackdroid) (Quit: hasta la vista... tchau!)
2022-06-19 23:44:57 +0200machinedgod(~machinedg@66.244.246.252) (Ping timeout: 256 seconds)
2022-06-19 23:46:54 +0200machinedgod(~machinedg@66.244.246.252)
2022-06-19 23:53:21 +0200sonny(~sonny@bras-base-toroon0812w-grc-01-142-114-220-108.dsl.bell.ca)
2022-06-19 23:54:43 +0200gmg(~user@user/gehmehgeh) (Quit: Leaving)
2022-06-19 23:59:18 +0200mc47(~mc47@xmonad/TheMC47) (Remote host closed the connection)