Fix polymorphism since the ADT section of VL1 is gone

This commit is contained in:
Julian Ospald 2015-04-21 14:28:01 +02:00
parent d9750e6b34
commit 4f67c48b6f
No known key found for this signature in database
GPG Key ID: 220CD1C5BDEED020
3 changed files with 17 additions and 33 deletions

View File

@ -2,19 +2,4 @@ So when we said that haskell is good for abstraction, what did we actually mean?
\vspace{\baselineskip}
\\
\pause
Even better! Haskell supports polymorphism for both data types and functions.\\
Let's start with a polymorphic data type:
\begin{haskellcode}
data List t = Empty | Cons t (List t)
\end{haskellcode}
So we just implemented our own singly-linked List. For any type! Let's use it:
\pause
\begin{haskellcode}
intList :: List Int
intList = Cons 3 (Cons 5 (Cons 2 Empty))
charList :: List Char
charList = Cons 'x' (Cons 'y' (Cons 'z' Empty))
-- whatever you can imagine goes here
\end{haskellcode}
Even better! Haskell supports polymorphism for both data types and functions.

View File

@ -1,20 +1,19 @@
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 has 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:
Let's start with a polymorphic function that you already know:
\begin{haskellcode}
head :: [a] -> a
\end{haskellcode}
Makes sense?
\pause
So \hinline{head} takes a list of any type and returns an element which must have the \emph{exact same} type of that list.
\vspace{\baselineskip}
\\
\pause
We can also have:
\begin{haskellcode}
f :: a -> b
\end{haskellcode}
\pause
So, whatever the function does... it has something of one type and returns something of another type. \hinline{b} \emph{could} be the same type as \hinline{a} here, but it doesn't need to! That's all we know about this function.
\vspace{\baselineskip}
\\
\pause
You don't have to use \hinline{a} or \hinline{b} here. These letters are just commonly used for generic types.