PFP Laboratory 1
Jump to navigation
Jump to search
Contents
Working environment
- Run
ghci
from the command line. it will start GHC Interpreter, the output should be something like this:
</translate>
GHCi, version 8.6.5: http://www.haskell.org/ghc/ :? for help
Prelude>
- If you write expression, for example
1+2*3
, it should be evaluated. You can close this interpreter by typing:q
. - Open Visual Studio Code, create a file
simple.hs
and put there following lines of code:
doubleMe x = x * x
plus x y = x + y + 'a'
It should report a problem in function plus
(you can not use +
with letter, it can be repaired by removing + 'a'
). Report from VS Code is refreshed whenever the source file is saved on disk.
Types
- Using the GHCi command
:info
, learn the type of the following functions (and operators):+, sqrt, succ, max
- Get the information about the data type of following expressions and evaluate them. it is possible using the command
:type
. You can switch this option on for all commands by:set +t
(removing by:unset +t
).
</translate>
5 + 8
3 * 5 + 8
2 + 4
sqrt 16
succ 6
succ 7
pred 9
pred 8
sin (pi / 2)
truncate pi
round 3.5
round 3.4
floor 3.7
ceiling 3.3
mod 10 3
odd 3
- At presentations, we have spoken about some basic types:
Int, Double, Bool, Char
. For each of previous expressions assign them the most appropriate of these basic data types. You can verify your guess by using::
. For example, for the first expression, let's assume it isInt
. We can cast the result to integer and get the following result.
Prelude> :type (5 + 8) :: Int
(5 + 8) :: Int :: Int
If we try incorrect conversion to Char
, we get the following result.
Prelude> :type (5 + 8) :: Char
<interactive>:1:2: error:
* No instance for (Num Char) arising from a use of `+'
* In the expression: (5 + 8) :: Char
For this expression, also the type Double
works.
Prelude> :type (5 + 8) :: Double
(5 + 8) :: Double :: Double
Reasoning about types
For following expression, try to determine:
- if the expression's type is correct;
- what will be the type of the result;
- what will be the result;
- put the expression into the interpreter, and verify your claims.
5.9/7
(floor 5.9)/7
floor 5.9/7
fromIntegral floor 5.9/7
fromIntegral (floor 5.9)/7
div (floor 5.9) 7
(floor 5.9) div 7
(floor 5.9) `div` 7
mod 10/2 3
mod (floor (10/2)) 3
First program in Haskell
In your favorite development environment (VS Code by default):
- Crate a file
simple.hs
. - Create a function
pythagoras a b
that computesc
based on . Necessary functions can be found: Hoogle - Open
ghci
and run the implemented function with3 4
. File can be loaded using command:l
(:load
) and reloaded with:r
(:reload
).
I Want More Functions
Real first program in Haskell
If you are complaining, that all programming courses should start with printing "Hello world!"
on the screen and that is why previous task sucks. Do the following exercise.
- Crate a file
firstProgram.hs
with following content:
main = do putStr "Hello world!"
- Compile it with 'GHC compiler' (command
ghc
). - It should produce an executable file
firstProgram(.exe)
, run this file.
</translate>