circConv :: Num a => [a] -> [a] -> [a]
circConv xs ys = map (innerProd xs) ys
                 where
                  n = length xs
                  ys' = (circShiftR . reverse) ys
                  yss = take n (iterate circShiftR ys')
circConv :: Num a => [a] -> [a] -> [a]
circConv xs ys = map (innerProd xs) ys
                 where
                  n = length xs
                  ys' = (circShiftR . reverse) ys
                  yss = take n (iterate circShiftR ys')
circConv xs ys = map (innerProd xs) ys
                 where
                  n = length xs
                  ys' = (circShiftR . reverse) ys
                  yss = take n (iterate circShiftR ys')