data List a = { Nil, Cons a (List a) }

defn sum l = {
    case l of {
        Nil -> { 0 }
        Cons x xs -> { x + sum xs}
    }
}

defn map f l = {
    case l of {
        Nil -> { Nil }
        Cons x xs -> { Cons (f x) (map f xs) }
    }
}

defn main = {
    sum (map \x -> { x * x } (map (\x -> { x + x }) (Cons 1 (Cons 2 (Cons 3 Nil)))))
}
