22 lines
811 B
TeX
22 lines
811 B
TeX
|
But we can do more than enumerations. How about we do some error handling? Let's say we want a function to return an \code{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}
|
||
|
\pause
|
||
|
And now we can do sanity checks:
|
||
|
\begin{haskellcode}
|
||
|
calcSomething :: Int -> MaybeInt
|
||
|
calcSomething x
|
||
|
| x < 100 = NoError (x * 5)
|
||
|
| otherwise = Error "Int out of range!"
|
||
|
\end{haskellcode}
|