(Add a short section on some of the functions supplied with Data.Maybe)
m (→Type Equation: - Fixing mistake in type eqn - thanks Mark)
Revision as of 03:57, 7 March 2006
The Maybe type is defined as follows:
data Maybe a = Just a | Nothing deriving (Eq, Ord)
It allows the programmer to specify something may not be there.
1 Type Equation
Maybe satisfies the type equation FX = 1 + X, where the functor F takes a set to a point plus that set.
2 Comparison to imperative languages
Most imperative languages will ignore this, or allow one to use NULL (defined in some manner) to specify a value might not be there.
For Monad, the bind operation passes through Just, while Nothing will force the result to always be Nothing.
3.1 Usage example
Using the Monad class definition can lead to much more compact code. For example:
f::Int -> Maybe Int f 0 = Nothing f x = Just x
g :: Int -> Maybe Int g 100 = Nothing g x = Just x
h ::Int -> Maybe Int h x = case f x of Just n -> g n Nothing -> Nothing h' :: Int -> Maybe Int h' x = do n <- f x g n
h' will give the same results. (). In this case the savings in code size is quite modest, stringing together multiple functions like
g will be more noticeable.
4 Library Functions
When the module is imported, it supplies a variety of useful functions including:
maybe:: b->(a->b) -> Maybe a -> b
- Applies the second argument to the third, when it is 'Just x, otherwise returns the first argument.
- Test the argument, returing a Bool based on the constructor.
- Convert to/from a one element or empty list.
- A different way to filter a list.
See the documentation for Data.Maybe for more explatation and other functions.