2025/11/28

Newest at the top

2025-11-28 20:29:15 +0100Lord_of_Life(~Lord@user/lord-of-life/x-2819915) Lord_of_Life
2025-11-28 20:28:55 +0100Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 240 seconds)
2025-11-28 20:26:25 +0100notzmv(~umar@user/notzmv) (Ping timeout: 264 seconds)
2025-11-28 20:25:51 +0100 <EvanR> print id
2025-11-28 20:25:48 +0100 <EvanR> you want it to print the function itself?
2025-11-28 20:25:26 +0100 <milan> Okey I think I can see your point.
2025-11-28 20:25:16 +0100 <milan> Yeah
2025-11-28 20:25:12 +0100 <mniip> that would only print once
2025-11-28 20:25:09 +0100 <mniip> yea but if you said `let x = print 3 in [x, x, x]`
2025-11-28 20:24:49 +0100 <lambdabot> [a -> a]
2025-11-28 20:24:49 +0100 <milan> Could ghc runtime execute print on every function it evaluates?
2025-11-28 20:24:48 +0100 <EvanR> :t [id, id, id]
2025-11-28 20:24:35 +0100 <milan> You can put functions to list too right?
2025-11-28 20:23:23 +0100 <mniip> hell you can put them in a list: sequence_ [x, x, x]
2025-11-28 20:23:16 +0100 <mniip> let x = print 3 in x >> x
2025-11-28 20:22:43 +0100 <EvanR> yes!
2025-11-28 20:22:43 +0100 <mniip> the bonus is that IO actions are values and you can manipulate them
2025-11-28 20:22:22 +0100 <milan> And as runtime is evaluating big IO composed of smaler IOs it always executes action there.
2025-11-28 20:22:21 +0100 <EvanR> orthogonal, but can be combined easily
2025-11-28 20:22:02 +0100 <EvanR> yeah so, functions are over here and are like this, and I/O commands are over here
2025-11-28 20:21:23 +0100 <milan> I get that they are encapsulated in IO...
2025-11-28 20:20:06 +0100 <EvanR> in haskell they're two different things entirely
2025-11-28 20:19:59 +0100 <EvanR> so they don't happen until someone calls the function
2025-11-28 20:19:42 +0100 <EvanR> in most language the evaluation of a function call is intertwined with executing effects, which is why you have to wrap everything with a lambda wrapper to delay the effects
2025-11-28 20:18:57 +0100 <milan> hmm
2025-11-28 20:18:22 +0100acidjnk(~acidjnk@p200300d6e7171911dda60d32ed7e3ae9.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
2025-11-28 20:18:04 +0100 <EvanR> just evaluating print 3 by itself wouldn't necessarily do the IO i.e. in (print 3, print 3), so it's a big distinction to make
2025-11-28 20:17:32 +0100 <milan> I agree
2025-11-28 20:17:22 +0100ChaiTRex(~ChaiTRex@user/chaitrex) ChaiTRex
2025-11-28 20:17:04 +0100 <EvanR> algebraically
2025-11-28 20:17:00 +0100 <EvanR> in this way you can build up a big IO from smaller ones
2025-11-28 20:16:53 +0100ChaiTRex(~ChaiTRex@user/chaitrex) (Remote host closed the connection)
2025-11-28 20:16:42 +0100 <lambdabot> IO a -> (a -> IO b) -> (a -> IO c) -> IO c
2025-11-28 20:16:41 +0100 <EvanR> :t bracket
2025-11-28 20:16:28 +0100 <EvanR> or pass it as an argument
2025-11-28 20:16:20 +0100 <EvanR> you could store the IO () in a data structure or mutable variable for later
2025-11-28 20:16:00 +0100 <EvanR> but the program itself just computes data
2025-11-28 20:15:53 +0100 <milan> Yep
2025-11-28 20:15:50 +0100 <EvanR> would print twice
2025-11-28 20:15:43 +0100 <EvanR> e.g. main = print 3 >> print 3 :: IO ()
2025-11-28 20:15:18 +0100 <EvanR> main :: IO ()
2025-11-28 20:15:10 +0100 <EvanR> as the program runs, the I/O commands it computes are executed
2025-11-28 20:14:47 +0100 <EvanR> that's just the supporting infrastructure for the runtime
2025-11-28 20:14:34 +0100 <milan> Some external object that might or might not correctly change state because we asked it to... it is same for display in calculator, and same for file in disk.
2025-11-28 20:14:15 +0100 <EvanR> haskell is a purely functional programming language, not purely functional hardware
2025-11-28 20:13:41 +0100tromp(~textual@2001:1c00:3487:1b00:9176:7929:ae5a:d4f6)
2025-11-28 20:13:40 +0100 <milan> or file that we can write to.. or socket we can write to..
2025-11-28 20:13:39 +0100 <EvanR> I figured you were talking about the programming language though, not the hardware
2025-11-28 20:13:25 +0100 <milan> same as console
2025-11-28 20:13:21 +0100 <milan> It has it has display