Generating the N-bonacci numbers
Spacing! Separate function definitions with blank lines.
I'd use a, b, c for type variables and x, y, z for variables.
A . looks cleaner than a $.
putStr . unlines . map show . fib $ read s :: Int

I would add another pair of parentheses to make the order of application absolutely obvious.
(l:ls) !: a = l : (ls !: a)

For similar reasons, I prefer the following.
fib n = fibBase ++ zipPoly (+) fibTails
    where fibBase = replicate (n-1) 0 ++ [1]
          fibTails = repFor tail (fib n) n

I'd use cs for the remainder of the list instead of c. Perhaps a where helps, too.
zipPoly f (a:b:cs) = zipPoly f $ c:cs
    where c = zipWith f a b

zipPoly needs the associativity of f, if I'm not mistaken. Perhaps its worth a comment.
Perhaps use a fold?
zipPoly f [] = []
zipPoly f (xs:xss) = foldl (zipWith f) xs xss

Don't reinvent the wheel too much :). Use Hoogle to search for a function using its signature.
For example, !: is snoc. Since you only use it once, I'd replace it with a ++. Similarly, repFor f x0 n is take n . iterate f $ x0.