
Hi Fernando,
final [] = [] - I consider that the end of an empty list is the empty list final [a] = a final (_:t) = final t
Suddenly, the function stoped working with a rather cryptic (for a newbie at least) error message:
*Temp> final [4,5]
<interactive>:1:9: No instance for (Num [a]) arising from the literal `5' at <interactive>:1:9 Possible fix: add an instance declaration for (Num [a]) In the expr*Temp> ession: 5 In the first argument of `final', namely `[4, 5]' In the expression: final [4, 5]
The problem is that final has the type [a] -> a, so you cannot have a pattern match that simply returns the empty list; this makes the function partial because taking the tail of an empty list is undefined. If you wish to avoid it, you can wrap it in a Maybe: final :: [a] -> Maybe a final [] = Nothing final [a] = Just a final (_:t) = final t $ cat > final.hs final :: [a] -> Maybe a final [] = Nothing final [a] = Just a final (_:t) = final t $ ghci final.hs GHCi, version 6.8.3: http://www.haskell.org/ghc/ :? for help Loading package base ... linking ... done. [1 of 1] Compiling Main ( final.hs, interpreted ) Ok, modules loaded: Main. *Main> final [1,2] Just 2 *Main> final [] Nothing *Main> Austin