Man, this Haskell thing is pretty cool. One of (in my opinion) the most annoying things that a programming paradigm can do is consider unexpected behavior to be normal behavior. For instance, most list searches return -1 when the element you are looking for does not exist. Does returning -1 makes sense? No... Not really. Well, anyways, Haskell defeats this type of thing with the following line (this comes with the standard library):
data Maybe a = Nothing | Just a
Basically all it means is, there's this data type called Maybe (remember, uppercase means constant) and when it is given a type it may just return it or it may return nothing!
This tool is one of the coolest things I have seen in Haskell, thus far. What is the power in this? You can make functions with expected behavior! For instance, consider this quick, binary search I built:
binarySearch :: Ord a => [a] -> a -> Int -> Int -> Maybe Int
binarySearch l e beg last
| lookat == e = Just i
| i == (length l)-1 || i == 0 = Nothing
| lookat < e = (binarySearch l e i last)
| lookat > e = (binarySearch l e beg i)
where i = quot (beg+last) 2
lookat = l !! i
The
Maybe, Just and
Nothing allow the function to be loose enough that the function can respond with ,"I couldn't find what you were looking for; I found nothing!" This seems to be a huge plus of Haskell. I don't know of many strongly-typed languages that allow this level of Dynamicity.