-- test Comment
-- String algebra:
name = "Alice"
-- "if" has a special syntax but otherwise a typed version of Lisp's "if":
name2 = if name /= "" then name else "no name"
myprogram
= print (1 + m
) -- compiler error: m undefinedm = 1 -- unless this line is also present
-- sequencing several imperative programs:
prg1 = do
print name
-- level of indentation is important
-- the same, but using algebra of imperative programs:
prg1' = sequence_ [print "hello ", print name]
-- one imperative program passing value to another:
prg2 = do
line <- getLine
putStrLn ("you typed: " ++ line)
main =
do
putStrLn name -- like print, but only for strings
-- putStrLn pname3 -- Couldn't match
type ...; Expected
type:
String; Actual
type:
IO () pname3 -- in Lisp: eval pname3
myprogram; prg1; prg2 -- sequencing, like 3 lines
-- generic string conversion, using a Java-friendly name:
toString value
= show value
-- string concatenation:
greet1 = "hello " ++ name ++ (toString 123)
-- the same, but with the operator as a function (like Lisp):
greet2 = (++) "hello " name
-- concatenating more than 2 strings:
greet3
= concat ["hello ", name
, toString
123]
Ci0tIHRlc3QgQ29tbWVudAotLSBTdHJpbmcgYWxnZWJyYToKbmFtZSA9ICJBbGljZSIKLS0gImlmIiBoYXMgYSBzcGVjaWFsIHN5bnRheCBidXQgb3RoZXJ3aXNlIGEgdHlwZWQgdmVyc2lvbiBvZiBMaXNwJ3MgImlmIjoKbmFtZTIgPSBpZiBuYW1lIC89ICIiIHRoZW4gbmFtZSBlbHNlICJubyBuYW1lIgogCnBuYW1lMyA9IHByaW50ICJCb2IiCiAKbXlwcm9ncmFtID0gcHJpbnQgKDEgKyBtKSAgLS0gY29tcGlsZXIgZXJyb3I6IG0gdW5kZWZpbmVkCm0gPSAxICAgICAgICAgICAgICAgICAgICAgIC0tIHVubGVzcyB0aGlzIGxpbmUgaXMgYWxzbyBwcmVzZW50CiAKLS0gc2VxdWVuY2luZyBzZXZlcmFsIGltcGVyYXRpdmUgcHJvZ3JhbXM6CnByZzEgPSBkbwogIHByaW50ICJoZWxsbyAiIAogIHByaW50IG5hbWUgIC0tIGxldmVsIG9mIGluZGVudGF0aW9uIGlzIGltcG9ydGFudAogCi0tIHRoZSBzYW1lLCBidXQgdXNpbmcgYWxnZWJyYSBvZiBpbXBlcmF0aXZlIHByb2dyYW1zOgpwcmcxJyA9IHNlcXVlbmNlXyBbcHJpbnQgImhlbGxvICIsIHByaW50IG5hbWVdCiAKLS0gb25lIGltcGVyYXRpdmUgcHJvZ3JhbSBwYXNzaW5nIHZhbHVlIHRvIGFub3RoZXI6CnByZzIgPSBkbwogIGxpbmUgPC0gZ2V0TGluZQogIHB1dFN0ckxuICgieW91IHR5cGVkOiAiICsrIGxpbmUpCiAKbWFpbiA9CiAgZG8KICBwdXRTdHJMbiBuYW1lIC0tIGxpa2UgcHJpbnQsIGJ1dCBvbmx5IGZvciBzdHJpbmdzCiAgLS0gcHV0U3RyTG4gcG5hbWUzIC0tIENvdWxkbid0IG1hdGNoIHR5cGUgLi4uOyBFeHBlY3RlZCB0eXBlOiBTdHJpbmc7IEFjdHVhbCB0eXBlOiBJTyAoKQogIHBuYW1lMyAtLSBpbiBMaXNwOiBldmFsIHBuYW1lMwogIG15cHJvZ3JhbTsgcHJnMTsgcHJnMiAtLSBzZXF1ZW5jaW5nLCBsaWtlIDMgbGluZXMKIAogCi0tIGdlbmVyaWMgc3RyaW5nIGNvbnZlcnNpb24sIHVzaW5nIGEgSmF2YS1mcmllbmRseSBuYW1lOgp0b1N0cmluZyB2YWx1ZSA9IHNob3cgdmFsdWUKIAotLSBzdHJpbmcgY29uY2F0ZW5hdGlvbjoKZ3JlZXQxID0gImhlbGxvICIgKysgbmFtZSArKyAodG9TdHJpbmcgMTIzKQotLSB0aGUgc2FtZSwgYnV0IHdpdGggdGhlIG9wZXJhdG9yIGFzIGEgZnVuY3Rpb24gKGxpa2UgTGlzcCk6CmdyZWV0MiA9ICgrKykgImhlbGxvICIgbmFtZQotLSBjb25jYXRlbmF0aW5nIG1vcmUgdGhhbiAyIHN0cmluZ3M6CmdyZWV0MyA9IGNvbmNhdCBbImhlbGxvICIsIG5hbWUsIHRvU3RyaW5nIDEyM10K