Levenshtein Distance with Haskell Vectors and Memoization
Readability improves a lot with import Data.Vector ((!)) and replacing V.! with !.

generate looks better; performance-wise I do not expect a difference (with optimization).

lev    = V.generate (l1 + 1) levi


If you like point-free notation, you can short-cut levi, with intermediate manual steps:

  lev    = V.generate (l1 + 1) levi
  levi i = V.generate (l2 + 1) (levij i)


2

  lev    = V.generate (l1 + 1) (\i -&gt;
           V.generate (l2 + 1) (levij i))


3

  lev    = V.generate (l1 + 1) (\i -&gt; V.generate (l2 + 1) (levij i))


4

  lev    = V.generate (l1 + 1) (V.generate (l2 + 1) . levij)


Your code looks good. You might try it with Array next, to two-dimensional Index. The google results for haskell levenshtein Array are only marginally better than your Vector approach.