If you want to define a function using pattern matching inside let , you cannot use one allowed for each pattern, as you did, it will simply define two independent functions (the second is the shading of the first).
You need to use one run and split the patterns using linebreaks or, in ghci, where you cannot use linebreaks, semicolons. So:
let addlist [] [] = []; addlist (a:as) (b:bs) = (a+b) : addlist as bs
source share