Haskell Lab
</br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br>
// C++
int f( int x, int y){
return x+y;
} -- Haskell
f :: Int -> Int -> Int
f x y = x + y _ </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br>
Getting familiar with ghci
_ </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br>
Help!
:?
_ </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br>
Get information
:info
_ </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br>
Shell commands
:!
_ </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br>
Get the type
:t
_ </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br>
Loading a file
:load
_ </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br>
How to read Haskell code
_ </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br>
Function arrows associate to the right
a -> a -> a -> a
a ->(a -> (a -> a)) _ </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br>
Function application associates to the left
f g h
((f g) h)_ </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br>
We can partially apply functions
add a b = a + b
incrament x = add 1 x_ </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br>
Typeclasses
_ </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br>
class Eq a where
(==) :: a -> a -> Bool
(/=) :: a -> a -> Bool
instance Eq Int where
i1 == i2 = eqInt i1 i2
i1 /= i2 = not (i1 == i2)_ </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br>
Ordering: Ord
Showable: Show
Enumerable: Enum
_ </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br>
Alternate Haskell Syntax
_ </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br>
The function right association operator, $
f (g x )
f $ g x_ </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br>
The function composition operator
f(g(h(k x)))
f.g.h.k x_ </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br>
Converting an infix function to a prefix function
f x = x + 3
f x = (+3) x_ </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br>
Turn your functions into a pipeline of compositions
f x = 3 + 7/x
f = (3+).(7/) x_ </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br>
Avoid the ‘do’ notation for IO
main = do
putStrLn "Username:"
name <- getLine
putStrLn ("Hello " ++ name)
main = putStrLn "Username:" >> getLine >>= putStrLn.("Hello " ++)_ </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br> </br>