SML Como definir a opção apropriada

Por que o código a seguir não funciona?

fun sum_list xs =
case xs of
    [] => NONE
 | x::xs' => SOME (x+sum_list xs')

Esse código funciona bem quando em vez de NONE é zero e quando eu removo SOME. Eu sei que para a soma de uma lista vazia, o zero é a resposta razoável. Mas por que o exemplo a seguir falha?

Atualização: Fez isso funcionar seguindo a resposta de Diego:

fun sum_list xs =
    case xs of
        [] => NONE
      | x => 
        let
            fun slist x =
                case x of
                    [] => 0
                  | x::xs' => x + slist xs'
        in 
            SOME (slist x)
        end