Two-variate power series.

- newtype T a = Cons {}
- isValid :: [[a]] -> Bool
- check :: [[a]] -> [[a]]
- fromCoeffs :: [[a]] -> T a
- fromPowerSeries0 :: C a => T a -> T a
- fromPowerSeries1 :: C a => T a -> T a
- lift0 :: T a -> T a
- lift1 :: (T a -> T a) -> T a -> T a
- lift2 :: (T a -> T a -> T a) -> T a -> T a -> T a
- const :: a -> T a
- appPrec :: Int

# Documentation

In order to handle both variables equivalently we maintain a list of coefficients for terms of the same total degree. That is

eval [[a], [b,c], [d,e,f]] (x,y) == a + b*x+c*y + d*x^2+e*x*y+f*y^2

Although the sub-lists are always finite and thus are more like polynomials than power series, division and square root computation are easier to implement for power series.

fromCoeffs :: [[a]] -> T aSource

fromPowerSeries0 :: C a => T a -> T aSource

fromPowerSeries1 :: C a => T a -> T aSource