O que essa assinatura de função significa em sml?

Estou olhando algumas anotações que meu professor deu sobre a linguagem SML e uma das funções é assim:

fun max gt = 
    let fun lp curr [] = curr
           | lp curr (a::l) = if gt(a,curr)
                             then lp a l
                             else lp curr l
in
    lp
end

Alguém poderia ajudar a explicar o que isso está fazendo? O que mais me confunde é a linha:

    let fun lp curr [] = curr

O que exatamente isso significa? Tanto quanto eu posso dizer, existe uma função chamadalp mas o que ocurr [] significar? São esses argumentos? Se sim, você só não tem permissão para um parâmetro em sml?