3 ms·
IMHO the largest difference is purity. Not being able to mix IO and non-IO functions like this print “Enter name:” print (“Hello “ ++ readStdinLine ++
by runeks 7y ago
IMHO the largest difference is purity.
Not being able to mix IO and non-IO functions like this
print “Enter name:”
print (“Hello “ ++ readStdinLine ++ “!”)
in Haskell means you have to learn a new way of writing IO code.
- nightski 7y agoNot really. You can mix them in Haskell too. Think of F# as Haskell except you are always working in the IO monad. Haskell doesn't require a "new way of writing IO code" at all. It just allows you to separate out the IO from the pure in a way that can be enforced by the compiler. But there is nothing preventing you from writing all Haskell code in the IO monad if you were so inclined - which is essentially OCaml/F#.
- tome 7y ago> Not really. You can mix them in Haskell too. True, but it's not particularly syntactically convenient.
- nightski 7y agoThe entire point of monadic (do) syntax in Haskell is to make this convenient. I'm not following you exactly.
- tome 7y agoruneks mentioned print “Enter name:” print (“Hello “ ++ readStdinLine ++ “!”) which can't be written like that with do notation. It's also pretty confusing code to write in any language, so maybe that's not a problem.
- nightski 7y agoTrue, do notation does require you to add a line - main = do print "Enter name:" name <- getLine print ("Hello " ++ name ++ "!") But I only said that it makes this convenient not that it allowed you to write any statement you want. It still makes it easy to intersperse pure and non-pure code.