The changes are as follows:
+ `print` is for putting showable things to STDOUT.
+ `printLn` is for putting showable things to STDOUT with a new line
+ `putCharLn` for putting a single character to STDOUT, with a new line.
Effects has been updated accordingly.
let pat = val | <alternatives> in x'
...becomes...
case val of
pat => x'
<alternatives>
do pat <- val | <alternatives>
p
...becomes...
do x <- val
case x of
pat => p
<alternatives>
So in particular, large effectful functions can deal with failure inline
rather than having lots of nested case blocks, e.g.
main : IO ()
main = do [p, a] <- getArgs
| [p] => putStrLn "No arguments!"
| (x :: y :: _) => putStrLn "Too many arguments!"
print (foo (Just (cast a)))