On 2 July 2010 01:59, prad
<prad@towardsfreedom.com> wrote:
i'm trying to sort the assignment concept out in my mind.
as i understand it so far,
<- is for IO
Not really :)
<- is for working with monads. It is just syntactic sugar that makes using monads a bit more pleasant
so you can do something like
someIOVar <- readFile filename
this will be of type IO String
which is different from String as in
Yes, because underneath what is really going on is the compiler is changing that to
readFile fileName >>= \x -> ...
let someStrVar = "this is a string"
to work with an IO String you need to convert it into a String which
seems to automatically happen inside a do structure as in:
main = do
tmplX <- readFile "zztmpl.htm"
navbx <- readFile "zznavb.htm"
let page = U.replace tmplX "NAVX" navbx
are there some other ways to make IO String into String?
Not that you should be using before leaning how monads work ;) But there is unsafePerformIO
also, it seems that assignment is different for the '=' in a program vs
ghci for functions:
sum x y = x + y (program)
vs
let sum x y = x + y (ghci)
in ghci you are *inside* the IO monad. Hence the need for let bindings
but not for strings and other things because you must always preface
assignment of values with 'let':
let a = 4
i suppose the let is there for variable assignments because such things
necessitate a change of state and i've read that this is not desirable
in functional programming - you have to work a little harder to do
assignment than languages which just allow
a = 4
b = 5
c = 6
etc
in haskell, is it preferable to do something like this:
var <- readFile fn
someFunction var
or someFunction (readFile fn)
actually this won't work, unless somefunction has type IO String -> IO a. You would need
somefunction =<< readFile fn
and that would have type IO a assuming somefunction returns something of type a
--
In friendship,
prad
... with you on your journey
Towards Freedom
http://www.towardsfreedom.com (website)
Information, Inspiration, Imagination - truly a site for soaring I's
_______________________________________________
Beginners mailing list
Beginners@haskell.org
http://www.haskell.org/mailman/listinfo/beginners
You definitely need to read up on monads and the do notation. All will become clearer :)