Lately I’ve been studying Haskell, because, well, why not?
I want to understand better about Functional programming and everything related to it, its patterns, best practices, advantages, disadvantages… Haskell is a pure functional language and has a lot of cool features, such as strong and static typings, etc.
Right now I’m reading this book: Get Programming with Haskell, which I believe it’s a good book (at least so far). There’s also a really famous book about Haskell; Learn You a Haskell for Great Good which is free to read online. :)
I didn’t started learning about the Haskell typing system yet!
So far, I’ve learned the very basics of Haskell and this post is for me to keep tracking my learnings.
Haskell is pretty easy to install, just go to Haskell Downloads page and follow the instructions for your OS of choice.
Once the installation is finished, you’ll have access to the following tools:
- Cabal package manager
- GHC (Glasgow Haskell Compiler)
- GHCi (interactive interpreter)
To start playing with Haskell, you can use the GHCi, just type
ghci in your terminal after you finished the installation.
You can try almost everything in
ghci, like, creating functions, variables, etc:
name = "Lucas" print name myFunction x = x
You can also load your code from a Haskell file, just create a Haskell file (
filename.hs) and load it up with
ghci by typing:
:l filename.hs in the
After that you have full access to all the code in that file.
Haskell syntax and our first function
Now, take a look at the same thing but in Haskell:
printSomething something = something -- Usage: printSomething "Hello, Haskell!" -- Hello, Haskell
var declaration, no return, no nothing, just the name of the function and its arguments, based on that, you can guess that
printSomething is the name of the function,
something is the argument and everything after the
= signal is the function logic, the return is implied.
All functions in Haskell must take at least one (1) argument and they must return a value. Also, if a function is called with the same argument, it must return the same value.
To declare a variable in Haskell, you just need the name and a value, like so:
x = 2
But variables in Haskell aren’t actually variables, they are more like
constants so you can’t reassign a “variable” in Haskell:
x = 2 -- 2 x = 3 -- error
Note: You can reassign a variable in Haskell only in the Haskell REPL (GHCi).
where keyword (“variables” inside functions?)
In Haskell, we can use the
where keyword inside a function, to create a “variable” like…
Consider this function:
calcChange owed given = if given - owed > 0 then given - owed else 0
where to make the function cleaner and avoid repetition:
calcChange owed given = if change > 0 then change else 0 where change = given - owed
Did you noticed that we declared the
where keyword in the end of the function, instead of the beginning like almost all the other languages? In non-functional languages where we can reassign our variables, the order of the declaration matters because you can reassign the value of something after you assigned it. As we cannot do that in Haskell, we declare our
where keyword in the end of the function.
And that’s all for now! I’ll publish more about my learning in Haskell soon. :)