function :: IO FunctionalKernel
function = FunctionalKernel proto makeParams makeResult <$> metaKernel
   where
      proto = Prototype {
            inputs = [MatrixType,MatrixType],
            output = MatrixType
         }

      makeParams args = do
         let [a,b] = args
         c <- allocate (descriptor a)
         return [a,b,c]

      makeResult args = last args


----------------------------------------
-- MetaKernel
---------------------------------------
function :: IO FunctionalKernel
function = FunctionalKernel proto makeParams makeResult <$> metaKernel
   where
      proto = Prototype {
            inputs = [MatrixType,MatrixType],
            output = MatrixType
         }

      makeParams args = do
         let [a,b] = args
         c <- allocate (descriptor a)
         return [a,b,c]

      makeResult args = last args


----------------------------------------
-- MetaKernel
---------------------------------------
function = FunctionalKernel proto makeParams makeResult <$> metaKernel
   where
      proto = Prototype {
            inputs = [MatrixType,MatrixType],
            output = MatrixType
         }

      makeParams args = do
         let [a,b] = args
         c <- allocate (descriptor a)
         return [a,b,c]

      makeResult args = last args


----------------------------------------
-- MetaKernel
---------------------------------------