And now we are going to write functions to use it: \begin{haskellcode} isListEmpty :: List t -> Bool isListEmpty Emtpy = True isListEmpty x = False \end{haskellcode} \pause We can even have more generic stuff like: \begin{haskellcode} f :: a -> b \end{haskellcode} Whatever the function does... it gets something of one type and returns something of another type (it could be the same type, but doesn't need to). That's all we know. \vspace{\baselineskip} \\ \pause Similarly, remember the function \hinline{head} which gives us the first element of a list? The type signature actually looks like this: \begin{haskellcode} head :: [a] -> a \end{haskellcode} Makes sense?