Oltre alla risposta di Telastyn:
Maybe mai "silenziosamente fallisce". Al contrario di null, che potrebbe essere il confronto tra l'OP, una funzione Haskell che può restituire Nothing deve farlo esplicitamente nel suo tipo.
Per confronto: un metodo che restituisce String in Java potrebbe restituire una stringa o null, e non puoi dirlo semplicemente osservando il suo tipo:
public String myFunc(int x) { /* do something, might return null! */ }
In Haskell una funzione che restituisce un String ha un tipo simile a questo:
myFunc :: Int -> String
Sai che non può restituire Nothing , perché se fosse così, il suo tipo sarebbe:
myFunc :: Int -> Maybe String
Questo significa che Nothing non può mai insidiarsi e "causare mal di testa lungo la linea"!