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>