module Combinatorics.Utility where scalarProduct :: Num a => [a] -> [a] -> a scalarProduct :: forall a. Num a => [a] -> [a] -> a scalarProduct [a] x [a] y = forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a sum (forall a b c. (a -> b -> c) -> [a] -> [b] -> [c] zipWith forall a. Num a => a -> a -> a (*) [a] x [a] y)