Simple arithmetic
x = 18 - 7
main = print x
Gotcha with negative numbers - the follwing won't work,
x = 10 * -5
main = print x
But this will
x = 10 * (-5)
main = print x
Boolean logic
x = True && False
y = False || True
z = 7 == (10 - 3)
main = print (x, y)
Notice here that the print statement printed a single value,
but that value was a a pair of parentheses,
containing a comma separated list of values,
in this case, x
, y
, and z
.
This is called a pattern. More on this later.
Comparing different types
x = "derp" == 1337
main = print x
x = "derp" == "herp"
main = print x
As expected, the latter works, but the former fails to compile.
That is because, the Haskell compiler does not know how to compare (or add, or subtract) a number with a string.
Functions are values
All the values so far are actually Functions
x = 25
Is actually defining a function x
,
which takes no parameters, and always evaluates to 5.
(Note that I say "evaluates to", not "returns".)
Functions with parameters
x a b = a + b
main = print $ x 3 4
This defines a function x
,
which takes in two parameters, a
and b
,
and evaluates it to the sum of a
and b
.
x (a, b) = a + b
main = print $ x 3 4
Notice that in the first definition,
there were no parentheses surrounding x
's only parameter -
they are simply not required in Haskell,
unlike most other programming languages.
This one does not compile, because
this defines a function x
which takes in just one parameter, (a, b)
,
which happens to be a tuple containing two values.
x (a, b) = a + b
main = print $ x (3, 4)
Thus, this would be the correct way to invoke it.