> > Everything in Haskell is a function [...]
Where did this idea come from? I'd say every expression in Haskell denotes a pure value, only some of which are functions (have type a->b for some types a & b). - Conal On Sat, Dec 27, 2008 at 12:16 PM, Cristiano Paris <fr...@theshire.org>wrote: > On Sat, Dec 27, 2008 at 4:50 PM, Hans van Thiel <hthiel.c...@zonnet.nl> > wrote: > > > However, some functions in Haskell may have side effects, like printing > > something on the screen, updating a database, or producing a random > > number. These functions are called 'actions' in Haskell. > > No :D I'll try to explain using the same picture that came into my > mind when I first got what monads really are... > > Everything in Haskell is a function AND an Haskell function is always > pure, i.e. has no side effects. > > Functions may return "actions", which are a special kind of value even > though they are no different to Haskell from values of any other type. > > When you are returning an action is like when you go to a driver and > give him a car: the driver takes the car you gave him and takes it > wherever the car is supposed to go. You build the car using small > pieces (i.e. basic functions returning actions like putStrLn) and > putting everything together using combinators (like >>= and >> or the > "do" notation). > > So, the car in the example is an "action" (or, more formally, a value > in a monad). Your Haskell functions (like putStrLn or anything) just > return the car, but they don't run it: they are run at run-time by the > Haskell run-time environment whose only task is to run values in the > IO Monad, i.e. running the car. > > Even it may not be apparent for the IO Monad, every Monad value is run > at some point in time: almost every monad is associated to at least a > function running the monad: for the State Monad this is runState, for > the Reader Monad is runReader and so on. > > The only exception to this is the IO Moand, which can be run only by > the Haskell run time, implicitly: this is the reason why you'll never > see a "runIO" thing. > > When the monad is run, it generate side-effects, like printing to > screen, opening file and so on. > > If you're used to Unix administration, another image to understand > monads are scripts. Haskell functions return script files that are run > by the shell to affect the system they are run on. In the end, they > are small pieces (the basic commands present in the system) put > together by bash constructs, like "for", "while" and so on. > > Hope this helps. > > -- > Cristiano > _______________________________________________ > Haskell-Cafe mailing list > Haskell-Cafe@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-cafe >
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe