Monad class contains declaration

fail :: String -> m a

and provides default implementation for 'fail' as:

fail s = error s

On the other hand Prelude defines:

error
:: String -> a

which stops execution and displays an error message.

Questions:
1) What value and type 'error' actually returns in:
error "some message" ?

2) How declaration
String -> m a
matches with
String -> a ?

3) In Maybe monad:
fail = Nothing

When and how 'fail' is used in Maybe monad?

Thanks!

--
Dmitri O. Kondratiev
dokondr@gmail.com
http://www.geocities.com/dkondr