Google Code jam puzzle - Welcome to Code Jam
w_s, short for "welcome_solve", is, frankly, a poor name.  You're writing a function that counts the number of subsequences.  It's not even restricted to operating on strings.  Why not call it countSubsequences?

countSubsequences :: Eq a =&gt; [a] -&gt; [a] -&gt; Int


Your base cases should be simpler.

countSubsequences [] _ = 1
countSubsequences _ [] = 0


The recursive case is correct, but could be written more clearly with a more idiomatic convention for parameter names, and using guard clauses.

countSubsequences needle@(n:ns) haystack@(h:hs)
  | n == h    = countSubsequences needle hs + countSubsequences ns hs
  | otherwise = countSubsequences needle hs