But we can do more than enumerations. How about we do some error handling? Let's say we want a function to return an \hinline{Int}, but in case something went horribly wrong, we don't just want to return a 0 or some magic number, but a proper error message. Here we go: \pause \begin{haskellcode} data MaybeInt = NoError Int | Error String \end{haskellcode} \pause So constructors are just \emph{functions}! And they can have arguments, just like functions. Let's check their types: \begin{haskellcode} > :t NoError NoError :: Int -> MaybeInt > :t Error Error :: String -> MaybeInt \end{haskellcode}