diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014 Phil Ruffwind
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import Distribution.Simple
+main = defaultMain
diff --git a/blas-hs.cabal b/blas-hs.cabal
new file mode 100644
--- /dev/null
+++ b/blas-hs.cabal
@@ -0,0 +1,80 @@
+name:                blas-hs
+version:             0.1.0.2
+synopsis:            Low-level Haskell bindings to Blas.
+description:         This package provides a complete low-level binding to
+                     Blas via the foreign function interface, allowing Haskell
+                     programs to take advantage of optimized routines for
+                     vector and matrix operations in Haskell.  See the source
+                     repository for more info.
+homepage:            https://github.com/Rufflewind/blas-hs
+bug-reports:         https://github.com/Rufflewind/blas-hs/issues
+license:             MIT
+license-file:        LICENSE
+author:              Phil Ruffwind
+maintainer:          rf@rufflewind.com
+category:            Math
+build-type:          Simple
+cabal-version:       >=1.16
+                     -- tested: 1.16 [hard] to 1.21 [soft]
+                     -- (limited by the test suite requirement on Cabal)
+
+source-repository head
+  type:                git
+  location:            https://github.com/Rufflewind/blas-hs
+
+
+library
+  exposed-modules:     Blas.Primitive.Types
+                       Blas.Primitive.Safe
+                       Blas.Primitive.Unsafe
+                       Blas.Generic.Safe
+                       Blas.Generic.Unsafe
+  other-modules:       BlasCTypes
+                       FFI
+  other-extensions:    FlexibleInstances
+                     , ForeignFunctionInterface
+                     , TypeFamilies
+  build-depends:       base >=4.5 && <5
+                       -- tested: 4.5 [hard] to 4.8 [soft]
+                       -- (4.4 does not export constructors for CFloat et al)
+                     , storable-complex >=0.2 && <1
+                       -- tested: 0.2 [hard] to 0.3 [soft]
+                       -- (0.1 is buggy)
+  ghc-options:         -Wall
+  hs-source-dirs:      src
+  default-language:    Haskell98
+
+  -- Use the following flags if you want `blas-hs` to be directly linked
+  -- against an existing Blas implementation (e.g. ACML, OpenBLAS, MKL).  This
+  -- will relieve the `blas-hs` user of the responsibility of specifying the
+  -- flags for linking to the Blas implementation.
+  --
+  -- The flags have no effect on the static version of `blas-hs`.
+  --
+  -- Note: If these flags are specified and a shared library is built, omit
+  --       the corresponding flags in the test-suite (see below).
+  extra-libraries:
+  ld-options:
+
+test-suite test
+  type:                detailed-0.9
+  test-module:         MainTest
+  other-extensions:    Rank2Types
+  build-depends:       base
+                     , blas-hs
+
+                     , Cabal >=1.16
+                       -- tested: 1.16 [hard] to 1.21 [soft]
+                       -- (0.15 does not have Progress)
+
+                     , vector >=0.8
+                       -- tested: 0.8 [hard] to 0.11 [soft]
+                       -- (0.7 has a different definition of MVector)
+
+  hs-source-dirs:      tests
+  default-language:    Haskell98
+
+  -- Note: Omit these flags if they are specified by the library and a shared
+  --       library is built (see above).
+  extra-libraries:     blas
+  ld-options:
diff --git a/src/Blas/Generic/Safe.hs b/src/Blas/Generic/Safe.hs
new file mode 100644
--- /dev/null
+++ b/src/Blas/Generic/Safe.hs
@@ -0,0 +1,309 @@
+{- This file is auto-generated.  Do not edit directly. -}
+{-# LANGUAGE FlexibleInstances, TypeFamilies #-}
+{-|
+
+Stability: experimental
+
+Generic interface to Blas using safe foreign calls.  Refer to
+the GHC documentation for more information regarding appropriate use of safe
+and unsafe foreign calls.
+
+The functions here are named in a similar fashion to the original Blas
+interface, with the type-dependent letter(s) removed.  Some functions have
+been merged with others to allow the interface to work on both real and
+complex numbers.  If you can't a particular function, try looking for its
+corresponding complex equivalent (e.g. @symv@ is a special case of 'hemv'
+applied to real numbers).
+
+It'd be really nice if these functions were actually documented.  Alas, for
+the time being, you'll have to refer to the various Blas docs scattered across
+the Internet.  Note that the interface is based off of /CBlas/, not Fortran
+Blas, which is slightly different.
+
+-}
+module Blas.Generic.Safe
+       ( Numeric(..)
+       , RealNumeric(..)
+       , C.dsdot
+       , C.sdsdot
+       ) where
+import Data.Complex (Complex((:+)))
+import Foreign (Ptr, Storable)
+import FFI (getReturnValue)
+import Blas.Primitive.Types (Order, Transpose, Uplo, Diag, Side)
+import qualified Blas.Primitive.Safe as C
+
+-- | Blas operations that are applicable to real and complex numbers.
+--
+--   Instances are defined for the 4 types supported by Blas: the
+--   single- and double-precision floating point types and their complex
+--   versions.
+class (Floating a, Storable a) => Numeric a where
+
+  -- | The corresponding real type of @a@.
+  --
+  --   In other words, @'RealType' ('Complex' a)@ is an alias for @a@.  For
+  --   everything else, @'RealType' a@ is simply @a@.
+  type RealType a :: *
+
+  dotu  :: Int -> Ptr a -> Int -> Ptr a -> Int -> IO a
+  dotc  :: Int -> Ptr a -> Int -> Ptr a -> Int -> IO a
+  nrm2  :: Int -> Ptr a -> Int -> IO (RealType a)
+  asum  :: Int -> Ptr a -> Int -> IO (RealType a)
+  iamax :: Int -> Ptr a -> Int -> IO Int
+  swap  :: Int -> Ptr a -> Int -> Ptr a -> Int -> IO ()
+  copy  :: Int -> Ptr a -> Int -> Ptr a -> Int -> IO ()
+  axpy  :: Int -> a -> Ptr a -> Int -> Ptr a -> Int -> IO ()
+  scal  :: Int -> a -> Ptr a -> Int -> IO ()
+  gemv  :: Order -> Transpose -> Int -> Int -> a -> Ptr a -> Int -> Ptr a
+        -> Int -> a -> Ptr a -> Int -> IO ()
+  gbmv  :: Order -> Transpose -> Int -> Int -> Int -> Int -> a -> Ptr a
+        -> Int -> Ptr a -> Int -> a -> Ptr a -> Int -> IO ()
+  trmv  :: Order -> Uplo -> Transpose -> Diag -> Int -> Ptr a -> Int
+        -> Ptr a -> Int -> IO ()
+  tbmv  :: Order -> Uplo -> Transpose -> Diag -> Int -> Int -> Ptr a
+        -> Int -> Ptr a -> Int -> IO ()
+  tpmv  :: Order -> Uplo -> Transpose -> Diag -> Int -> Ptr a -> Ptr a
+        -> Int -> IO ()
+  trsv  :: Order -> Uplo -> Transpose -> Diag -> Int -> Ptr a -> Int
+        -> Ptr a -> Int -> IO ()
+  tbsv  :: Order -> Uplo -> Transpose -> Diag -> Int -> Int -> Ptr a
+        -> Int -> Ptr a -> Int -> IO ()
+  tpsv  :: Order -> Uplo -> Transpose -> Diag -> Int -> Ptr a -> Ptr a
+        -> Int -> IO ()
+  hemv  :: Order -> Uplo -> Int -> a -> Ptr a -> Int -> Ptr a -> Int
+        -> a -> Ptr a -> Int -> IO ()
+  hbmv  :: Order -> Uplo -> Int -> Int -> a -> Ptr a -> Int -> Ptr a
+        -> Int -> a -> Ptr a -> Int -> IO ()
+  hpmv  :: Order -> Uplo -> Int -> a -> Ptr a -> Ptr a -> Int -> a
+        -> Ptr a -> Int -> IO ()
+  geru  :: Order -> Int -> Int -> a -> Ptr a -> Int -> Ptr a -> Int
+        -> Ptr a -> Int -> IO ()
+  gerc  :: Order -> Int -> Int -> a -> Ptr a -> Int -> Ptr a -> Int
+        -> Ptr a -> Int -> IO ()
+  her   :: Order -> Uplo -> Int -> RealType a -> Ptr a -> Int
+        -> Ptr a -> Int -> IO ()
+  hpr   :: Order -> Uplo -> Int -> RealType a -> Ptr a -> Int
+        -> Ptr a -> IO ()
+  her2  :: Order -> Uplo -> Int -> a -> Ptr a -> Int -> Ptr a -> Int
+        -> Ptr a -> Int -> IO ()
+  hpr2  :: Order -> Uplo -> Int -> a -> Ptr a -> Int -> Ptr a -> Int
+        -> Ptr a -> IO ()
+
+  -- | Calculate a general matrix-matrix product:
+  --
+  --   > c := alpha * opa(a) * opb(b) + beta * c
+  --
+  --   where `opa` and `opb` are operations specified by @transa@ and
+  --   @transb@ respectively.
+  gemm  :: Order     -- ^ Layout of all matrices.
+        -> Transpose -- ^ (@transa@) Operation applied to @a@.
+        -> Transpose -- ^ (@transb@) Operation applied to @b@.
+        -> Int       -- ^ (@m@) Number of rows of @op(a)@ and @c@.
+        -> Int       -- ^ (@n@) Number of columns of @op(b)@ and @c@.
+        -> Int       -- ^ (@k@) Number of columns of @op(a)@ and
+                     --         number of of rows of @op(b)@.
+        -> a         -- ^ (@alpha@) Scaling factor of the product.
+        -> Ptr a     -- ^ (@a@) Pointer to a matrix.
+        -> Int       -- ^ (@lda@) Stride of the major dimension of @a@.
+        -> Ptr a     -- ^ (@b@) Pointer to a matrix.
+        -> Int       -- ^ (@ldb@) Stride of the major dimension of @b@.
+        -> a         -- ^ (@beta@) Scaling factor of the original @c@.
+        -> Ptr a     -- ^ (@c@) Pointer to a mutable matrix.
+        -> Int       -- ^ (@ldc@) Stride of the major dimension of @c@.
+        -> IO ()
+
+  symm  :: Order -> Side -> Uplo -> Int -> Int -> a -> Ptr a -> Int
+        -> Ptr a -> Int -> a -> Ptr a -> Int -> IO ()
+  syrk  :: Order -> Uplo -> Transpose -> Int -> Int -> a -> Ptr a -> Int
+        -> a -> Ptr a -> Int -> IO ()
+  syr2k :: Order -> Uplo -> Transpose -> Int -> Int -> a -> Ptr a -> Int
+        -> Ptr a -> Int -> a -> Ptr a -> Int -> IO ()
+  hemm  :: Order -> Side -> Uplo -> Int -> Int -> a -> Ptr a -> Int
+        -> Ptr a -> Int -> a -> Ptr a -> Int -> IO ()
+  herk  :: Order -> Uplo -> Transpose -> Int -> Int -> RealType a -> Ptr a
+        -> Int -> RealType a -> Ptr a -> Int -> IO ()
+  her2k :: Order -> Uplo -> Transpose -> Int -> Int -> a -> Ptr a -> Int
+        -> Ptr a -> Int -> RealType a -> Ptr a -> Int -> IO ()
+  trmm  :: Order -> Side -> Uplo -> Transpose -> Diag -> Int -> Int
+        -> a -> Ptr a -> Int -> Ptr a -> Int -> IO ()
+  trsm  :: Order -> Side -> Uplo -> Transpose -> Diag -> Int -> Int
+        -> a -> Ptr a -> Int -> Ptr a -> Int -> IO ()
+
+-- | Blas operations that are only applicable to real numbers.
+--
+--   Note: although complex versions of 'rot' and 'rotg' exist in many
+--   implementations, they are not part of the official Blas standard and
+--   therefore not included here.  If you /really/ need them, submit a ticket
+--   so we can try to come up with a solution.
+class Numeric a => RealNumeric a where
+  rotg  :: Ptr a -> Ptr a -> Ptr a -> Ptr a -> IO ()
+  rotmg :: Ptr a -> Ptr a -> Ptr a -> a -> Ptr a -> IO ()
+  rot   :: Int -> Ptr a -> Int -> Ptr a -> Int -> a -> a -> IO ()
+  rotm  :: Int -> Ptr a -> Int -> Ptr a -> Int -> Ptr a -> IO ()
+
+instance Numeric Float where
+  type RealType Float = Float
+  dotu  = C.sdot
+  dotc  = C.sdot
+  nrm2  = C.snrm2
+  asum  = C.sasum
+  iamax = C.isamax
+  swap  = C.sswap
+  copy  = C.scopy
+  axpy  = C.saxpy
+  scal  = C.sscal
+  gemv  = C.sgemv
+  gbmv  = C.sgbmv
+  trmv  = C.strmv
+  tbmv  = C.stbmv
+  tpmv  = C.stpmv
+  trsv  = C.strsv
+  tbsv  = C.stbsv
+  tpsv  = C.stpsv
+  hemv  = C.ssymv
+  hbmv  = C.ssbmv
+  hpmv  = C.sspmv
+  geru  = C.sger
+  gerc  = C.sger
+  her   = C.ssyr
+  hpr   = C.sspr
+  her2  = C.ssyr2
+  hpr2  = C.sspr2
+  gemm  = C.sgemm
+  symm  = C.ssymm
+  hemm  = C.ssymm
+  syrk  = C.ssyrk
+  herk  = C.ssyrk
+  syr2k = C.ssyr2k
+  her2k = C.ssyr2k
+  trmm  = C.strmm
+  trsm  = C.strsm
+
+instance RealNumeric Float where
+  rotg  = C.srotg
+  rotmg = C.srotmg
+  rot   = C.srot
+  rotm  = C.srotm
+
+instance Numeric Double where
+  type RealType Double = Double
+  dotu  = C.ddot
+  dotc  = C.ddot
+  nrm2  = C.dnrm2
+  asum  = C.dasum
+  iamax = C.idamax
+  swap  = C.dswap
+  copy  = C.dcopy
+  axpy  = C.daxpy
+  scal  = C.dscal
+  gemv  = C.dgemv
+  gbmv  = C.dgbmv
+  trmv  = C.dtrmv
+  tbmv  = C.dtbmv
+  tpmv  = C.dtpmv
+  trsv  = C.dtrsv
+  tbsv  = C.dtbsv
+  tpsv  = C.dtpsv
+  hemv  = C.dsymv
+  hbmv  = C.dsbmv
+  hpmv  = C.dspmv
+  geru  = C.dger
+  gerc  = C.dger
+  her   = C.dsyr
+  hpr   = C.dspr
+  her2  = C.dsyr2
+  hpr2  = C.dspr2
+  gemm  = C.dgemm
+  symm  = C.dsymm
+  hemm  = C.dsymm
+  syrk  = C.dsyrk
+  herk  = C.dsyrk
+  syr2k = C.dsyr2k
+  her2k = C.dsyr2k
+  trmm  = C.dtrmm
+  trsm  = C.dtrsm
+
+instance RealNumeric Double where
+  rotg  = C.drotg
+  rotmg = C.drotmg
+  rot   = C.drot
+  rotm  = C.drotm
+
+instance Numeric (Complex Float) where
+  type RealType (Complex Float) = Float
+  dotu a b c d e = getReturnValue (C.cdotu_sub a b c d e)
+  dotc a b c d e = getReturnValue (C.cdotc_sub a b c d e)
+  nrm2  = C.scnrm2
+  asum  = C.scasum
+  iamax = C.icamax
+  swap  = C.cswap
+  copy  = C.ccopy
+  axpy  = C.caxpy
+  scal n (alpha :+ 0) = C.csscal n alpha
+  scal n  alpha       = C.cscal  n alpha
+  gemv  = C.cgemv
+  gbmv  = C.cgbmv
+  trmv  = C.ctrmv
+  tbmv  = C.ctbmv
+  tpmv  = C.ctpmv
+  trsv  = C.ctrsv
+  tbsv  = C.ctbsv
+  tpsv  = C.ctpsv
+  hemv  = C.chemv
+  hbmv  = C.chbmv
+  hpmv  = C.chpmv
+  geru  = C.cgeru
+  gerc  = C.cgerc
+  her   = C.cher
+  hpr   = C.chpr
+  her2  = C.cher2
+  hpr2  = C.chpr2
+  gemm  = C.cgemm
+  symm  = C.csymm
+  hemm  = C.chemm
+  syrk  = C.csyrk
+  herk  = C.cherk
+  syr2k = C.csyr2k
+  her2k = C.cher2k
+  trmm  = C.ctrmm
+  trsm  = C.ctrsm
+
+instance Numeric (Complex Double) where
+  type RealType (Complex Double) = Double
+  dotu a b c d e = getReturnValue (C.zdotu_sub a b c d e)
+  dotc a b c d e = getReturnValue (C.zdotc_sub a b c d e)
+  nrm2  = C.dznrm2
+  asum  = C.dzasum
+  iamax = C.izamax
+  swap  = C.zswap
+  copy  = C.zcopy
+  axpy  = C.zaxpy
+  scal n (alpha :+ 0) = C.zdscal n alpha
+  scal n  alpha       = C.zscal  n alpha
+  gemv  = C.zgemv
+  gbmv  = C.zgbmv
+  trmv  = C.ztrmv
+  tbmv  = C.ztbmv
+  tpmv  = C.ztpmv
+  trsv  = C.ztrsv
+  tbsv  = C.ztbsv
+  tpsv  = C.ztpsv
+  hemv  = C.zhemv
+  hbmv  = C.zhbmv
+  hpmv  = C.zhpmv
+  geru  = C.zgeru
+  gerc  = C.zgerc
+  her   = C.zher
+  hpr   = C.zhpr
+  her2  = C.zher2
+  hpr2  = C.zhpr2
+  gemm  = C.zgemm
+  symm  = C.zsymm
+  hemm  = C.zhemm
+  syrk  = C.zsyrk
+  herk  = C.zherk
+  syr2k = C.zsyr2k
+  her2k = C.zher2k
+  trmm  = C.ztrmm
+  trsm  = C.ztrsm
diff --git a/src/Blas/Generic/Unsafe.hs b/src/Blas/Generic/Unsafe.hs
new file mode 100644
--- /dev/null
+++ b/src/Blas/Generic/Unsafe.hs
@@ -0,0 +1,309 @@
+{- This file is auto-generated.  Do not edit directly. -}
+{-# LANGUAGE FlexibleInstances, TypeFamilies #-}
+{-|
+
+Stability: experimental
+
+Generic interface to Blas using unsafe foreign calls.  Refer to
+the GHC documentation for more information regarding appropriate use of safe
+and unsafe foreign calls.
+
+The functions here are named in a similar fashion to the original Blas
+interface, with the type-dependent letter(s) removed.  Some functions have
+been merged with others to allow the interface to work on both real and
+complex numbers.  If you can't a particular function, try looking for its
+corresponding complex equivalent (e.g. @symv@ is a special case of 'hemv'
+applied to real numbers).
+
+It'd be really nice if these functions were actually documented.  Alas, for
+the time being, you'll have to refer to the various Blas docs scattered across
+the Internet.  Note that the interface is based off of /CBlas/, not Fortran
+Blas, which is slightly different.
+
+-}
+module Blas.Generic.Unsafe
+       ( Numeric(..)
+       , RealNumeric(..)
+       , C.dsdot
+       , C.sdsdot
+       ) where
+import Data.Complex (Complex((:+)))
+import Foreign (Ptr, Storable)
+import FFI (getReturnValue)
+import Blas.Primitive.Types (Order, Transpose, Uplo, Diag, Side)
+import qualified Blas.Primitive.Unsafe as C
+
+-- | Blas operations that are applicable to real and complex numbers.
+--
+--   Instances are defined for the 4 types supported by Blas: the
+--   single- and double-precision floating point types and their complex
+--   versions.
+class (Floating a, Storable a) => Numeric a where
+
+  -- | The corresponding real type of @a@.
+  --
+  --   In other words, @'RealType' ('Complex' a)@ is an alias for @a@.  For
+  --   everything else, @'RealType' a@ is simply @a@.
+  type RealType a :: *
+
+  dotu  :: Int -> Ptr a -> Int -> Ptr a -> Int -> IO a
+  dotc  :: Int -> Ptr a -> Int -> Ptr a -> Int -> IO a
+  nrm2  :: Int -> Ptr a -> Int -> IO (RealType a)
+  asum  :: Int -> Ptr a -> Int -> IO (RealType a)
+  iamax :: Int -> Ptr a -> Int -> IO Int
+  swap  :: Int -> Ptr a -> Int -> Ptr a -> Int -> IO ()
+  copy  :: Int -> Ptr a -> Int -> Ptr a -> Int -> IO ()
+  axpy  :: Int -> a -> Ptr a -> Int -> Ptr a -> Int -> IO ()
+  scal  :: Int -> a -> Ptr a -> Int -> IO ()
+  gemv  :: Order -> Transpose -> Int -> Int -> a -> Ptr a -> Int -> Ptr a
+        -> Int -> a -> Ptr a -> Int -> IO ()
+  gbmv  :: Order -> Transpose -> Int -> Int -> Int -> Int -> a -> Ptr a
+        -> Int -> Ptr a -> Int -> a -> Ptr a -> Int -> IO ()
+  trmv  :: Order -> Uplo -> Transpose -> Diag -> Int -> Ptr a -> Int
+        -> Ptr a -> Int -> IO ()
+  tbmv  :: Order -> Uplo -> Transpose -> Diag -> Int -> Int -> Ptr a
+        -> Int -> Ptr a -> Int -> IO ()
+  tpmv  :: Order -> Uplo -> Transpose -> Diag -> Int -> Ptr a -> Ptr a
+        -> Int -> IO ()
+  trsv  :: Order -> Uplo -> Transpose -> Diag -> Int -> Ptr a -> Int
+        -> Ptr a -> Int -> IO ()
+  tbsv  :: Order -> Uplo -> Transpose -> Diag -> Int -> Int -> Ptr a
+        -> Int -> Ptr a -> Int -> IO ()
+  tpsv  :: Order -> Uplo -> Transpose -> Diag -> Int -> Ptr a -> Ptr a
+        -> Int -> IO ()
+  hemv  :: Order -> Uplo -> Int -> a -> Ptr a -> Int -> Ptr a -> Int
+        -> a -> Ptr a -> Int -> IO ()
+  hbmv  :: Order -> Uplo -> Int -> Int -> a -> Ptr a -> Int -> Ptr a
+        -> Int -> a -> Ptr a -> Int -> IO ()
+  hpmv  :: Order -> Uplo -> Int -> a -> Ptr a -> Ptr a -> Int -> a
+        -> Ptr a -> Int -> IO ()
+  geru  :: Order -> Int -> Int -> a -> Ptr a -> Int -> Ptr a -> Int
+        -> Ptr a -> Int -> IO ()
+  gerc  :: Order -> Int -> Int -> a -> Ptr a -> Int -> Ptr a -> Int
+        -> Ptr a -> Int -> IO ()
+  her   :: Order -> Uplo -> Int -> RealType a -> Ptr a -> Int
+        -> Ptr a -> Int -> IO ()
+  hpr   :: Order -> Uplo -> Int -> RealType a -> Ptr a -> Int
+        -> Ptr a -> IO ()
+  her2  :: Order -> Uplo -> Int -> a -> Ptr a -> Int -> Ptr a -> Int
+        -> Ptr a -> Int -> IO ()
+  hpr2  :: Order -> Uplo -> Int -> a -> Ptr a -> Int -> Ptr a -> Int
+        -> Ptr a -> IO ()
+
+  -- | Calculate a general matrix-matrix product:
+  --
+  --   > c := alpha * opa(a) * opb(b) + beta * c
+  --
+  --   where `opa` and `opb` are operations specified by @transa@ and
+  --   @transb@ respectively.
+  gemm  :: Order     -- ^ Layout of all matrices.
+        -> Transpose -- ^ (@transa@) Operation applied to @a@.
+        -> Transpose -- ^ (@transb@) Operation applied to @b@.
+        -> Int       -- ^ (@m@) Number of rows of @op(a)@ and @c@.
+        -> Int       -- ^ (@n@) Number of columns of @op(b)@ and @c@.
+        -> Int       -- ^ (@k@) Number of columns of @op(a)@ and
+                     --         number of of rows of @op(b)@.
+        -> a         -- ^ (@alpha@) Scaling factor of the product.
+        -> Ptr a     -- ^ (@a@) Pointer to a matrix.
+        -> Int       -- ^ (@lda@) Stride of the major dimension of @a@.
+        -> Ptr a     -- ^ (@b@) Pointer to a matrix.
+        -> Int       -- ^ (@ldb@) Stride of the major dimension of @b@.
+        -> a         -- ^ (@beta@) Scaling factor of the original @c@.
+        -> Ptr a     -- ^ (@c@) Pointer to a mutable matrix.
+        -> Int       -- ^ (@ldc@) Stride of the major dimension of @c@.
+        -> IO ()
+
+  symm  :: Order -> Side -> Uplo -> Int -> Int -> a -> Ptr a -> Int
+        -> Ptr a -> Int -> a -> Ptr a -> Int -> IO ()
+  syrk  :: Order -> Uplo -> Transpose -> Int -> Int -> a -> Ptr a -> Int
+        -> a -> Ptr a -> Int -> IO ()
+  syr2k :: Order -> Uplo -> Transpose -> Int -> Int -> a -> Ptr a -> Int
+        -> Ptr a -> Int -> a -> Ptr a -> Int -> IO ()
+  hemm  :: Order -> Side -> Uplo -> Int -> Int -> a -> Ptr a -> Int
+        -> Ptr a -> Int -> a -> Ptr a -> Int -> IO ()
+  herk  :: Order -> Uplo -> Transpose -> Int -> Int -> RealType a -> Ptr a
+        -> Int -> RealType a -> Ptr a -> Int -> IO ()
+  her2k :: Order -> Uplo -> Transpose -> Int -> Int -> a -> Ptr a -> Int
+        -> Ptr a -> Int -> RealType a -> Ptr a -> Int -> IO ()
+  trmm  :: Order -> Side -> Uplo -> Transpose -> Diag -> Int -> Int
+        -> a -> Ptr a -> Int -> Ptr a -> Int -> IO ()
+  trsm  :: Order -> Side -> Uplo -> Transpose -> Diag -> Int -> Int
+        -> a -> Ptr a -> Int -> Ptr a -> Int -> IO ()
+
+-- | Blas operations that are only applicable to real numbers.
+--
+--   Note: although complex versions of 'rot' and 'rotg' exist in many
+--   implementations, they are not part of the official Blas standard and
+--   therefore not included here.  If you /really/ need them, submit a ticket
+--   so we can try to come up with a solution.
+class Numeric a => RealNumeric a where
+  rotg  :: Ptr a -> Ptr a -> Ptr a -> Ptr a -> IO ()
+  rotmg :: Ptr a -> Ptr a -> Ptr a -> a -> Ptr a -> IO ()
+  rot   :: Int -> Ptr a -> Int -> Ptr a -> Int -> a -> a -> IO ()
+  rotm  :: Int -> Ptr a -> Int -> Ptr a -> Int -> Ptr a -> IO ()
+
+instance Numeric Float where
+  type RealType Float = Float
+  dotu  = C.sdot
+  dotc  = C.sdot
+  nrm2  = C.snrm2
+  asum  = C.sasum
+  iamax = C.isamax
+  swap  = C.sswap
+  copy  = C.scopy
+  axpy  = C.saxpy
+  scal  = C.sscal
+  gemv  = C.sgemv
+  gbmv  = C.sgbmv
+  trmv  = C.strmv
+  tbmv  = C.stbmv
+  tpmv  = C.stpmv
+  trsv  = C.strsv
+  tbsv  = C.stbsv
+  tpsv  = C.stpsv
+  hemv  = C.ssymv
+  hbmv  = C.ssbmv
+  hpmv  = C.sspmv
+  geru  = C.sger
+  gerc  = C.sger
+  her   = C.ssyr
+  hpr   = C.sspr
+  her2  = C.ssyr2
+  hpr2  = C.sspr2
+  gemm  = C.sgemm
+  symm  = C.ssymm
+  hemm  = C.ssymm
+  syrk  = C.ssyrk
+  herk  = C.ssyrk
+  syr2k = C.ssyr2k
+  her2k = C.ssyr2k
+  trmm  = C.strmm
+  trsm  = C.strsm
+
+instance RealNumeric Float where
+  rotg  = C.srotg
+  rotmg = C.srotmg
+  rot   = C.srot
+  rotm  = C.srotm
+
+instance Numeric Double where
+  type RealType Double = Double
+  dotu  = C.ddot
+  dotc  = C.ddot
+  nrm2  = C.dnrm2
+  asum  = C.dasum
+  iamax = C.idamax
+  swap  = C.dswap
+  copy  = C.dcopy
+  axpy  = C.daxpy
+  scal  = C.dscal
+  gemv  = C.dgemv
+  gbmv  = C.dgbmv
+  trmv  = C.dtrmv
+  tbmv  = C.dtbmv
+  tpmv  = C.dtpmv
+  trsv  = C.dtrsv
+  tbsv  = C.dtbsv
+  tpsv  = C.dtpsv
+  hemv  = C.dsymv
+  hbmv  = C.dsbmv
+  hpmv  = C.dspmv
+  geru  = C.dger
+  gerc  = C.dger
+  her   = C.dsyr
+  hpr   = C.dspr
+  her2  = C.dsyr2
+  hpr2  = C.dspr2
+  gemm  = C.dgemm
+  symm  = C.dsymm
+  hemm  = C.dsymm
+  syrk  = C.dsyrk
+  herk  = C.dsyrk
+  syr2k = C.dsyr2k
+  her2k = C.dsyr2k
+  trmm  = C.dtrmm
+  trsm  = C.dtrsm
+
+instance RealNumeric Double where
+  rotg  = C.drotg
+  rotmg = C.drotmg
+  rot   = C.drot
+  rotm  = C.drotm
+
+instance Numeric (Complex Float) where
+  type RealType (Complex Float) = Float
+  dotu a b c d e = getReturnValue (C.cdotu_sub a b c d e)
+  dotc a b c d e = getReturnValue (C.cdotc_sub a b c d e)
+  nrm2  = C.scnrm2
+  asum  = C.scasum
+  iamax = C.icamax
+  swap  = C.cswap
+  copy  = C.ccopy
+  axpy  = C.caxpy
+  scal n (alpha :+ 0) = C.csscal n alpha
+  scal n  alpha       = C.cscal  n alpha
+  gemv  = C.cgemv
+  gbmv  = C.cgbmv
+  trmv  = C.ctrmv
+  tbmv  = C.ctbmv
+  tpmv  = C.ctpmv
+  trsv  = C.ctrsv
+  tbsv  = C.ctbsv
+  tpsv  = C.ctpsv
+  hemv  = C.chemv
+  hbmv  = C.chbmv
+  hpmv  = C.chpmv
+  geru  = C.cgeru
+  gerc  = C.cgerc
+  her   = C.cher
+  hpr   = C.chpr
+  her2  = C.cher2
+  hpr2  = C.chpr2
+  gemm  = C.cgemm
+  symm  = C.csymm
+  hemm  = C.chemm
+  syrk  = C.csyrk
+  herk  = C.cherk
+  syr2k = C.csyr2k
+  her2k = C.cher2k
+  trmm  = C.ctrmm
+  trsm  = C.ctrsm
+
+instance Numeric (Complex Double) where
+  type RealType (Complex Double) = Double
+  dotu a b c d e = getReturnValue (C.zdotu_sub a b c d e)
+  dotc a b c d e = getReturnValue (C.zdotc_sub a b c d e)
+  nrm2  = C.dznrm2
+  asum  = C.dzasum
+  iamax = C.izamax
+  swap  = C.zswap
+  copy  = C.zcopy
+  axpy  = C.zaxpy
+  scal n (alpha :+ 0) = C.zdscal n alpha
+  scal n  alpha       = C.zscal  n alpha
+  gemv  = C.zgemv
+  gbmv  = C.zgbmv
+  trmv  = C.ztrmv
+  tbmv  = C.ztbmv
+  tpmv  = C.ztpmv
+  trsv  = C.ztrsv
+  tbsv  = C.ztbsv
+  tpsv  = C.ztpsv
+  hemv  = C.zhemv
+  hbmv  = C.zhbmv
+  hpmv  = C.zhpmv
+  geru  = C.zgeru
+  gerc  = C.zgerc
+  her   = C.zher
+  hpr   = C.zhpr
+  her2  = C.zher2
+  hpr2  = C.zhpr2
+  gemm  = C.zgemm
+  symm  = C.zsymm
+  hemm  = C.zhemm
+  syrk  = C.zsyrk
+  herk  = C.zherk
+  syr2k = C.zsyr2k
+  her2k = C.zher2k
+  trmm  = C.ztrmm
+  trsm  = C.ztrsm
diff --git a/src/Blas/Primitive/Safe.hs b/src/Blas/Primitive/Safe.hs
new file mode 100644
--- /dev/null
+++ b/src/Blas/Primitive/Safe.hs
@@ -0,0 +1,2840 @@
+-- GENERATED by C->Haskell Compiler, version 0.17.2 Crystal Seed, 24 Jan 2009 (Haskell)
+-- Edit the ORIGNAL .chs file instead!
+
+
+{-# LINE 1 "src/Blas/Primitive/Safe_.chs" #-}
+{- This file is auto-generated.  Do not edit directly. -}
+{-# LANGUAGE ForeignFunctionInterface #-}
+{-|
+
+Stability: stable
+
+Foreign function interface to Blas.  These functions use safe
+foreign calls.  Refer to the GHC documentation for more information regarding
+appropriate use of safe and unsafe foreign calls.
+
+-}
+module Blas.Primitive.Safe (sdsdot, dsdot, sdot, ddot, cdotu_sub, zdotu_sub, cdotc_sub, zdotc_sub, snrm2, dnrm2, scnrm2, dznrm2, sasum, dasum, scasum, dzasum, isamax, idamax, icamax, izamax, sswap, dswap, cswap, zswap, scopy, dcopy, ccopy, zcopy, saxpy, daxpy, caxpy, zaxpy, srotg, drotg, srotmg, drotmg, srot, drot, srotm, drotm, sscal, dscal, cscal, csscal, zscal, zdscal, sgemv, dgemv, cgemv, zgemv, sgbmv, dgbmv, cgbmv, zgbmv, strmv, dtrmv, ctrmv, ztrmv, stbmv, dtbmv, ctbmv, ztbmv, stpmv, dtpmv, ctpmv, ztpmv, strsv, dtrsv, ctrsv, ztrsv, stbsv, dtbsv, ctbsv, ztbsv, stpsv, dtpsv, ctpsv, ztpsv, ssymv, dsymv, ssbmv, dsbmv, sspmv, dspmv, sger, dger, ssyr, dsyr, ssyr2, dsyr2, sspr, dspr, sspr2, dspr2, chemv, zhemv, chbmv, zhbmv, chpmv, zhpmv, cgeru, zgeru, cgerc, zgerc, cher, zher, chpr, zhpr, cher2, zher2, chpr2, zhpr2, sgemm, dgemm, cgemm, zgemm, ssymm, dsymm, csymm, zsymm, ssyrk, dsyrk, csyrk, zsyrk, ssyr2k, dsyr2k, csyr2k, zsyr2k, chemm, zhemm, cherk, zherk, cher2k, zher2k, strmm, dtrmm, ctrmm, ztrmm, strsm, dtrsm, ctrsm, ztrsm) where
+import Prelude hiding (Either(Left, Right))
+import Data.Complex (Complex)
+import Foreign (Ptr, castPtr)
+import Foreign.C.Types
+import Foreign.Storable.Complex ()
+import Blas.Primitive.Types
+import BlasCTypes
+import FFI
+
+
+
+sdsdot :: (Int) -> (Float) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> IO ((Float))
+sdsdot a1 a2 a3 a4 a5 a6 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = CFloat a2} in
+  let {a3' = castPtr a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  sdsdot'_ a1' a2' a3' a4' a5' a6' >>= \res ->
+  let {res' = fromCFloat res} in
+  return (res')
+
+{-# LINE 24 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+dsdot :: (Int) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> IO ((Double))
+dsdot a1 a2 a3 a4 a5 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = castPtr a4} in
+  let {a5' = fromIntegral a5} in
+  dsdot'_ a1' a2' a3' a4' a5' >>= \res ->
+  let {res' = fromCDouble res} in
+  return (res')
+
+{-# LINE 26 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+sdot :: (Int) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> IO ((Float))
+sdot a1 a2 a3 a4 a5 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = castPtr a4} in
+  let {a5' = fromIntegral a5} in
+  sdot'_ a1' a2' a3' a4' a5' >>= \res ->
+  let {res' = fromCFloat res} in
+  return (res')
+
+{-# LINE 28 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+ddot :: (Int) -> (Ptr Double) -> (Int) -> (Ptr Double) -> (Int) -> IO ((Double))
+ddot a1 a2 a3 a4 a5 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = castPtr a4} in
+  let {a5' = fromIntegral a5} in
+  ddot'_ a1' a2' a3' a4' a5' >>= \res ->
+  let {res' = fromCDouble res} in
+  return (res')
+
+{-# LINE 30 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+cdotu_sub :: (Int) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> IO ()
+cdotu_sub a1 a2 a3 a4 a5 a6 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = castPtr a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = castPtr a6} in
+  cdotu_sub'_ a1' a2' a3' a4' a5' a6' >>
+  return ()
+
+{-# LINE 32 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+zdotu_sub :: (Int) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> IO ()
+zdotu_sub a1 a2 a3 a4 a5 a6 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = castPtr a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = castPtr a6} in
+  zdotu_sub'_ a1' a2' a3' a4' a5' a6' >>
+  return ()
+
+{-# LINE 34 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+cdotc_sub :: (Int) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> IO ()
+cdotc_sub a1 a2 a3 a4 a5 a6 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = castPtr a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = castPtr a6} in
+  cdotc_sub'_ a1' a2' a3' a4' a5' a6' >>
+  return ()
+
+{-# LINE 36 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+zdotc_sub :: (Int) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> IO ()
+zdotc_sub a1 a2 a3 a4 a5 a6 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = castPtr a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = castPtr a6} in
+  zdotc_sub'_ a1' a2' a3' a4' a5' a6' >>
+  return ()
+
+{-# LINE 38 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+snrm2 :: (Int) -> (Ptr Float) -> (Int) -> IO ((Float))
+snrm2 a1 a2 a3 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  snrm2'_ a1' a2' a3' >>= \res ->
+  let {res' = fromCFloat res} in
+  return (res')
+
+{-# LINE 40 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+dnrm2 :: (Int) -> (Ptr Double) -> (Int) -> IO ((Double))
+dnrm2 a1 a2 a3 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  dnrm2'_ a1' a2' a3' >>= \res ->
+  let {res' = fromCDouble res} in
+  return (res')
+
+{-# LINE 42 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+scnrm2 :: (Int) -> (Ptr (Complex Float)) -> (Int) -> IO ((Float))
+scnrm2 a1 a2 a3 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  scnrm2'_ a1' a2' a3' >>= \res ->
+  let {res' = fromCFloat res} in
+  return (res')
+
+{-# LINE 44 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+dznrm2 :: (Int) -> (Ptr (Complex Double)) -> (Int) -> IO ((Double))
+dznrm2 a1 a2 a3 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  dznrm2'_ a1' a2' a3' >>= \res ->
+  let {res' = fromCDouble res} in
+  return (res')
+
+{-# LINE 46 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+sasum :: (Int) -> (Ptr Float) -> (Int) -> IO ((Float))
+sasum a1 a2 a3 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  sasum'_ a1' a2' a3' >>= \res ->
+  let {res' = fromCFloat res} in
+  return (res')
+
+{-# LINE 48 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+dasum :: (Int) -> (Ptr Double) -> (Int) -> IO ((Double))
+dasum a1 a2 a3 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  dasum'_ a1' a2' a3' >>= \res ->
+  let {res' = fromCDouble res} in
+  return (res')
+
+{-# LINE 50 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+scasum :: (Int) -> (Ptr (Complex Float)) -> (Int) -> IO ((Float))
+scasum a1 a2 a3 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  scasum'_ a1' a2' a3' >>= \res ->
+  let {res' = fromCFloat res} in
+  return (res')
+
+{-# LINE 52 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+dzasum :: (Int) -> (Ptr (Complex Double)) -> (Int) -> IO ((Double))
+dzasum a1 a2 a3 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  dzasum'_ a1' a2' a3' >>= \res ->
+  let {res' = fromCDouble res} in
+  return (res')
+
+{-# LINE 54 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+isamax :: (Int) -> (Ptr Float) -> (Int) -> IO ((Int))
+isamax a1 a2 a3 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  isamax'_ a1' a2' a3' >>= \res ->
+  let {res' = fromIntegral res} in
+  return (res')
+
+{-# LINE 56 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+idamax :: (Int) -> (Ptr Double) -> (Int) -> IO ((Int))
+idamax a1 a2 a3 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  idamax'_ a1' a2' a3' >>= \res ->
+  let {res' = fromIntegral res} in
+  return (res')
+
+{-# LINE 58 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+icamax :: (Int) -> (Ptr (Complex Float)) -> (Int) -> IO ((Int))
+icamax a1 a2 a3 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  icamax'_ a1' a2' a3' >>= \res ->
+  let {res' = fromIntegral res} in
+  return (res')
+
+{-# LINE 60 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+izamax :: (Int) -> (Ptr (Complex Double)) -> (Int) -> IO ((Int))
+izamax a1 a2 a3 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  izamax'_ a1' a2' a3' >>= \res ->
+  let {res' = fromIntegral res} in
+  return (res')
+
+{-# LINE 62 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+sswap :: (Int) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> IO ()
+sswap a1 a2 a3 a4 a5 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = castPtr a4} in
+  let {a5' = fromIntegral a5} in
+  sswap'_ a1' a2' a3' a4' a5' >>
+  return ()
+
+{-# LINE 64 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+dswap :: (Int) -> (Ptr Double) -> (Int) -> (Ptr Double) -> (Int) -> IO ()
+dswap a1 a2 a3 a4 a5 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = castPtr a4} in
+  let {a5' = fromIntegral a5} in
+  dswap'_ a1' a2' a3' a4' a5' >>
+  return ()
+
+{-# LINE 66 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+cswap :: (Int) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+cswap a1 a2 a3 a4 a5 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = castPtr a4} in
+  let {a5' = fromIntegral a5} in
+  cswap'_ a1' a2' a3' a4' a5' >>
+  return ()
+
+{-# LINE 68 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+zswap :: (Int) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+zswap a1 a2 a3 a4 a5 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = castPtr a4} in
+  let {a5' = fromIntegral a5} in
+  zswap'_ a1' a2' a3' a4' a5' >>
+  return ()
+
+{-# LINE 70 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+scopy :: (Int) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> IO ()
+scopy a1 a2 a3 a4 a5 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = castPtr a4} in
+  let {a5' = fromIntegral a5} in
+  scopy'_ a1' a2' a3' a4' a5' >>
+  return ()
+
+{-# LINE 72 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+dcopy :: (Int) -> (Ptr Double) -> (Int) -> (Ptr Double) -> (Int) -> IO ()
+dcopy a1 a2 a3 a4 a5 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = castPtr a4} in
+  let {a5' = fromIntegral a5} in
+  dcopy'_ a1' a2' a3' a4' a5' >>
+  return ()
+
+{-# LINE 74 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+ccopy :: (Int) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+ccopy a1 a2 a3 a4 a5 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = castPtr a4} in
+  let {a5' = fromIntegral a5} in
+  ccopy'_ a1' a2' a3' a4' a5' >>
+  return ()
+
+{-# LINE 76 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+zcopy :: (Int) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+zcopy a1 a2 a3 a4 a5 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = castPtr a4} in
+  let {a5' = fromIntegral a5} in
+  zcopy'_ a1' a2' a3' a4' a5' >>
+  return ()
+
+{-# LINE 78 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+saxpy :: (Int) -> (Float) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> IO ()
+saxpy a1 a2 a3 a4 a5 a6 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = CFloat a2} in
+  let {a3' = castPtr a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  saxpy'_ a1' a2' a3' a4' a5' a6' >>
+  return ()
+
+{-# LINE 80 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+daxpy :: (Int) -> (Double) -> (Ptr Double) -> (Int) -> (Ptr Double) -> (Int) -> IO ()
+daxpy a1 a2 a3 a4 a5 a6 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = CDouble a2} in
+  let {a3' = castPtr a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  daxpy'_ a1' a2' a3' a4' a5' a6' >>
+  return ()
+
+{-# LINE 82 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+caxpy :: (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+caxpy a1 a2 a3 a4 a5 a6 =
+  let {a1' = fromIntegral a1} in
+  withVoidPtr a2 $ \a2' ->
+  let {a3' = castPtr a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  caxpy'_ a1' a2' a3' a4' a5' a6' >>
+  return ()
+
+{-# LINE 84 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+zaxpy :: (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+zaxpy a1 a2 a3 a4 a5 a6 =
+  let {a1' = fromIntegral a1} in
+  withVoidPtr a2 $ \a2' ->
+  let {a3' = castPtr a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  zaxpy'_ a1' a2' a3' a4' a5' a6' >>
+  return ()
+
+{-# LINE 86 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+srotg :: (Ptr Float) -> (Ptr Float) -> (Ptr Float) -> (Ptr Float) -> IO ()
+srotg a1 a2 a3 a4 =
+  let {a1' = castPtr a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = castPtr a3} in
+  let {a4' = castPtr a4} in
+  srotg'_ a1' a2' a3' a4' >>
+  return ()
+
+{-# LINE 88 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+drotg :: (Ptr Double) -> (Ptr Double) -> (Ptr Double) -> (Ptr Double) -> IO ()
+drotg a1 a2 a3 a4 =
+  let {a1' = castPtr a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = castPtr a3} in
+  let {a4' = castPtr a4} in
+  drotg'_ a1' a2' a3' a4' >>
+  return ()
+
+{-# LINE 90 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+srotmg :: (Ptr Float) -> (Ptr Float) -> (Ptr Float) -> (Float) -> (Ptr Float) -> IO ()
+srotmg a1 a2 a3 a4 a5 =
+  let {a1' = castPtr a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = castPtr a3} in
+  let {a4' = CFloat a4} in
+  let {a5' = castPtr a5} in
+  srotmg'_ a1' a2' a3' a4' a5' >>
+  return ()
+
+{-# LINE 92 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+drotmg :: (Ptr Double) -> (Ptr Double) -> (Ptr Double) -> (Double) -> (Ptr Double) -> IO ()
+drotmg a1 a2 a3 a4 a5 =
+  let {a1' = castPtr a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = castPtr a3} in
+  let {a4' = CDouble a4} in
+  let {a5' = castPtr a5} in
+  drotmg'_ a1' a2' a3' a4' a5' >>
+  return ()
+
+{-# LINE 94 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+srot :: (Int) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> (Float) -> (Float) -> IO ()
+srot a1 a2 a3 a4 a5 a6 a7 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = castPtr a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = CFloat a6} in
+  let {a7' = CFloat a7} in
+  srot'_ a1' a2' a3' a4' a5' a6' a7' >>
+  return ()
+
+{-# LINE 96 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+drot :: (Int) -> (Ptr Double) -> (Int) -> (Ptr Double) -> (Int) -> (Double) -> (Double) -> IO ()
+drot a1 a2 a3 a4 a5 a6 a7 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = castPtr a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = CDouble a6} in
+  let {a7' = CDouble a7} in
+  drot'_ a1' a2' a3' a4' a5' a6' a7' >>
+  return ()
+
+{-# LINE 98 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+srotm :: (Int) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> (Ptr Float) -> IO ()
+srotm a1 a2 a3 a4 a5 a6 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = castPtr a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = castPtr a6} in
+  srotm'_ a1' a2' a3' a4' a5' a6' >>
+  return ()
+
+{-# LINE 100 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+drotm :: (Int) -> (Ptr Double) -> (Int) -> (Ptr Double) -> (Int) -> (Ptr Double) -> IO ()
+drotm a1 a2 a3 a4 a5 a6 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = castPtr a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = castPtr a6} in
+  drotm'_ a1' a2' a3' a4' a5' a6' >>
+  return ()
+
+{-# LINE 102 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+sscal :: (Int) -> (Float) -> (Ptr Float) -> (Int) -> IO ()
+sscal a1 a2 a3 a4 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = CFloat a2} in
+  let {a3' = castPtr a3} in
+  let {a4' = fromIntegral a4} in
+  sscal'_ a1' a2' a3' a4' >>
+  return ()
+
+{-# LINE 104 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+dscal :: (Int) -> (Double) -> (Ptr Double) -> (Int) -> IO ()
+dscal a1 a2 a3 a4 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = CDouble a2} in
+  let {a3' = castPtr a3} in
+  let {a4' = fromIntegral a4} in
+  dscal'_ a1' a2' a3' a4' >>
+  return ()
+
+{-# LINE 106 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+cscal :: (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+cscal a1 a2 a3 a4 =
+  let {a1' = fromIntegral a1} in
+  withVoidPtr a2 $ \a2' ->
+  let {a3' = castPtr a3} in
+  let {a4' = fromIntegral a4} in
+  cscal'_ a1' a2' a3' a4' >>
+  return ()
+
+{-# LINE 108 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+csscal :: (Int) -> (Float) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+csscal a1 a2 a3 a4 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = CFloat a2} in
+  let {a3' = castPtr a3} in
+  let {a4' = fromIntegral a4} in
+  csscal'_ a1' a2' a3' a4' >>
+  return ()
+
+{-# LINE 110 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+zscal :: (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+zscal a1 a2 a3 a4 =
+  let {a1' = fromIntegral a1} in
+  withVoidPtr a2 $ \a2' ->
+  let {a3' = castPtr a3} in
+  let {a4' = fromIntegral a4} in
+  zscal'_ a1' a2' a3' a4' >>
+  return ()
+
+{-# LINE 112 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+zdscal :: (Int) -> (Double) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+zdscal a1 a2 a3 a4 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = CDouble a2} in
+  let {a3' = castPtr a3} in
+  let {a4' = fromIntegral a4} in
+  zdscal'_ a1' a2' a3' a4' >>
+  return ()
+
+{-# LINE 114 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+sgemv :: (Order) -> (Transpose) -> (Int) -> (Int) -> (Float) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> (Float) -> (Ptr Float) -> (Int) -> IO ()
+sgemv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = CFloat a5} in
+  let {a6' = castPtr a6} in
+  let {a7' = fromIntegral a7} in
+  let {a8' = castPtr a8} in
+  let {a9' = fromIntegral a9} in
+  let {a10' = CFloat a10} in
+  let {a11' = castPtr a11} in
+  let {a12' = fromIntegral a12} in
+  sgemv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' >>
+  return ()
+
+{-# LINE 116 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+dgemv :: (Order) -> (Transpose) -> (Int) -> (Int) -> (Double) -> (Ptr Double) -> (Int) -> (Ptr Double) -> (Int) -> (Double) -> (Ptr Double) -> (Int) -> IO ()
+dgemv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = CDouble a5} in
+  let {a6' = castPtr a6} in
+  let {a7' = fromIntegral a7} in
+  let {a8' = castPtr a8} in
+  let {a9' = fromIntegral a9} in
+  let {a10' = CDouble a10} in
+  let {a11' = castPtr a11} in
+  let {a12' = fromIntegral a12} in
+  dgemv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' >>
+  return ()
+
+{-# LINE 118 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+cgemv :: (Order) -> (Transpose) -> (Int) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+cgemv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = fromIntegral a4} in
+  withVoidPtr a5 $ \a5' ->
+  let {a6' = castPtr a6} in
+  let {a7' = fromIntegral a7} in
+  let {a8' = castPtr a8} in
+  let {a9' = fromIntegral a9} in
+  withVoidPtr a10 $ \a10' ->
+  let {a11' = castPtr a11} in
+  let {a12' = fromIntegral a12} in
+  cgemv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' >>
+  return ()
+
+{-# LINE 120 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+zgemv :: (Order) -> (Transpose) -> (Int) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+zgemv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = fromIntegral a4} in
+  withVoidPtr a5 $ \a5' ->
+  let {a6' = castPtr a6} in
+  let {a7' = fromIntegral a7} in
+  let {a8' = castPtr a8} in
+  let {a9' = fromIntegral a9} in
+  withVoidPtr a10 $ \a10' ->
+  let {a11' = castPtr a11} in
+  let {a12' = fromIntegral a12} in
+  zgemv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' >>
+  return ()
+
+{-# LINE 122 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+sgbmv :: (Order) -> (Transpose) -> (Int) -> (Int) -> (Int) -> (Int) -> (Float) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> (Float) -> (Ptr Float) -> (Int) -> IO ()
+sgbmv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = CFloat a7} in
+  let {a8' = castPtr a8} in
+  let {a9' = fromIntegral a9} in
+  let {a10' = castPtr a10} in
+  let {a11' = fromIntegral a11} in
+  let {a12' = CFloat a12} in
+  let {a13' = castPtr a13} in
+  let {a14' = fromIntegral a14} in
+  sgbmv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' >>
+  return ()
+
+{-# LINE 124 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+dgbmv :: (Order) -> (Transpose) -> (Int) -> (Int) -> (Int) -> (Int) -> (Double) -> (Ptr Double) -> (Int) -> (Ptr Double) -> (Int) -> (Double) -> (Ptr Double) -> (Int) -> IO ()
+dgbmv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = CDouble a7} in
+  let {a8' = castPtr a8} in
+  let {a9' = fromIntegral a9} in
+  let {a10' = castPtr a10} in
+  let {a11' = fromIntegral a11} in
+  let {a12' = CDouble a12} in
+  let {a13' = castPtr a13} in
+  let {a14' = fromIntegral a14} in
+  dgbmv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' >>
+  return ()
+
+{-# LINE 126 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+cgbmv :: (Order) -> (Transpose) -> (Int) -> (Int) -> (Int) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+cgbmv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = fromIntegral a6} in
+  withVoidPtr a7 $ \a7' ->
+  let {a8' = castPtr a8} in
+  let {a9' = fromIntegral a9} in
+  let {a10' = castPtr a10} in
+  let {a11' = fromIntegral a11} in
+  withVoidPtr a12 $ \a12' ->
+  let {a13' = castPtr a13} in
+  let {a14' = fromIntegral a14} in
+  cgbmv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' >>
+  return ()
+
+{-# LINE 128 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+zgbmv :: (Order) -> (Transpose) -> (Int) -> (Int) -> (Int) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+zgbmv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = fromIntegral a6} in
+  withVoidPtr a7 $ \a7' ->
+  let {a8' = castPtr a8} in
+  let {a9' = fromIntegral a9} in
+  let {a10' = castPtr a10} in
+  let {a11' = fromIntegral a11} in
+  withVoidPtr a12 $ \a12' ->
+  let {a13' = castPtr a13} in
+  let {a14' = fromIntegral a14} in
+  zgbmv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' >>
+  return ()
+
+{-# LINE 130 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+strmv :: (Order) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> IO ()
+strmv a1 a2 a3 a4 a5 a6 a7 a8 a9 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = castPtr a6} in
+  let {a7' = fromIntegral a7} in
+  let {a8' = castPtr a8} in
+  let {a9' = fromIntegral a9} in
+  strmv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' >>
+  return ()
+
+{-# LINE 132 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+dtrmv :: (Order) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Ptr Double) -> (Int) -> (Ptr Double) -> (Int) -> IO ()
+dtrmv a1 a2 a3 a4 a5 a6 a7 a8 a9 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = castPtr a6} in
+  let {a7' = fromIntegral a7} in
+  let {a8' = castPtr a8} in
+  let {a9' = fromIntegral a9} in
+  dtrmv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' >>
+  return ()
+
+{-# LINE 134 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+ctrmv :: (Order) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+ctrmv a1 a2 a3 a4 a5 a6 a7 a8 a9 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = castPtr a6} in
+  let {a7' = fromIntegral a7} in
+  let {a8' = castPtr a8} in
+  let {a9' = fromIntegral a9} in
+  ctrmv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' >>
+  return ()
+
+{-# LINE 136 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+ztrmv :: (Order) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+ztrmv a1 a2 a3 a4 a5 a6 a7 a8 a9 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = castPtr a6} in
+  let {a7' = fromIntegral a7} in
+  let {a8' = castPtr a8} in
+  let {a9' = fromIntegral a9} in
+  ztrmv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' >>
+  return ()
+
+{-# LINE 138 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+stbmv :: (Order) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Int) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> IO ()
+stbmv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  stbmv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' >>
+  return ()
+
+{-# LINE 140 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+dtbmv :: (Order) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Int) -> (Ptr Double) -> (Int) -> (Ptr Double) -> (Int) -> IO ()
+dtbmv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  dtbmv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' >>
+  return ()
+
+{-# LINE 142 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+ctbmv :: (Order) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+ctbmv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  ctbmv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' >>
+  return ()
+
+{-# LINE 144 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+ztbmv :: (Order) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+ztbmv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  ztbmv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' >>
+  return ()
+
+{-# LINE 146 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+stpmv :: (Order) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Ptr Float) -> (Ptr Float) -> (Int) -> IO ()
+stpmv a1 a2 a3 a4 a5 a6 a7 a8 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = castPtr a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  stpmv'_ a1' a2' a3' a4' a5' a6' a7' a8' >>
+  return ()
+
+{-# LINE 148 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+dtpmv :: (Order) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Ptr Double) -> (Ptr Double) -> (Int) -> IO ()
+dtpmv a1 a2 a3 a4 a5 a6 a7 a8 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = castPtr a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  dtpmv'_ a1' a2' a3' a4' a5' a6' a7' a8' >>
+  return ()
+
+{-# LINE 150 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+ctpmv :: (Order) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Ptr (Complex Float)) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+ctpmv a1 a2 a3 a4 a5 a6 a7 a8 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = castPtr a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  ctpmv'_ a1' a2' a3' a4' a5' a6' a7' a8' >>
+  return ()
+
+{-# LINE 152 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+ztpmv :: (Order) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Ptr (Complex Double)) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+ztpmv a1 a2 a3 a4 a5 a6 a7 a8 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = castPtr a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  ztpmv'_ a1' a2' a3' a4' a5' a6' a7' a8' >>
+  return ()
+
+{-# LINE 154 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+strsv :: (Order) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> IO ()
+strsv a1 a2 a3 a4 a5 a6 a7 a8 a9 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = castPtr a6} in
+  let {a7' = fromIntegral a7} in
+  let {a8' = castPtr a8} in
+  let {a9' = fromIntegral a9} in
+  strsv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' >>
+  return ()
+
+{-# LINE 156 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+dtrsv :: (Order) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Ptr Double) -> (Int) -> (Ptr Double) -> (Int) -> IO ()
+dtrsv a1 a2 a3 a4 a5 a6 a7 a8 a9 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = castPtr a6} in
+  let {a7' = fromIntegral a7} in
+  let {a8' = castPtr a8} in
+  let {a9' = fromIntegral a9} in
+  dtrsv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' >>
+  return ()
+
+{-# LINE 158 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+ctrsv :: (Order) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+ctrsv a1 a2 a3 a4 a5 a6 a7 a8 a9 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = castPtr a6} in
+  let {a7' = fromIntegral a7} in
+  let {a8' = castPtr a8} in
+  let {a9' = fromIntegral a9} in
+  ctrsv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' >>
+  return ()
+
+{-# LINE 160 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+ztrsv :: (Order) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+ztrsv a1 a2 a3 a4 a5 a6 a7 a8 a9 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = castPtr a6} in
+  let {a7' = fromIntegral a7} in
+  let {a8' = castPtr a8} in
+  let {a9' = fromIntegral a9} in
+  ztrsv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' >>
+  return ()
+
+{-# LINE 162 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+stbsv :: (Order) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Int) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> IO ()
+stbsv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  stbsv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' >>
+  return ()
+
+{-# LINE 164 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+dtbsv :: (Order) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Int) -> (Ptr Double) -> (Int) -> (Ptr Double) -> (Int) -> IO ()
+dtbsv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  dtbsv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' >>
+  return ()
+
+{-# LINE 166 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+ctbsv :: (Order) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+ctbsv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  ctbsv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' >>
+  return ()
+
+{-# LINE 168 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+ztbsv :: (Order) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+ztbsv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  ztbsv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' >>
+  return ()
+
+{-# LINE 170 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+stpsv :: (Order) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Ptr Float) -> (Ptr Float) -> (Int) -> IO ()
+stpsv a1 a2 a3 a4 a5 a6 a7 a8 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = castPtr a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  stpsv'_ a1' a2' a3' a4' a5' a6' a7' a8' >>
+  return ()
+
+{-# LINE 172 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+dtpsv :: (Order) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Ptr Double) -> (Ptr Double) -> (Int) -> IO ()
+dtpsv a1 a2 a3 a4 a5 a6 a7 a8 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = castPtr a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  dtpsv'_ a1' a2' a3' a4' a5' a6' a7' a8' >>
+  return ()
+
+{-# LINE 174 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+ctpsv :: (Order) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Ptr (Complex Float)) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+ctpsv a1 a2 a3 a4 a5 a6 a7 a8 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = castPtr a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  ctpsv'_ a1' a2' a3' a4' a5' a6' a7' a8' >>
+  return ()
+
+{-# LINE 176 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+ztpsv :: (Order) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Ptr (Complex Double)) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+ztpsv a1 a2 a3 a4 a5 a6 a7 a8 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = castPtr a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  ztpsv'_ a1' a2' a3' a4' a5' a6' a7' a8' >>
+  return ()
+
+{-# LINE 178 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+ssymv :: (Order) -> (Uplo) -> (Int) -> (Float) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> (Float) -> (Ptr Float) -> (Int) -> IO ()
+ssymv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = CFloat a4} in
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = CFloat a9} in
+  let {a10' = castPtr a10} in
+  let {a11' = fromIntegral a11} in
+  ssymv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' >>
+  return ()
+
+{-# LINE 180 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+dsymv :: (Order) -> (Uplo) -> (Int) -> (Double) -> (Ptr Double) -> (Int) -> (Ptr Double) -> (Int) -> (Double) -> (Ptr Double) -> (Int) -> IO ()
+dsymv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = CDouble a4} in
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = CDouble a9} in
+  let {a10' = castPtr a10} in
+  let {a11' = fromIntegral a11} in
+  dsymv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' >>
+  return ()
+
+{-# LINE 182 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+ssbmv :: (Order) -> (Uplo) -> (Int) -> (Int) -> (Float) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> (Float) -> (Ptr Float) -> (Int) -> IO ()
+ssbmv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = CFloat a5} in
+  let {a6' = castPtr a6} in
+  let {a7' = fromIntegral a7} in
+  let {a8' = castPtr a8} in
+  let {a9' = fromIntegral a9} in
+  let {a10' = CFloat a10} in
+  let {a11' = castPtr a11} in
+  let {a12' = fromIntegral a12} in
+  ssbmv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' >>
+  return ()
+
+{-# LINE 184 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+dsbmv :: (Order) -> (Uplo) -> (Int) -> (Int) -> (Double) -> (Ptr Double) -> (Int) -> (Ptr Double) -> (Int) -> (Double) -> (Ptr Double) -> (Int) -> IO ()
+dsbmv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = CDouble a5} in
+  let {a6' = castPtr a6} in
+  let {a7' = fromIntegral a7} in
+  let {a8' = castPtr a8} in
+  let {a9' = fromIntegral a9} in
+  let {a10' = CDouble a10} in
+  let {a11' = castPtr a11} in
+  let {a12' = fromIntegral a12} in
+  dsbmv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' >>
+  return ()
+
+{-# LINE 186 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+sspmv :: (Order) -> (Uplo) -> (Int) -> (Float) -> (Ptr Float) -> (Ptr Float) -> (Int) -> (Float) -> (Ptr Float) -> (Int) -> IO ()
+sspmv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = CFloat a4} in
+  let {a5' = castPtr a5} in
+  let {a6' = castPtr a6} in
+  let {a7' = fromIntegral a7} in
+  let {a8' = CFloat a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  sspmv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' >>
+  return ()
+
+{-# LINE 188 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+dspmv :: (Order) -> (Uplo) -> (Int) -> (Double) -> (Ptr Double) -> (Ptr Double) -> (Int) -> (Double) -> (Ptr Double) -> (Int) -> IO ()
+dspmv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = CDouble a4} in
+  let {a5' = castPtr a5} in
+  let {a6' = castPtr a6} in
+  let {a7' = fromIntegral a7} in
+  let {a8' = CDouble a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  dspmv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' >>
+  return ()
+
+{-# LINE 190 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+sger :: (Order) -> (Int) -> (Int) -> (Float) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> IO ()
+sger a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 =
+  let {a1' = toCEnum a1} in
+  let {a2' = fromIntegral a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = CFloat a4} in
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  sger'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' >>
+  return ()
+
+{-# LINE 192 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+dger :: (Order) -> (Int) -> (Int) -> (Double) -> (Ptr Double) -> (Int) -> (Ptr Double) -> (Int) -> (Ptr Double) -> (Int) -> IO ()
+dger a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 =
+  let {a1' = toCEnum a1} in
+  let {a2' = fromIntegral a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = CDouble a4} in
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  dger'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' >>
+  return ()
+
+{-# LINE 194 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+ssyr :: (Order) -> (Uplo) -> (Int) -> (Float) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> IO ()
+ssyr a1 a2 a3 a4 a5 a6 a7 a8 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = CFloat a4} in
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  ssyr'_ a1' a2' a3' a4' a5' a6' a7' a8' >>
+  return ()
+
+{-# LINE 196 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+dsyr :: (Order) -> (Uplo) -> (Int) -> (Double) -> (Ptr Double) -> (Int) -> (Ptr Double) -> (Int) -> IO ()
+dsyr a1 a2 a3 a4 a5 a6 a7 a8 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = CDouble a4} in
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  dsyr'_ a1' a2' a3' a4' a5' a6' a7' a8' >>
+  return ()
+
+{-# LINE 198 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+ssyr2 :: (Order) -> (Uplo) -> (Int) -> (Float) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> IO ()
+ssyr2 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = CFloat a4} in
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  ssyr2'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' >>
+  return ()
+
+{-# LINE 200 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+dsyr2 :: (Order) -> (Uplo) -> (Int) -> (Double) -> (Ptr Double) -> (Int) -> (Ptr Double) -> (Int) -> (Ptr Double) -> (Int) -> IO ()
+dsyr2 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = CDouble a4} in
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  dsyr2'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' >>
+  return ()
+
+{-# LINE 202 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+sspr :: (Order) -> (Uplo) -> (Int) -> (Float) -> (Ptr Float) -> (Int) -> (Ptr Float) -> IO ()
+sspr a1 a2 a3 a4 a5 a6 a7 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = CFloat a4} in
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  sspr'_ a1' a2' a3' a4' a5' a6' a7' >>
+  return ()
+
+{-# LINE 204 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+dspr :: (Order) -> (Uplo) -> (Int) -> (Double) -> (Ptr Double) -> (Int) -> (Ptr Double) -> IO ()
+dspr a1 a2 a3 a4 a5 a6 a7 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = CDouble a4} in
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  dspr'_ a1' a2' a3' a4' a5' a6' a7' >>
+  return ()
+
+{-# LINE 206 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+sspr2 :: (Order) -> (Uplo) -> (Int) -> (Float) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> (Ptr Float) -> IO ()
+sspr2 a1 a2 a3 a4 a5 a6 a7 a8 a9 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = CFloat a4} in
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  sspr2'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' >>
+  return ()
+
+{-# LINE 208 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+dspr2 :: (Order) -> (Uplo) -> (Int) -> (Double) -> (Ptr Double) -> (Int) -> (Ptr Double) -> (Int) -> (Ptr Double) -> IO ()
+dspr2 a1 a2 a3 a4 a5 a6 a7 a8 a9 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = CDouble a4} in
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  dspr2'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' >>
+  return ()
+
+{-# LINE 210 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+chemv :: (Order) -> (Uplo) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+chemv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  withVoidPtr a4 $ \a4' ->
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  withVoidPtr a9 $ \a9' ->
+  let {a10' = castPtr a10} in
+  let {a11' = fromIntegral a11} in
+  chemv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' >>
+  return ()
+
+{-# LINE 212 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+zhemv :: (Order) -> (Uplo) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+zhemv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  withVoidPtr a4 $ \a4' ->
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  withVoidPtr a9 $ \a9' ->
+  let {a10' = castPtr a10} in
+  let {a11' = fromIntegral a11} in
+  zhemv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' >>
+  return ()
+
+{-# LINE 214 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+chbmv :: (Order) -> (Uplo) -> (Int) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+chbmv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = fromIntegral a4} in
+  withVoidPtr a5 $ \a5' ->
+  let {a6' = castPtr a6} in
+  let {a7' = fromIntegral a7} in
+  let {a8' = castPtr a8} in
+  let {a9' = fromIntegral a9} in
+  withVoidPtr a10 $ \a10' ->
+  let {a11' = castPtr a11} in
+  let {a12' = fromIntegral a12} in
+  chbmv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' >>
+  return ()
+
+{-# LINE 216 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+zhbmv :: (Order) -> (Uplo) -> (Int) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+zhbmv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = fromIntegral a4} in
+  withVoidPtr a5 $ \a5' ->
+  let {a6' = castPtr a6} in
+  let {a7' = fromIntegral a7} in
+  let {a8' = castPtr a8} in
+  let {a9' = fromIntegral a9} in
+  withVoidPtr a10 $ \a10' ->
+  let {a11' = castPtr a11} in
+  let {a12' = fromIntegral a12} in
+  zhbmv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' >>
+  return ()
+
+{-# LINE 218 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+chpmv :: (Order) -> (Uplo) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Ptr (Complex Float)) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+chpmv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  withVoidPtr a4 $ \a4' ->
+  let {a5' = castPtr a5} in
+  let {a6' = castPtr a6} in
+  let {a7' = fromIntegral a7} in
+  withVoidPtr a8 $ \a8' ->
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  chpmv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' >>
+  return ()
+
+{-# LINE 220 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+zhpmv :: (Order) -> (Uplo) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Ptr (Complex Double)) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+zhpmv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  withVoidPtr a4 $ \a4' ->
+  let {a5' = castPtr a5} in
+  let {a6' = castPtr a6} in
+  let {a7' = fromIntegral a7} in
+  withVoidPtr a8 $ \a8' ->
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  zhpmv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' >>
+  return ()
+
+{-# LINE 222 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+cgeru :: (Order) -> (Int) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+cgeru a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 =
+  let {a1' = toCEnum a1} in
+  let {a2' = fromIntegral a2} in
+  let {a3' = fromIntegral a3} in
+  withVoidPtr a4 $ \a4' ->
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  cgeru'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' >>
+  return ()
+
+{-# LINE 224 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+zgeru :: (Order) -> (Int) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+zgeru a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 =
+  let {a1' = toCEnum a1} in
+  let {a2' = fromIntegral a2} in
+  let {a3' = fromIntegral a3} in
+  withVoidPtr a4 $ \a4' ->
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  zgeru'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' >>
+  return ()
+
+{-# LINE 226 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+cgerc :: (Order) -> (Int) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+cgerc a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 =
+  let {a1' = toCEnum a1} in
+  let {a2' = fromIntegral a2} in
+  let {a3' = fromIntegral a3} in
+  withVoidPtr a4 $ \a4' ->
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  cgerc'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' >>
+  return ()
+
+{-# LINE 228 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+zgerc :: (Order) -> (Int) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+zgerc a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 =
+  let {a1' = toCEnum a1} in
+  let {a2' = fromIntegral a2} in
+  let {a3' = fromIntegral a3} in
+  withVoidPtr a4 $ \a4' ->
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  zgerc'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' >>
+  return ()
+
+{-# LINE 230 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+cher :: (Order) -> (Uplo) -> (Int) -> (Float) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+cher a1 a2 a3 a4 a5 a6 a7 a8 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = CFloat a4} in
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  cher'_ a1' a2' a3' a4' a5' a6' a7' a8' >>
+  return ()
+
+{-# LINE 232 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+zher :: (Order) -> (Uplo) -> (Int) -> (Double) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+zher a1 a2 a3 a4 a5 a6 a7 a8 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = CDouble a4} in
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  zher'_ a1' a2' a3' a4' a5' a6' a7' a8' >>
+  return ()
+
+{-# LINE 234 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+chpr :: (Order) -> (Uplo) -> (Int) -> (Float) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> IO ()
+chpr a1 a2 a3 a4 a5 a6 a7 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = CFloat a4} in
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  chpr'_ a1' a2' a3' a4' a5' a6' a7' >>
+  return ()
+
+{-# LINE 236 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+zhpr :: (Order) -> (Uplo) -> (Int) -> (Double) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> IO ()
+zhpr a1 a2 a3 a4 a5 a6 a7 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = CDouble a4} in
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  zhpr'_ a1' a2' a3' a4' a5' a6' a7' >>
+  return ()
+
+{-# LINE 238 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+cher2 :: (Order) -> (Uplo) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+cher2 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  withVoidPtr a4 $ \a4' ->
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  cher2'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' >>
+  return ()
+
+{-# LINE 240 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+zher2 :: (Order) -> (Uplo) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+zher2 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  withVoidPtr a4 $ \a4' ->
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  zher2'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' >>
+  return ()
+
+{-# LINE 242 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+chpr2 :: (Order) -> (Uplo) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> IO ()
+chpr2 a1 a2 a3 a4 a5 a6 a7 a8 a9 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  withVoidPtr a4 $ \a4' ->
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  chpr2'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' >>
+  return ()
+
+{-# LINE 244 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+zhpr2 :: (Order) -> (Uplo) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> IO ()
+zhpr2 a1 a2 a3 a4 a5 a6 a7 a8 a9 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  withVoidPtr a4 $ \a4' ->
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  zhpr2'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' >>
+  return ()
+
+{-# LINE 246 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+sgemm :: (Order) -> (Transpose) -> (Transpose) -> (Int) -> (Int) -> (Int) -> (Float) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> (Float) -> (Ptr Float) -> (Int) -> IO ()
+sgemm a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = CFloat a7} in
+  let {a8' = castPtr a8} in
+  let {a9' = fromIntegral a9} in
+  let {a10' = castPtr a10} in
+  let {a11' = fromIntegral a11} in
+  let {a12' = CFloat a12} in
+  let {a13' = castPtr a13} in
+  let {a14' = fromIntegral a14} in
+  sgemm'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' >>
+  return ()
+
+{-# LINE 248 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+dgemm :: (Order) -> (Transpose) -> (Transpose) -> (Int) -> (Int) -> (Int) -> (Double) -> (Ptr Double) -> (Int) -> (Ptr Double) -> (Int) -> (Double) -> (Ptr Double) -> (Int) -> IO ()
+dgemm a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = CDouble a7} in
+  let {a8' = castPtr a8} in
+  let {a9' = fromIntegral a9} in
+  let {a10' = castPtr a10} in
+  let {a11' = fromIntegral a11} in
+  let {a12' = CDouble a12} in
+  let {a13' = castPtr a13} in
+  let {a14' = fromIntegral a14} in
+  dgemm'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' >>
+  return ()
+
+{-# LINE 250 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+cgemm :: (Order) -> (Transpose) -> (Transpose) -> (Int) -> (Int) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+cgemm a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = fromIntegral a6} in
+  withVoidPtr a7 $ \a7' ->
+  let {a8' = castPtr a8} in
+  let {a9' = fromIntegral a9} in
+  let {a10' = castPtr a10} in
+  let {a11' = fromIntegral a11} in
+  withVoidPtr a12 $ \a12' ->
+  let {a13' = castPtr a13} in
+  let {a14' = fromIntegral a14} in
+  cgemm'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' >>
+  return ()
+
+{-# LINE 252 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+zgemm :: (Order) -> (Transpose) -> (Transpose) -> (Int) -> (Int) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+zgemm a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = fromIntegral a6} in
+  withVoidPtr a7 $ \a7' ->
+  let {a8' = castPtr a8} in
+  let {a9' = fromIntegral a9} in
+  let {a10' = castPtr a10} in
+  let {a11' = fromIntegral a11} in
+  withVoidPtr a12 $ \a12' ->
+  let {a13' = castPtr a13} in
+  let {a14' = fromIntegral a14} in
+  zgemm'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' >>
+  return ()
+
+{-# LINE 254 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+ssymm :: (Order) -> (Side) -> (Uplo) -> (Int) -> (Int) -> (Float) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> (Float) -> (Ptr Float) -> (Int) -> IO ()
+ssymm a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = CFloat a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  let {a11' = CFloat a11} in
+  let {a12' = castPtr a12} in
+  let {a13' = fromIntegral a13} in
+  ssymm'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' >>
+  return ()
+
+{-# LINE 256 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+dsymm :: (Order) -> (Side) -> (Uplo) -> (Int) -> (Int) -> (Double) -> (Ptr Double) -> (Int) -> (Ptr Double) -> (Int) -> (Double) -> (Ptr Double) -> (Int) -> IO ()
+dsymm a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = CDouble a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  let {a11' = CDouble a11} in
+  let {a12' = castPtr a12} in
+  let {a13' = fromIntegral a13} in
+  dsymm'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' >>
+  return ()
+
+{-# LINE 258 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+csymm :: (Order) -> (Side) -> (Uplo) -> (Int) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+csymm a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = fromIntegral a5} in
+  withVoidPtr a6 $ \a6' ->
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  withVoidPtr a11 $ \a11' ->
+  let {a12' = castPtr a12} in
+  let {a13' = fromIntegral a13} in
+  csymm'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' >>
+  return ()
+
+{-# LINE 260 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+zsymm :: (Order) -> (Side) -> (Uplo) -> (Int) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+zsymm a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = fromIntegral a5} in
+  withVoidPtr a6 $ \a6' ->
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  withVoidPtr a11 $ \a11' ->
+  let {a12' = castPtr a12} in
+  let {a13' = fromIntegral a13} in
+  zsymm'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' >>
+  return ()
+
+{-# LINE 262 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+ssyrk :: (Order) -> (Uplo) -> (Transpose) -> (Int) -> (Int) -> (Float) -> (Ptr Float) -> (Int) -> (Float) -> (Ptr Float) -> (Int) -> IO ()
+ssyrk a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = CFloat a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = CFloat a9} in
+  let {a10' = castPtr a10} in
+  let {a11' = fromIntegral a11} in
+  ssyrk'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' >>
+  return ()
+
+{-# LINE 264 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+dsyrk :: (Order) -> (Uplo) -> (Transpose) -> (Int) -> (Int) -> (Double) -> (Ptr Double) -> (Int) -> (Double) -> (Ptr Double) -> (Int) -> IO ()
+dsyrk a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = CDouble a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = CDouble a9} in
+  let {a10' = castPtr a10} in
+  let {a11' = fromIntegral a11} in
+  dsyrk'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' >>
+  return ()
+
+{-# LINE 266 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+csyrk :: (Order) -> (Uplo) -> (Transpose) -> (Int) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+csyrk a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = fromIntegral a5} in
+  withVoidPtr a6 $ \a6' ->
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  withVoidPtr a9 $ \a9' ->
+  let {a10' = castPtr a10} in
+  let {a11' = fromIntegral a11} in
+  csyrk'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' >>
+  return ()
+
+{-# LINE 268 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+zsyrk :: (Order) -> (Uplo) -> (Transpose) -> (Int) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+zsyrk a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = fromIntegral a5} in
+  withVoidPtr a6 $ \a6' ->
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  withVoidPtr a9 $ \a9' ->
+  let {a10' = castPtr a10} in
+  let {a11' = fromIntegral a11} in
+  zsyrk'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' >>
+  return ()
+
+{-# LINE 270 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+ssyr2k :: (Order) -> (Uplo) -> (Transpose) -> (Int) -> (Int) -> (Float) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> (Float) -> (Ptr Float) -> (Int) -> IO ()
+ssyr2k a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = CFloat a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  let {a11' = CFloat a11} in
+  let {a12' = castPtr a12} in
+  let {a13' = fromIntegral a13} in
+  ssyr2k'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' >>
+  return ()
+
+{-# LINE 272 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+dsyr2k :: (Order) -> (Uplo) -> (Transpose) -> (Int) -> (Int) -> (Double) -> (Ptr Double) -> (Int) -> (Ptr Double) -> (Int) -> (Double) -> (Ptr Double) -> (Int) -> IO ()
+dsyr2k a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = CDouble a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  let {a11' = CDouble a11} in
+  let {a12' = castPtr a12} in
+  let {a13' = fromIntegral a13} in
+  dsyr2k'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' >>
+  return ()
+
+{-# LINE 274 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+csyr2k :: (Order) -> (Uplo) -> (Transpose) -> (Int) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+csyr2k a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = fromIntegral a5} in
+  withVoidPtr a6 $ \a6' ->
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  withVoidPtr a11 $ \a11' ->
+  let {a12' = castPtr a12} in
+  let {a13' = fromIntegral a13} in
+  csyr2k'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' >>
+  return ()
+
+{-# LINE 276 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+zsyr2k :: (Order) -> (Uplo) -> (Transpose) -> (Int) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+zsyr2k a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = fromIntegral a5} in
+  withVoidPtr a6 $ \a6' ->
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  withVoidPtr a11 $ \a11' ->
+  let {a12' = castPtr a12} in
+  let {a13' = fromIntegral a13} in
+  zsyr2k'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' >>
+  return ()
+
+{-# LINE 278 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+chemm :: (Order) -> (Side) -> (Uplo) -> (Int) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+chemm a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = fromIntegral a5} in
+  withVoidPtr a6 $ \a6' ->
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  withVoidPtr a11 $ \a11' ->
+  let {a12' = castPtr a12} in
+  let {a13' = fromIntegral a13} in
+  chemm'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' >>
+  return ()
+
+{-# LINE 280 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+zhemm :: (Order) -> (Side) -> (Uplo) -> (Int) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+zhemm a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = fromIntegral a5} in
+  withVoidPtr a6 $ \a6' ->
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  withVoidPtr a11 $ \a11' ->
+  let {a12' = castPtr a12} in
+  let {a13' = fromIntegral a13} in
+  zhemm'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' >>
+  return ()
+
+{-# LINE 282 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+cherk :: (Order) -> (Uplo) -> (Transpose) -> (Int) -> (Int) -> (Float) -> (Ptr (Complex Float)) -> (Int) -> (Float) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+cherk a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = CFloat a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = CFloat a9} in
+  let {a10' = castPtr a10} in
+  let {a11' = fromIntegral a11} in
+  cherk'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' >>
+  return ()
+
+{-# LINE 284 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+zherk :: (Order) -> (Uplo) -> (Transpose) -> (Int) -> (Int) -> (Double) -> (Ptr (Complex Double)) -> (Int) -> (Double) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+zherk a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = CDouble a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = CDouble a9} in
+  let {a10' = castPtr a10} in
+  let {a11' = fromIntegral a11} in
+  zherk'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' >>
+  return ()
+
+{-# LINE 286 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+cher2k :: (Order) -> (Uplo) -> (Transpose) -> (Int) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> (Float) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+cher2k a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = fromIntegral a5} in
+  withVoidPtr a6 $ \a6' ->
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  let {a11' = CFloat a11} in
+  let {a12' = castPtr a12} in
+  let {a13' = fromIntegral a13} in
+  cher2k'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' >>
+  return ()
+
+{-# LINE 288 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+zher2k :: (Order) -> (Uplo) -> (Transpose) -> (Int) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> (Double) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+zher2k a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = fromIntegral a5} in
+  withVoidPtr a6 $ \a6' ->
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  let {a11' = CDouble a11} in
+  let {a12' = castPtr a12} in
+  let {a13' = fromIntegral a13} in
+  zher2k'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' >>
+  return ()
+
+{-# LINE 290 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+strmm :: (Order) -> (Side) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Int) -> (Float) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> IO ()
+strmm a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = toCEnum a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = fromIntegral a7} in
+  let {a8' = CFloat a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  let {a11' = castPtr a11} in
+  let {a12' = fromIntegral a12} in
+  strmm'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' >>
+  return ()
+
+{-# LINE 292 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+dtrmm :: (Order) -> (Side) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Int) -> (Double) -> (Ptr Double) -> (Int) -> (Ptr Double) -> (Int) -> IO ()
+dtrmm a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = toCEnum a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = fromIntegral a7} in
+  let {a8' = CDouble a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  let {a11' = castPtr a11} in
+  let {a12' = fromIntegral a12} in
+  dtrmm'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' >>
+  return ()
+
+{-# LINE 294 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+ctrmm :: (Order) -> (Side) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+ctrmm a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = toCEnum a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = fromIntegral a7} in
+  withVoidPtr a8 $ \a8' ->
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  let {a11' = castPtr a11} in
+  let {a12' = fromIntegral a12} in
+  ctrmm'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' >>
+  return ()
+
+{-# LINE 296 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+ztrmm :: (Order) -> (Side) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+ztrmm a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = toCEnum a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = fromIntegral a7} in
+  withVoidPtr a8 $ \a8' ->
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  let {a11' = castPtr a11} in
+  let {a12' = fromIntegral a12} in
+  ztrmm'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' >>
+  return ()
+
+{-# LINE 298 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+strsm :: (Order) -> (Side) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Int) -> (Float) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> IO ()
+strsm a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = toCEnum a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = fromIntegral a7} in
+  let {a8' = CFloat a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  let {a11' = castPtr a11} in
+  let {a12' = fromIntegral a12} in
+  strsm'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' >>
+  return ()
+
+{-# LINE 300 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+dtrsm :: (Order) -> (Side) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Int) -> (Double) -> (Ptr Double) -> (Int) -> (Ptr Double) -> (Int) -> IO ()
+dtrsm a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = toCEnum a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = fromIntegral a7} in
+  let {a8' = CDouble a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  let {a11' = castPtr a11} in
+  let {a12' = fromIntegral a12} in
+  dtrsm'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' >>
+  return ()
+
+{-# LINE 302 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+ctrsm :: (Order) -> (Side) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+ctrsm a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = toCEnum a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = fromIntegral a7} in
+  withVoidPtr a8 $ \a8' ->
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  let {a11' = castPtr a11} in
+  let {a12' = fromIntegral a12} in
+  ctrsm'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' >>
+  return ()
+
+{-# LINE 304 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+ztrsm :: (Order) -> (Side) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+ztrsm a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = toCEnum a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = fromIntegral a7} in
+  withVoidPtr a8 $ \a8' ->
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  let {a11' = castPtr a11} in
+  let {a12' = fromIntegral a12} in
+  ztrsm'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' >>
+  return ()
+
+{-# LINE 306 "src/Blas/Primitive/Safe_.chs" #-}
+
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_sdsdot"
+  sdsdot'_ :: (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> (IO CFloat)))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_dsdot"
+  dsdot'_ :: (BlasInt -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> (IO CDouble))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_sdot"
+  sdot'_ :: (BlasInt -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> (IO CFloat))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_ddot"
+  ddot'_ :: (BlasInt -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> (IO CDouble))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_cdotu_sub"
+  cdotu_sub'_ :: (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (IO ())))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_zdotu_sub"
+  zdotu_sub'_ :: (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (IO ())))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_cdotc_sub"
+  cdotc_sub'_ :: (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (IO ())))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_zdotc_sub"
+  zdotc_sub'_ :: (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (IO ())))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_snrm2"
+  snrm2'_ :: (BlasInt -> ((Ptr CFloat) -> (BlasInt -> (IO CFloat))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_dnrm2"
+  dnrm2'_ :: (BlasInt -> ((Ptr CDouble) -> (BlasInt -> (IO CDouble))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_scnrm2"
+  scnrm2'_ :: (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO CFloat))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_dznrm2"
+  dznrm2'_ :: (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO CDouble))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_sasum"
+  sasum'_ :: (BlasInt -> ((Ptr CFloat) -> (BlasInt -> (IO CFloat))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_dasum"
+  dasum'_ :: (BlasInt -> ((Ptr CDouble) -> (BlasInt -> (IO CDouble))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_scasum"
+  scasum'_ :: (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO CFloat))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_dzasum"
+  dzasum'_ :: (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO CDouble))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_isamax"
+  isamax'_ :: (BlasInt -> ((Ptr CFloat) -> (BlasInt -> (IO BlasIndex))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_idamax"
+  idamax'_ :: (BlasInt -> ((Ptr CDouble) -> (BlasInt -> (IO BlasIndex))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_icamax"
+  icamax'_ :: (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO BlasIndex))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_izamax"
+  izamax'_ :: (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO BlasIndex))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_sswap"
+  sswap'_ :: (BlasInt -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> (IO ()))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_dswap"
+  dswap'_ :: (BlasInt -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> (IO ()))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_cswap"
+  cswap'_ :: (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO ()))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_zswap"
+  zswap'_ :: (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO ()))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_scopy"
+  scopy'_ :: (BlasInt -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> (IO ()))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_dcopy"
+  dcopy'_ :: (BlasInt -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> (IO ()))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_ccopy"
+  ccopy'_ :: (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO ()))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_zcopy"
+  zcopy'_ :: (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO ()))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_saxpy"
+  saxpy'_ :: (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> (IO ())))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_daxpy"
+  daxpy'_ :: (BlasInt -> (CDouble -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> (IO ())))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_caxpy"
+  caxpy'_ :: (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO ())))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_zaxpy"
+  zaxpy'_ :: (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO ())))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_srotg"
+  srotg'_ :: ((Ptr CFloat) -> ((Ptr CFloat) -> ((Ptr CFloat) -> ((Ptr CFloat) -> (IO ())))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_drotg"
+  drotg'_ :: ((Ptr CDouble) -> ((Ptr CDouble) -> ((Ptr CDouble) -> ((Ptr CDouble) -> (IO ())))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_srotmg"
+  srotmg'_ :: ((Ptr CFloat) -> ((Ptr CFloat) -> ((Ptr CFloat) -> (CFloat -> ((Ptr CFloat) -> (IO ()))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_drotmg"
+  drotmg'_ :: ((Ptr CDouble) -> ((Ptr CDouble) -> ((Ptr CDouble) -> (CDouble -> ((Ptr CDouble) -> (IO ()))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_srot"
+  srot'_ :: (BlasInt -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> (CFloat -> (CFloat -> (IO ()))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_drot"
+  drot'_ :: (BlasInt -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> (CDouble -> (CDouble -> (IO ()))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_srotm"
+  srotm'_ :: (BlasInt -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (IO ())))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_drotm"
+  drotm'_ :: (BlasInt -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (IO ())))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_sscal"
+  sscal'_ :: (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> (IO ())))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_dscal"
+  dscal'_ :: (BlasInt -> (CDouble -> ((Ptr CDouble) -> (BlasInt -> (IO ())))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_cscal"
+  cscal'_ :: (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> (IO ())))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_csscal"
+  csscal'_ :: (BlasInt -> (CFloat -> ((Ptr ()) -> (BlasInt -> (IO ())))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_zscal"
+  zscal'_ :: (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> (IO ())))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_zdscal"
+  zdscal'_ :: (BlasInt -> (CDouble -> ((Ptr ()) -> (BlasInt -> (IO ())))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_sgemv"
+  sgemv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> (IO ())))))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_dgemv"
+  dgemv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (CDouble -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> (CDouble -> ((Ptr CDouble) -> (BlasInt -> (IO ())))))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_cgemv"
+  cgemv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_zgemv"
+  zgemv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_sgbmv"
+  sgbmv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> (IO ())))))))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_dgbmv"
+  dgbmv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (CDouble -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> (CDouble -> ((Ptr CDouble) -> (BlasInt -> (IO ())))))))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_cgbmv"
+  cgbmv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_zgbmv"
+  zgbmv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_strmv"
+  strmv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> (IO ()))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_dtrmv"
+  dtrmv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> (IO ()))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_ctrmv"
+  ctrmv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO ()))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_ztrmv"
+  ztrmv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO ()))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_stbmv"
+  stbmv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> (IO ())))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_dtbmv"
+  dtbmv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> (IO ())))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_ctbmv"
+  ctbmv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_ztbmv"
+  ztbmv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_stpmv"
+  stpmv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr CFloat) -> ((Ptr CFloat) -> (BlasInt -> (IO ())))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_dtpmv"
+  dtpmv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr CDouble) -> ((Ptr CDouble) -> (BlasInt -> (IO ())))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_ctpmv"
+  ctpmv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_ztpmv"
+  ztpmv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_strsv"
+  strsv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> (IO ()))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_dtrsv"
+  dtrsv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> (IO ()))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_ctrsv"
+  ctrsv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO ()))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_ztrsv"
+  ztrsv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO ()))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_stbsv"
+  stbsv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> (IO ())))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_dtbsv"
+  dtbsv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> (IO ())))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_ctbsv"
+  ctbsv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_ztbsv"
+  ztbsv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_stpsv"
+  stpsv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr CFloat) -> ((Ptr CFloat) -> (BlasInt -> (IO ())))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_dtpsv"
+  dtpsv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr CDouble) -> ((Ptr CDouble) -> (BlasInt -> (IO ())))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_ctpsv"
+  ctpsv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_ztpsv"
+  ztpsv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_ssymv"
+  ssymv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> (IO ()))))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_dsymv"
+  dsymv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (CDouble -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> (CDouble -> ((Ptr CDouble) -> (BlasInt -> (IO ()))))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_ssbmv"
+  ssbmv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> (IO ())))))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_dsbmv"
+  dsbmv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (CDouble -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> (CDouble -> ((Ptr CDouble) -> (BlasInt -> (IO ())))))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_sspmv"
+  sspmv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (CFloat -> ((Ptr CFloat) -> ((Ptr CFloat) -> (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> (IO ())))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_dspmv"
+  dspmv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (CDouble -> ((Ptr CDouble) -> ((Ptr CDouble) -> (BlasInt -> (CDouble -> ((Ptr CDouble) -> (BlasInt -> (IO ())))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_sger"
+  sger'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> (IO ())))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_dger"
+  dger'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (CDouble -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> (IO ())))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_ssyr"
+  ssyr'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> (IO ())))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_dsyr"
+  dsyr'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (CDouble -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> (IO ())))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_ssyr2"
+  ssyr2'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> (IO ())))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_dsyr2"
+  dsyr2'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (CDouble -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> (IO ())))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_sspr"
+  sspr'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (IO ()))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_dspr"
+  dspr'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (CDouble -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (IO ()))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_sspr2"
+  sspr2'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (IO ()))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_dspr2"
+  dspr2'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (CDouble -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (IO ()))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_chemv"
+  chemv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> (IO ()))))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_zhemv"
+  zhemv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> (IO ()))))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_chbmv"
+  chbmv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_zhbmv"
+  zhbmv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_chpmv"
+  chpmv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_zhpmv"
+  zhpmv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_cgeru"
+  cgeru'_ :: (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_zgeru"
+  zgeru'_ :: (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_cgerc"
+  cgerc'_ :: (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_zgerc"
+  zgerc'_ :: (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_cher"
+  cher'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (CFloat -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_zher"
+  zher'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (CDouble -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_chpr"
+  chpr'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (CFloat -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (IO ()))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_zhpr"
+  zhpr'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (CDouble -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (IO ()))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_cher2"
+  cher2'_ :: (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_zher2"
+  zher2'_ :: (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_chpr2"
+  chpr2'_ :: (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (IO ()))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_zhpr2"
+  zhpr2'_ :: (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (IO ()))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_sgemm"
+  sgemm'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> (IO ())))))))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_dgemm"
+  dgemm'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (CDouble -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> (CDouble -> ((Ptr CDouble) -> (BlasInt -> (IO ())))))))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_cgemm"
+  cgemm'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_zgemm"
+  zgemm'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_ssymm"
+  ssymm'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> (IO ()))))))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_dsymm"
+  dsymm'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (CDouble -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> (CDouble -> ((Ptr CDouble) -> (BlasInt -> (IO ()))))))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_csymm"
+  csymm'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> (IO ()))))))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_zsymm"
+  zsymm'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> (IO ()))))))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_ssyrk"
+  ssyrk'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> (IO ()))))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_dsyrk"
+  dsyrk'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (CDouble -> ((Ptr CDouble) -> (BlasInt -> (CDouble -> ((Ptr CDouble) -> (BlasInt -> (IO ()))))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_csyrk"
+  csyrk'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> (IO ()))))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_zsyrk"
+  zsyrk'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> (IO ()))))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_ssyr2k"
+  ssyr2k'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> (IO ()))))))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_dsyr2k"
+  dsyr2k'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (CDouble -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> (CDouble -> ((Ptr CDouble) -> (BlasInt -> (IO ()))))))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_csyr2k"
+  csyr2k'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> (IO ()))))))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_zsyr2k"
+  zsyr2k'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> (IO ()))))))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_chemm"
+  chemm'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> (IO ()))))))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_zhemm"
+  zhemm'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> (IO ()))))))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_cherk"
+  cherk'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (CFloat -> ((Ptr ()) -> (BlasInt -> (CFloat -> ((Ptr ()) -> (BlasInt -> (IO ()))))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_zherk"
+  zherk'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (CDouble -> ((Ptr ()) -> (BlasInt -> (CDouble -> ((Ptr ()) -> (BlasInt -> (IO ()))))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_cher2k"
+  cher2k'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (CFloat -> ((Ptr ()) -> (BlasInt -> (IO ()))))))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_zher2k"
+  zher2k'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (CDouble -> ((Ptr ()) -> (BlasInt -> (IO ()))))))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_strmm"
+  strmm'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> (IO ())))))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_dtrmm"
+  dtrmm'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (CDouble -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> (IO ())))))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_ctrmm"
+  ctrmm'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_ztrmm"
+  ztrmm'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_strsm"
+  strsm'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> (IO ())))))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_dtrsm"
+  dtrsm'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (CDouble -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> (IO ())))))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_ctrsm"
+  ctrsm'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))))))
+
+foreign import ccall safe "src/Blas/Primitive/Safe_.chs.h cblas_ztrsm"
+  ztrsm'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))))))
diff --git a/src/Blas/Primitive/Types.hs b/src/Blas/Primitive/Types.hs
new file mode 100644
--- /dev/null
+++ b/src/Blas/Primitive/Types.hs
@@ -0,0 +1,79 @@
+{-|
+
+Stability: experimental
+
+Enumerations used by the Blas interface.
+
+-}
+module Blas.Primitive.Types
+       ( Order(..)
+       , Transpose(..)
+       , Uplo(..)
+       , Diag(..)
+       , Side(..)
+       ) where
+import Prelude hiding (Either(Left, Right))
+import Data.Ix (Ix)
+
+-- | Memory layout of a matrix.
+data Order = RowMajor                   -- ^ Row-major order.
+           | ColMajor                   -- ^ Column-major order.
+           deriving (Bounded, Eq, Ix, Ord, Read, Show)
+
+instance Enum Order where
+  fromEnum RowMajor = 101
+  fromEnum ColMajor = 102
+  toEnum 101 = RowMajor
+  toEnum 102 = ColMajor
+  toEnum x   = error $ "Order.toEnum: Cannot match " ++ show x
+
+-- | Operation applied to a matrix.
+data Transpose = NoTrans                -- ^ No operation.
+               | Trans                  -- ^ Transposition.
+               | ConjTrans              -- ^ Conjugation and transposition.
+               deriving (Bounded, Eq, Ix, Ord, Read, Show)
+
+instance Enum Transpose where
+  fromEnum NoTrans   = 111
+  fromEnum Trans     = 112
+  fromEnum ConjTrans = 113
+  toEnum 111 = NoTrans
+  toEnum 112 = Trans
+  toEnum 113 = ConjTrans
+  toEnum x   = error $ "Transpose.toEnum: Cannot match " ++ show x
+
+-- | Specifies which triangular part of a matrix is used.
+data Uplo = Upper                       -- ^ Upper triangular part.
+          | Lower                       -- ^ Lower triangular part.
+          deriving (Bounded, Eq, Ix, Ord, Read, Show)
+
+instance Enum Uplo where
+  fromEnum Upper = 121
+  fromEnum Lower = 122
+  toEnum 121 = Upper
+  toEnum 122 = Lower
+  toEnum x   = error $ "Uplo.toEnum: Cannot match " ++ show x
+
+-- | Whether a matrix is unit triangular.
+data Diag = NonUnit                     -- ^ Not unit triangular.
+          | Unit                        -- ^ Unit triangular.
+          deriving (Bounded, Eq, Ix, Ord, Read, Show)
+
+instance Enum Diag where
+  fromEnum NonUnit = 131
+  fromEnum Unit    = 132
+  toEnum 131 = NonUnit
+  toEnum 132 = Unit
+  toEnum x   = error $ "Diag.toEnum: Cannot match " ++ show x
+
+-- | The side that a matrix appears in the product.
+data Side = Left                        -- ^ On the left side.
+          | Right                       -- ^ On the right side.
+          deriving (Bounded, Eq, Ix, Ord, Read, Show)
+
+instance Enum Side where
+  fromEnum Left  = 141
+  fromEnum Right = 142
+  toEnum 141 = Left
+  toEnum 142 = Right
+  toEnum x   = error $ "Side.toEnum: Cannot match " ++ show x
diff --git a/src/Blas/Primitive/Unsafe.hs b/src/Blas/Primitive/Unsafe.hs
new file mode 100644
--- /dev/null
+++ b/src/Blas/Primitive/Unsafe.hs
@@ -0,0 +1,2840 @@
+-- GENERATED by C->Haskell Compiler, version 0.17.2 Crystal Seed, 24 Jan 2009 (Haskell)
+-- Edit the ORIGNAL .chs file instead!
+
+
+{-# LINE 1 "src/Blas/Primitive/Unsafe_.chs" #-}
+{- This file is auto-generated.  Do not edit directly. -}
+{-# LANGUAGE ForeignFunctionInterface #-}
+{-|
+
+Stability: stable
+
+Foreign function interface to Blas.  These functions use unsafe
+foreign calls.  Refer to the GHC documentation for more information regarding
+appropriate use of safe and unsafe foreign calls.
+
+-}
+module Blas.Primitive.Unsafe (sdsdot, dsdot, sdot, ddot, cdotu_sub, zdotu_sub, cdotc_sub, zdotc_sub, snrm2, dnrm2, scnrm2, dznrm2, sasum, dasum, scasum, dzasum, isamax, idamax, icamax, izamax, sswap, dswap, cswap, zswap, scopy, dcopy, ccopy, zcopy, saxpy, daxpy, caxpy, zaxpy, srotg, drotg, srotmg, drotmg, srot, drot, srotm, drotm, sscal, dscal, cscal, csscal, zscal, zdscal, sgemv, dgemv, cgemv, zgemv, sgbmv, dgbmv, cgbmv, zgbmv, strmv, dtrmv, ctrmv, ztrmv, stbmv, dtbmv, ctbmv, ztbmv, stpmv, dtpmv, ctpmv, ztpmv, strsv, dtrsv, ctrsv, ztrsv, stbsv, dtbsv, ctbsv, ztbsv, stpsv, dtpsv, ctpsv, ztpsv, ssymv, dsymv, ssbmv, dsbmv, sspmv, dspmv, sger, dger, ssyr, dsyr, ssyr2, dsyr2, sspr, dspr, sspr2, dspr2, chemv, zhemv, chbmv, zhbmv, chpmv, zhpmv, cgeru, zgeru, cgerc, zgerc, cher, zher, chpr, zhpr, cher2, zher2, chpr2, zhpr2, sgemm, dgemm, cgemm, zgemm, ssymm, dsymm, csymm, zsymm, ssyrk, dsyrk, csyrk, zsyrk, ssyr2k, dsyr2k, csyr2k, zsyr2k, chemm, zhemm, cherk, zherk, cher2k, zher2k, strmm, dtrmm, ctrmm, ztrmm, strsm, dtrsm, ctrsm, ztrsm) where
+import Prelude hiding (Either(Left, Right))
+import Data.Complex (Complex)
+import Foreign (Ptr, castPtr)
+import Foreign.C.Types
+import Foreign.Storable.Complex ()
+import Blas.Primitive.Types
+import BlasCTypes
+import FFI
+
+
+
+sdsdot :: (Int) -> (Float) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> IO ((Float))
+sdsdot a1 a2 a3 a4 a5 a6 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = CFloat a2} in
+  let {a3' = castPtr a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  sdsdot'_ a1' a2' a3' a4' a5' a6' >>= \res ->
+  let {res' = fromCFloat res} in
+  return (res')
+
+{-# LINE 24 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+dsdot :: (Int) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> IO ((Double))
+dsdot a1 a2 a3 a4 a5 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = castPtr a4} in
+  let {a5' = fromIntegral a5} in
+  dsdot'_ a1' a2' a3' a4' a5' >>= \res ->
+  let {res' = fromCDouble res} in
+  return (res')
+
+{-# LINE 26 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+sdot :: (Int) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> IO ((Float))
+sdot a1 a2 a3 a4 a5 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = castPtr a4} in
+  let {a5' = fromIntegral a5} in
+  sdot'_ a1' a2' a3' a4' a5' >>= \res ->
+  let {res' = fromCFloat res} in
+  return (res')
+
+{-# LINE 28 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+ddot :: (Int) -> (Ptr Double) -> (Int) -> (Ptr Double) -> (Int) -> IO ((Double))
+ddot a1 a2 a3 a4 a5 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = castPtr a4} in
+  let {a5' = fromIntegral a5} in
+  ddot'_ a1' a2' a3' a4' a5' >>= \res ->
+  let {res' = fromCDouble res} in
+  return (res')
+
+{-# LINE 30 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+cdotu_sub :: (Int) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> IO ()
+cdotu_sub a1 a2 a3 a4 a5 a6 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = castPtr a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = castPtr a6} in
+  cdotu_sub'_ a1' a2' a3' a4' a5' a6' >>
+  return ()
+
+{-# LINE 32 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+zdotu_sub :: (Int) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> IO ()
+zdotu_sub a1 a2 a3 a4 a5 a6 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = castPtr a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = castPtr a6} in
+  zdotu_sub'_ a1' a2' a3' a4' a5' a6' >>
+  return ()
+
+{-# LINE 34 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+cdotc_sub :: (Int) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> IO ()
+cdotc_sub a1 a2 a3 a4 a5 a6 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = castPtr a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = castPtr a6} in
+  cdotc_sub'_ a1' a2' a3' a4' a5' a6' >>
+  return ()
+
+{-# LINE 36 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+zdotc_sub :: (Int) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> IO ()
+zdotc_sub a1 a2 a3 a4 a5 a6 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = castPtr a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = castPtr a6} in
+  zdotc_sub'_ a1' a2' a3' a4' a5' a6' >>
+  return ()
+
+{-# LINE 38 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+snrm2 :: (Int) -> (Ptr Float) -> (Int) -> IO ((Float))
+snrm2 a1 a2 a3 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  snrm2'_ a1' a2' a3' >>= \res ->
+  let {res' = fromCFloat res} in
+  return (res')
+
+{-# LINE 40 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+dnrm2 :: (Int) -> (Ptr Double) -> (Int) -> IO ((Double))
+dnrm2 a1 a2 a3 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  dnrm2'_ a1' a2' a3' >>= \res ->
+  let {res' = fromCDouble res} in
+  return (res')
+
+{-# LINE 42 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+scnrm2 :: (Int) -> (Ptr (Complex Float)) -> (Int) -> IO ((Float))
+scnrm2 a1 a2 a3 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  scnrm2'_ a1' a2' a3' >>= \res ->
+  let {res' = fromCFloat res} in
+  return (res')
+
+{-# LINE 44 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+dznrm2 :: (Int) -> (Ptr (Complex Double)) -> (Int) -> IO ((Double))
+dznrm2 a1 a2 a3 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  dznrm2'_ a1' a2' a3' >>= \res ->
+  let {res' = fromCDouble res} in
+  return (res')
+
+{-# LINE 46 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+sasum :: (Int) -> (Ptr Float) -> (Int) -> IO ((Float))
+sasum a1 a2 a3 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  sasum'_ a1' a2' a3' >>= \res ->
+  let {res' = fromCFloat res} in
+  return (res')
+
+{-# LINE 48 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+dasum :: (Int) -> (Ptr Double) -> (Int) -> IO ((Double))
+dasum a1 a2 a3 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  dasum'_ a1' a2' a3' >>= \res ->
+  let {res' = fromCDouble res} in
+  return (res')
+
+{-# LINE 50 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+scasum :: (Int) -> (Ptr (Complex Float)) -> (Int) -> IO ((Float))
+scasum a1 a2 a3 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  scasum'_ a1' a2' a3' >>= \res ->
+  let {res' = fromCFloat res} in
+  return (res')
+
+{-# LINE 52 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+dzasum :: (Int) -> (Ptr (Complex Double)) -> (Int) -> IO ((Double))
+dzasum a1 a2 a3 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  dzasum'_ a1' a2' a3' >>= \res ->
+  let {res' = fromCDouble res} in
+  return (res')
+
+{-# LINE 54 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+isamax :: (Int) -> (Ptr Float) -> (Int) -> IO ((Int))
+isamax a1 a2 a3 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  isamax'_ a1' a2' a3' >>= \res ->
+  let {res' = fromIntegral res} in
+  return (res')
+
+{-# LINE 56 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+idamax :: (Int) -> (Ptr Double) -> (Int) -> IO ((Int))
+idamax a1 a2 a3 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  idamax'_ a1' a2' a3' >>= \res ->
+  let {res' = fromIntegral res} in
+  return (res')
+
+{-# LINE 58 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+icamax :: (Int) -> (Ptr (Complex Float)) -> (Int) -> IO ((Int))
+icamax a1 a2 a3 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  icamax'_ a1' a2' a3' >>= \res ->
+  let {res' = fromIntegral res} in
+  return (res')
+
+{-# LINE 60 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+izamax :: (Int) -> (Ptr (Complex Double)) -> (Int) -> IO ((Int))
+izamax a1 a2 a3 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  izamax'_ a1' a2' a3' >>= \res ->
+  let {res' = fromIntegral res} in
+  return (res')
+
+{-# LINE 62 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+sswap :: (Int) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> IO ()
+sswap a1 a2 a3 a4 a5 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = castPtr a4} in
+  let {a5' = fromIntegral a5} in
+  sswap'_ a1' a2' a3' a4' a5' >>
+  return ()
+
+{-# LINE 64 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+dswap :: (Int) -> (Ptr Double) -> (Int) -> (Ptr Double) -> (Int) -> IO ()
+dswap a1 a2 a3 a4 a5 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = castPtr a4} in
+  let {a5' = fromIntegral a5} in
+  dswap'_ a1' a2' a3' a4' a5' >>
+  return ()
+
+{-# LINE 66 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+cswap :: (Int) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+cswap a1 a2 a3 a4 a5 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = castPtr a4} in
+  let {a5' = fromIntegral a5} in
+  cswap'_ a1' a2' a3' a4' a5' >>
+  return ()
+
+{-# LINE 68 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+zswap :: (Int) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+zswap a1 a2 a3 a4 a5 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = castPtr a4} in
+  let {a5' = fromIntegral a5} in
+  zswap'_ a1' a2' a3' a4' a5' >>
+  return ()
+
+{-# LINE 70 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+scopy :: (Int) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> IO ()
+scopy a1 a2 a3 a4 a5 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = castPtr a4} in
+  let {a5' = fromIntegral a5} in
+  scopy'_ a1' a2' a3' a4' a5' >>
+  return ()
+
+{-# LINE 72 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+dcopy :: (Int) -> (Ptr Double) -> (Int) -> (Ptr Double) -> (Int) -> IO ()
+dcopy a1 a2 a3 a4 a5 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = castPtr a4} in
+  let {a5' = fromIntegral a5} in
+  dcopy'_ a1' a2' a3' a4' a5' >>
+  return ()
+
+{-# LINE 74 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+ccopy :: (Int) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+ccopy a1 a2 a3 a4 a5 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = castPtr a4} in
+  let {a5' = fromIntegral a5} in
+  ccopy'_ a1' a2' a3' a4' a5' >>
+  return ()
+
+{-# LINE 76 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+zcopy :: (Int) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+zcopy a1 a2 a3 a4 a5 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = castPtr a4} in
+  let {a5' = fromIntegral a5} in
+  zcopy'_ a1' a2' a3' a4' a5' >>
+  return ()
+
+{-# LINE 78 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+saxpy :: (Int) -> (Float) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> IO ()
+saxpy a1 a2 a3 a4 a5 a6 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = CFloat a2} in
+  let {a3' = castPtr a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  saxpy'_ a1' a2' a3' a4' a5' a6' >>
+  return ()
+
+{-# LINE 80 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+daxpy :: (Int) -> (Double) -> (Ptr Double) -> (Int) -> (Ptr Double) -> (Int) -> IO ()
+daxpy a1 a2 a3 a4 a5 a6 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = CDouble a2} in
+  let {a3' = castPtr a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  daxpy'_ a1' a2' a3' a4' a5' a6' >>
+  return ()
+
+{-# LINE 82 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+caxpy :: (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+caxpy a1 a2 a3 a4 a5 a6 =
+  let {a1' = fromIntegral a1} in
+  withVoidPtr a2 $ \a2' ->
+  let {a3' = castPtr a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  caxpy'_ a1' a2' a3' a4' a5' a6' >>
+  return ()
+
+{-# LINE 84 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+zaxpy :: (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+zaxpy a1 a2 a3 a4 a5 a6 =
+  let {a1' = fromIntegral a1} in
+  withVoidPtr a2 $ \a2' ->
+  let {a3' = castPtr a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  zaxpy'_ a1' a2' a3' a4' a5' a6' >>
+  return ()
+
+{-# LINE 86 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+srotg :: (Ptr Float) -> (Ptr Float) -> (Ptr Float) -> (Ptr Float) -> IO ()
+srotg a1 a2 a3 a4 =
+  let {a1' = castPtr a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = castPtr a3} in
+  let {a4' = castPtr a4} in
+  srotg'_ a1' a2' a3' a4' >>
+  return ()
+
+{-# LINE 88 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+drotg :: (Ptr Double) -> (Ptr Double) -> (Ptr Double) -> (Ptr Double) -> IO ()
+drotg a1 a2 a3 a4 =
+  let {a1' = castPtr a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = castPtr a3} in
+  let {a4' = castPtr a4} in
+  drotg'_ a1' a2' a3' a4' >>
+  return ()
+
+{-# LINE 90 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+srotmg :: (Ptr Float) -> (Ptr Float) -> (Ptr Float) -> (Float) -> (Ptr Float) -> IO ()
+srotmg a1 a2 a3 a4 a5 =
+  let {a1' = castPtr a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = castPtr a3} in
+  let {a4' = CFloat a4} in
+  let {a5' = castPtr a5} in
+  srotmg'_ a1' a2' a3' a4' a5' >>
+  return ()
+
+{-# LINE 92 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+drotmg :: (Ptr Double) -> (Ptr Double) -> (Ptr Double) -> (Double) -> (Ptr Double) -> IO ()
+drotmg a1 a2 a3 a4 a5 =
+  let {a1' = castPtr a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = castPtr a3} in
+  let {a4' = CDouble a4} in
+  let {a5' = castPtr a5} in
+  drotmg'_ a1' a2' a3' a4' a5' >>
+  return ()
+
+{-# LINE 94 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+srot :: (Int) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> (Float) -> (Float) -> IO ()
+srot a1 a2 a3 a4 a5 a6 a7 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = castPtr a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = CFloat a6} in
+  let {a7' = CFloat a7} in
+  srot'_ a1' a2' a3' a4' a5' a6' a7' >>
+  return ()
+
+{-# LINE 96 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+drot :: (Int) -> (Ptr Double) -> (Int) -> (Ptr Double) -> (Int) -> (Double) -> (Double) -> IO ()
+drot a1 a2 a3 a4 a5 a6 a7 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = castPtr a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = CDouble a6} in
+  let {a7' = CDouble a7} in
+  drot'_ a1' a2' a3' a4' a5' a6' a7' >>
+  return ()
+
+{-# LINE 98 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+srotm :: (Int) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> (Ptr Float) -> IO ()
+srotm a1 a2 a3 a4 a5 a6 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = castPtr a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = castPtr a6} in
+  srotm'_ a1' a2' a3' a4' a5' a6' >>
+  return ()
+
+{-# LINE 100 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+drotm :: (Int) -> (Ptr Double) -> (Int) -> (Ptr Double) -> (Int) -> (Ptr Double) -> IO ()
+drotm a1 a2 a3 a4 a5 a6 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = castPtr a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = castPtr a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = castPtr a6} in
+  drotm'_ a1' a2' a3' a4' a5' a6' >>
+  return ()
+
+{-# LINE 102 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+sscal :: (Int) -> (Float) -> (Ptr Float) -> (Int) -> IO ()
+sscal a1 a2 a3 a4 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = CFloat a2} in
+  let {a3' = castPtr a3} in
+  let {a4' = fromIntegral a4} in
+  sscal'_ a1' a2' a3' a4' >>
+  return ()
+
+{-# LINE 104 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+dscal :: (Int) -> (Double) -> (Ptr Double) -> (Int) -> IO ()
+dscal a1 a2 a3 a4 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = CDouble a2} in
+  let {a3' = castPtr a3} in
+  let {a4' = fromIntegral a4} in
+  dscal'_ a1' a2' a3' a4' >>
+  return ()
+
+{-# LINE 106 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+cscal :: (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+cscal a1 a2 a3 a4 =
+  let {a1' = fromIntegral a1} in
+  withVoidPtr a2 $ \a2' ->
+  let {a3' = castPtr a3} in
+  let {a4' = fromIntegral a4} in
+  cscal'_ a1' a2' a3' a4' >>
+  return ()
+
+{-# LINE 108 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+csscal :: (Int) -> (Float) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+csscal a1 a2 a3 a4 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = CFloat a2} in
+  let {a3' = castPtr a3} in
+  let {a4' = fromIntegral a4} in
+  csscal'_ a1' a2' a3' a4' >>
+  return ()
+
+{-# LINE 110 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+zscal :: (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+zscal a1 a2 a3 a4 =
+  let {a1' = fromIntegral a1} in
+  withVoidPtr a2 $ \a2' ->
+  let {a3' = castPtr a3} in
+  let {a4' = fromIntegral a4} in
+  zscal'_ a1' a2' a3' a4' >>
+  return ()
+
+{-# LINE 112 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+zdscal :: (Int) -> (Double) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+zdscal a1 a2 a3 a4 =
+  let {a1' = fromIntegral a1} in
+  let {a2' = CDouble a2} in
+  let {a3' = castPtr a3} in
+  let {a4' = fromIntegral a4} in
+  zdscal'_ a1' a2' a3' a4' >>
+  return ()
+
+{-# LINE 114 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+sgemv :: (Order) -> (Transpose) -> (Int) -> (Int) -> (Float) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> (Float) -> (Ptr Float) -> (Int) -> IO ()
+sgemv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = CFloat a5} in
+  let {a6' = castPtr a6} in
+  let {a7' = fromIntegral a7} in
+  let {a8' = castPtr a8} in
+  let {a9' = fromIntegral a9} in
+  let {a10' = CFloat a10} in
+  let {a11' = castPtr a11} in
+  let {a12' = fromIntegral a12} in
+  sgemv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' >>
+  return ()
+
+{-# LINE 116 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+dgemv :: (Order) -> (Transpose) -> (Int) -> (Int) -> (Double) -> (Ptr Double) -> (Int) -> (Ptr Double) -> (Int) -> (Double) -> (Ptr Double) -> (Int) -> IO ()
+dgemv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = CDouble a5} in
+  let {a6' = castPtr a6} in
+  let {a7' = fromIntegral a7} in
+  let {a8' = castPtr a8} in
+  let {a9' = fromIntegral a9} in
+  let {a10' = CDouble a10} in
+  let {a11' = castPtr a11} in
+  let {a12' = fromIntegral a12} in
+  dgemv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' >>
+  return ()
+
+{-# LINE 118 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+cgemv :: (Order) -> (Transpose) -> (Int) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+cgemv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = fromIntegral a4} in
+  withVoidPtr a5 $ \a5' ->
+  let {a6' = castPtr a6} in
+  let {a7' = fromIntegral a7} in
+  let {a8' = castPtr a8} in
+  let {a9' = fromIntegral a9} in
+  withVoidPtr a10 $ \a10' ->
+  let {a11' = castPtr a11} in
+  let {a12' = fromIntegral a12} in
+  cgemv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' >>
+  return ()
+
+{-# LINE 120 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+zgemv :: (Order) -> (Transpose) -> (Int) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+zgemv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = fromIntegral a4} in
+  withVoidPtr a5 $ \a5' ->
+  let {a6' = castPtr a6} in
+  let {a7' = fromIntegral a7} in
+  let {a8' = castPtr a8} in
+  let {a9' = fromIntegral a9} in
+  withVoidPtr a10 $ \a10' ->
+  let {a11' = castPtr a11} in
+  let {a12' = fromIntegral a12} in
+  zgemv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' >>
+  return ()
+
+{-# LINE 122 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+sgbmv :: (Order) -> (Transpose) -> (Int) -> (Int) -> (Int) -> (Int) -> (Float) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> (Float) -> (Ptr Float) -> (Int) -> IO ()
+sgbmv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = CFloat a7} in
+  let {a8' = castPtr a8} in
+  let {a9' = fromIntegral a9} in
+  let {a10' = castPtr a10} in
+  let {a11' = fromIntegral a11} in
+  let {a12' = CFloat a12} in
+  let {a13' = castPtr a13} in
+  let {a14' = fromIntegral a14} in
+  sgbmv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' >>
+  return ()
+
+{-# LINE 124 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+dgbmv :: (Order) -> (Transpose) -> (Int) -> (Int) -> (Int) -> (Int) -> (Double) -> (Ptr Double) -> (Int) -> (Ptr Double) -> (Int) -> (Double) -> (Ptr Double) -> (Int) -> IO ()
+dgbmv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = CDouble a7} in
+  let {a8' = castPtr a8} in
+  let {a9' = fromIntegral a9} in
+  let {a10' = castPtr a10} in
+  let {a11' = fromIntegral a11} in
+  let {a12' = CDouble a12} in
+  let {a13' = castPtr a13} in
+  let {a14' = fromIntegral a14} in
+  dgbmv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' >>
+  return ()
+
+{-# LINE 126 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+cgbmv :: (Order) -> (Transpose) -> (Int) -> (Int) -> (Int) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+cgbmv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = fromIntegral a6} in
+  withVoidPtr a7 $ \a7' ->
+  let {a8' = castPtr a8} in
+  let {a9' = fromIntegral a9} in
+  let {a10' = castPtr a10} in
+  let {a11' = fromIntegral a11} in
+  withVoidPtr a12 $ \a12' ->
+  let {a13' = castPtr a13} in
+  let {a14' = fromIntegral a14} in
+  cgbmv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' >>
+  return ()
+
+{-# LINE 128 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+zgbmv :: (Order) -> (Transpose) -> (Int) -> (Int) -> (Int) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+zgbmv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = fromIntegral a6} in
+  withVoidPtr a7 $ \a7' ->
+  let {a8' = castPtr a8} in
+  let {a9' = fromIntegral a9} in
+  let {a10' = castPtr a10} in
+  let {a11' = fromIntegral a11} in
+  withVoidPtr a12 $ \a12' ->
+  let {a13' = castPtr a13} in
+  let {a14' = fromIntegral a14} in
+  zgbmv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' >>
+  return ()
+
+{-# LINE 130 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+strmv :: (Order) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> IO ()
+strmv a1 a2 a3 a4 a5 a6 a7 a8 a9 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = castPtr a6} in
+  let {a7' = fromIntegral a7} in
+  let {a8' = castPtr a8} in
+  let {a9' = fromIntegral a9} in
+  strmv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' >>
+  return ()
+
+{-# LINE 132 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+dtrmv :: (Order) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Ptr Double) -> (Int) -> (Ptr Double) -> (Int) -> IO ()
+dtrmv a1 a2 a3 a4 a5 a6 a7 a8 a9 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = castPtr a6} in
+  let {a7' = fromIntegral a7} in
+  let {a8' = castPtr a8} in
+  let {a9' = fromIntegral a9} in
+  dtrmv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' >>
+  return ()
+
+{-# LINE 134 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+ctrmv :: (Order) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+ctrmv a1 a2 a3 a4 a5 a6 a7 a8 a9 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = castPtr a6} in
+  let {a7' = fromIntegral a7} in
+  let {a8' = castPtr a8} in
+  let {a9' = fromIntegral a9} in
+  ctrmv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' >>
+  return ()
+
+{-# LINE 136 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+ztrmv :: (Order) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+ztrmv a1 a2 a3 a4 a5 a6 a7 a8 a9 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = castPtr a6} in
+  let {a7' = fromIntegral a7} in
+  let {a8' = castPtr a8} in
+  let {a9' = fromIntegral a9} in
+  ztrmv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' >>
+  return ()
+
+{-# LINE 138 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+stbmv :: (Order) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Int) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> IO ()
+stbmv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  stbmv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' >>
+  return ()
+
+{-# LINE 140 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+dtbmv :: (Order) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Int) -> (Ptr Double) -> (Int) -> (Ptr Double) -> (Int) -> IO ()
+dtbmv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  dtbmv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' >>
+  return ()
+
+{-# LINE 142 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+ctbmv :: (Order) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+ctbmv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  ctbmv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' >>
+  return ()
+
+{-# LINE 144 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+ztbmv :: (Order) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+ztbmv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  ztbmv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' >>
+  return ()
+
+{-# LINE 146 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+stpmv :: (Order) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Ptr Float) -> (Ptr Float) -> (Int) -> IO ()
+stpmv a1 a2 a3 a4 a5 a6 a7 a8 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = castPtr a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  stpmv'_ a1' a2' a3' a4' a5' a6' a7' a8' >>
+  return ()
+
+{-# LINE 148 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+dtpmv :: (Order) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Ptr Double) -> (Ptr Double) -> (Int) -> IO ()
+dtpmv a1 a2 a3 a4 a5 a6 a7 a8 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = castPtr a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  dtpmv'_ a1' a2' a3' a4' a5' a6' a7' a8' >>
+  return ()
+
+{-# LINE 150 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+ctpmv :: (Order) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Ptr (Complex Float)) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+ctpmv a1 a2 a3 a4 a5 a6 a7 a8 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = castPtr a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  ctpmv'_ a1' a2' a3' a4' a5' a6' a7' a8' >>
+  return ()
+
+{-# LINE 152 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+ztpmv :: (Order) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Ptr (Complex Double)) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+ztpmv a1 a2 a3 a4 a5 a6 a7 a8 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = castPtr a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  ztpmv'_ a1' a2' a3' a4' a5' a6' a7' a8' >>
+  return ()
+
+{-# LINE 154 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+strsv :: (Order) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> IO ()
+strsv a1 a2 a3 a4 a5 a6 a7 a8 a9 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = castPtr a6} in
+  let {a7' = fromIntegral a7} in
+  let {a8' = castPtr a8} in
+  let {a9' = fromIntegral a9} in
+  strsv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' >>
+  return ()
+
+{-# LINE 156 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+dtrsv :: (Order) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Ptr Double) -> (Int) -> (Ptr Double) -> (Int) -> IO ()
+dtrsv a1 a2 a3 a4 a5 a6 a7 a8 a9 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = castPtr a6} in
+  let {a7' = fromIntegral a7} in
+  let {a8' = castPtr a8} in
+  let {a9' = fromIntegral a9} in
+  dtrsv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' >>
+  return ()
+
+{-# LINE 158 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+ctrsv :: (Order) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+ctrsv a1 a2 a3 a4 a5 a6 a7 a8 a9 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = castPtr a6} in
+  let {a7' = fromIntegral a7} in
+  let {a8' = castPtr a8} in
+  let {a9' = fromIntegral a9} in
+  ctrsv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' >>
+  return ()
+
+{-# LINE 160 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+ztrsv :: (Order) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+ztrsv a1 a2 a3 a4 a5 a6 a7 a8 a9 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = castPtr a6} in
+  let {a7' = fromIntegral a7} in
+  let {a8' = castPtr a8} in
+  let {a9' = fromIntegral a9} in
+  ztrsv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' >>
+  return ()
+
+{-# LINE 162 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+stbsv :: (Order) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Int) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> IO ()
+stbsv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  stbsv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' >>
+  return ()
+
+{-# LINE 164 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+dtbsv :: (Order) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Int) -> (Ptr Double) -> (Int) -> (Ptr Double) -> (Int) -> IO ()
+dtbsv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  dtbsv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' >>
+  return ()
+
+{-# LINE 166 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+ctbsv :: (Order) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+ctbsv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  ctbsv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' >>
+  return ()
+
+{-# LINE 168 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+ztbsv :: (Order) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+ztbsv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  ztbsv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' >>
+  return ()
+
+{-# LINE 170 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+stpsv :: (Order) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Ptr Float) -> (Ptr Float) -> (Int) -> IO ()
+stpsv a1 a2 a3 a4 a5 a6 a7 a8 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = castPtr a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  stpsv'_ a1' a2' a3' a4' a5' a6' a7' a8' >>
+  return ()
+
+{-# LINE 172 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+dtpsv :: (Order) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Ptr Double) -> (Ptr Double) -> (Int) -> IO ()
+dtpsv a1 a2 a3 a4 a5 a6 a7 a8 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = castPtr a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  dtpsv'_ a1' a2' a3' a4' a5' a6' a7' a8' >>
+  return ()
+
+{-# LINE 174 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+ctpsv :: (Order) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Ptr (Complex Float)) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+ctpsv a1 a2 a3 a4 a5 a6 a7 a8 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = castPtr a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  ctpsv'_ a1' a2' a3' a4' a5' a6' a7' a8' >>
+  return ()
+
+{-# LINE 176 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+ztpsv :: (Order) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Ptr (Complex Double)) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+ztpsv a1 a2 a3 a4 a5 a6 a7 a8 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = castPtr a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  ztpsv'_ a1' a2' a3' a4' a5' a6' a7' a8' >>
+  return ()
+
+{-# LINE 178 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+ssymv :: (Order) -> (Uplo) -> (Int) -> (Float) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> (Float) -> (Ptr Float) -> (Int) -> IO ()
+ssymv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = CFloat a4} in
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = CFloat a9} in
+  let {a10' = castPtr a10} in
+  let {a11' = fromIntegral a11} in
+  ssymv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' >>
+  return ()
+
+{-# LINE 180 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+dsymv :: (Order) -> (Uplo) -> (Int) -> (Double) -> (Ptr Double) -> (Int) -> (Ptr Double) -> (Int) -> (Double) -> (Ptr Double) -> (Int) -> IO ()
+dsymv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = CDouble a4} in
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = CDouble a9} in
+  let {a10' = castPtr a10} in
+  let {a11' = fromIntegral a11} in
+  dsymv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' >>
+  return ()
+
+{-# LINE 182 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+ssbmv :: (Order) -> (Uplo) -> (Int) -> (Int) -> (Float) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> (Float) -> (Ptr Float) -> (Int) -> IO ()
+ssbmv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = CFloat a5} in
+  let {a6' = castPtr a6} in
+  let {a7' = fromIntegral a7} in
+  let {a8' = castPtr a8} in
+  let {a9' = fromIntegral a9} in
+  let {a10' = CFloat a10} in
+  let {a11' = castPtr a11} in
+  let {a12' = fromIntegral a12} in
+  ssbmv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' >>
+  return ()
+
+{-# LINE 184 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+dsbmv :: (Order) -> (Uplo) -> (Int) -> (Int) -> (Double) -> (Ptr Double) -> (Int) -> (Ptr Double) -> (Int) -> (Double) -> (Ptr Double) -> (Int) -> IO ()
+dsbmv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = CDouble a5} in
+  let {a6' = castPtr a6} in
+  let {a7' = fromIntegral a7} in
+  let {a8' = castPtr a8} in
+  let {a9' = fromIntegral a9} in
+  let {a10' = CDouble a10} in
+  let {a11' = castPtr a11} in
+  let {a12' = fromIntegral a12} in
+  dsbmv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' >>
+  return ()
+
+{-# LINE 186 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+sspmv :: (Order) -> (Uplo) -> (Int) -> (Float) -> (Ptr Float) -> (Ptr Float) -> (Int) -> (Float) -> (Ptr Float) -> (Int) -> IO ()
+sspmv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = CFloat a4} in
+  let {a5' = castPtr a5} in
+  let {a6' = castPtr a6} in
+  let {a7' = fromIntegral a7} in
+  let {a8' = CFloat a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  sspmv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' >>
+  return ()
+
+{-# LINE 188 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+dspmv :: (Order) -> (Uplo) -> (Int) -> (Double) -> (Ptr Double) -> (Ptr Double) -> (Int) -> (Double) -> (Ptr Double) -> (Int) -> IO ()
+dspmv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = CDouble a4} in
+  let {a5' = castPtr a5} in
+  let {a6' = castPtr a6} in
+  let {a7' = fromIntegral a7} in
+  let {a8' = CDouble a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  dspmv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' >>
+  return ()
+
+{-# LINE 190 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+sger :: (Order) -> (Int) -> (Int) -> (Float) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> IO ()
+sger a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 =
+  let {a1' = toCEnum a1} in
+  let {a2' = fromIntegral a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = CFloat a4} in
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  sger'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' >>
+  return ()
+
+{-# LINE 192 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+dger :: (Order) -> (Int) -> (Int) -> (Double) -> (Ptr Double) -> (Int) -> (Ptr Double) -> (Int) -> (Ptr Double) -> (Int) -> IO ()
+dger a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 =
+  let {a1' = toCEnum a1} in
+  let {a2' = fromIntegral a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = CDouble a4} in
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  dger'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' >>
+  return ()
+
+{-# LINE 194 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+ssyr :: (Order) -> (Uplo) -> (Int) -> (Float) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> IO ()
+ssyr a1 a2 a3 a4 a5 a6 a7 a8 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = CFloat a4} in
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  ssyr'_ a1' a2' a3' a4' a5' a6' a7' a8' >>
+  return ()
+
+{-# LINE 196 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+dsyr :: (Order) -> (Uplo) -> (Int) -> (Double) -> (Ptr Double) -> (Int) -> (Ptr Double) -> (Int) -> IO ()
+dsyr a1 a2 a3 a4 a5 a6 a7 a8 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = CDouble a4} in
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  dsyr'_ a1' a2' a3' a4' a5' a6' a7' a8' >>
+  return ()
+
+{-# LINE 198 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+ssyr2 :: (Order) -> (Uplo) -> (Int) -> (Float) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> IO ()
+ssyr2 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = CFloat a4} in
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  ssyr2'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' >>
+  return ()
+
+{-# LINE 200 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+dsyr2 :: (Order) -> (Uplo) -> (Int) -> (Double) -> (Ptr Double) -> (Int) -> (Ptr Double) -> (Int) -> (Ptr Double) -> (Int) -> IO ()
+dsyr2 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = CDouble a4} in
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  dsyr2'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' >>
+  return ()
+
+{-# LINE 202 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+sspr :: (Order) -> (Uplo) -> (Int) -> (Float) -> (Ptr Float) -> (Int) -> (Ptr Float) -> IO ()
+sspr a1 a2 a3 a4 a5 a6 a7 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = CFloat a4} in
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  sspr'_ a1' a2' a3' a4' a5' a6' a7' >>
+  return ()
+
+{-# LINE 204 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+dspr :: (Order) -> (Uplo) -> (Int) -> (Double) -> (Ptr Double) -> (Int) -> (Ptr Double) -> IO ()
+dspr a1 a2 a3 a4 a5 a6 a7 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = CDouble a4} in
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  dspr'_ a1' a2' a3' a4' a5' a6' a7' >>
+  return ()
+
+{-# LINE 206 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+sspr2 :: (Order) -> (Uplo) -> (Int) -> (Float) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> (Ptr Float) -> IO ()
+sspr2 a1 a2 a3 a4 a5 a6 a7 a8 a9 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = CFloat a4} in
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  sspr2'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' >>
+  return ()
+
+{-# LINE 208 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+dspr2 :: (Order) -> (Uplo) -> (Int) -> (Double) -> (Ptr Double) -> (Int) -> (Ptr Double) -> (Int) -> (Ptr Double) -> IO ()
+dspr2 a1 a2 a3 a4 a5 a6 a7 a8 a9 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = CDouble a4} in
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  dspr2'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' >>
+  return ()
+
+{-# LINE 210 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+chemv :: (Order) -> (Uplo) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+chemv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  withVoidPtr a4 $ \a4' ->
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  withVoidPtr a9 $ \a9' ->
+  let {a10' = castPtr a10} in
+  let {a11' = fromIntegral a11} in
+  chemv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' >>
+  return ()
+
+{-# LINE 212 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+zhemv :: (Order) -> (Uplo) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+zhemv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  withVoidPtr a4 $ \a4' ->
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  withVoidPtr a9 $ \a9' ->
+  let {a10' = castPtr a10} in
+  let {a11' = fromIntegral a11} in
+  zhemv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' >>
+  return ()
+
+{-# LINE 214 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+chbmv :: (Order) -> (Uplo) -> (Int) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+chbmv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = fromIntegral a4} in
+  withVoidPtr a5 $ \a5' ->
+  let {a6' = castPtr a6} in
+  let {a7' = fromIntegral a7} in
+  let {a8' = castPtr a8} in
+  let {a9' = fromIntegral a9} in
+  withVoidPtr a10 $ \a10' ->
+  let {a11' = castPtr a11} in
+  let {a12' = fromIntegral a12} in
+  chbmv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' >>
+  return ()
+
+{-# LINE 216 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+zhbmv :: (Order) -> (Uplo) -> (Int) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+zhbmv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = fromIntegral a4} in
+  withVoidPtr a5 $ \a5' ->
+  let {a6' = castPtr a6} in
+  let {a7' = fromIntegral a7} in
+  let {a8' = castPtr a8} in
+  let {a9' = fromIntegral a9} in
+  withVoidPtr a10 $ \a10' ->
+  let {a11' = castPtr a11} in
+  let {a12' = fromIntegral a12} in
+  zhbmv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' >>
+  return ()
+
+{-# LINE 218 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+chpmv :: (Order) -> (Uplo) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Ptr (Complex Float)) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+chpmv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  withVoidPtr a4 $ \a4' ->
+  let {a5' = castPtr a5} in
+  let {a6' = castPtr a6} in
+  let {a7' = fromIntegral a7} in
+  withVoidPtr a8 $ \a8' ->
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  chpmv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' >>
+  return ()
+
+{-# LINE 220 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+zhpmv :: (Order) -> (Uplo) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Ptr (Complex Double)) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+zhpmv a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  withVoidPtr a4 $ \a4' ->
+  let {a5' = castPtr a5} in
+  let {a6' = castPtr a6} in
+  let {a7' = fromIntegral a7} in
+  withVoidPtr a8 $ \a8' ->
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  zhpmv'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' >>
+  return ()
+
+{-# LINE 222 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+cgeru :: (Order) -> (Int) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+cgeru a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 =
+  let {a1' = toCEnum a1} in
+  let {a2' = fromIntegral a2} in
+  let {a3' = fromIntegral a3} in
+  withVoidPtr a4 $ \a4' ->
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  cgeru'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' >>
+  return ()
+
+{-# LINE 224 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+zgeru :: (Order) -> (Int) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+zgeru a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 =
+  let {a1' = toCEnum a1} in
+  let {a2' = fromIntegral a2} in
+  let {a3' = fromIntegral a3} in
+  withVoidPtr a4 $ \a4' ->
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  zgeru'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' >>
+  return ()
+
+{-# LINE 226 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+cgerc :: (Order) -> (Int) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+cgerc a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 =
+  let {a1' = toCEnum a1} in
+  let {a2' = fromIntegral a2} in
+  let {a3' = fromIntegral a3} in
+  withVoidPtr a4 $ \a4' ->
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  cgerc'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' >>
+  return ()
+
+{-# LINE 228 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+zgerc :: (Order) -> (Int) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+zgerc a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 =
+  let {a1' = toCEnum a1} in
+  let {a2' = fromIntegral a2} in
+  let {a3' = fromIntegral a3} in
+  withVoidPtr a4 $ \a4' ->
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  zgerc'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' >>
+  return ()
+
+{-# LINE 230 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+cher :: (Order) -> (Uplo) -> (Int) -> (Float) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+cher a1 a2 a3 a4 a5 a6 a7 a8 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = CFloat a4} in
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  cher'_ a1' a2' a3' a4' a5' a6' a7' a8' >>
+  return ()
+
+{-# LINE 232 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+zher :: (Order) -> (Uplo) -> (Int) -> (Double) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+zher a1 a2 a3 a4 a5 a6 a7 a8 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = CDouble a4} in
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  zher'_ a1' a2' a3' a4' a5' a6' a7' a8' >>
+  return ()
+
+{-# LINE 234 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+chpr :: (Order) -> (Uplo) -> (Int) -> (Float) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> IO ()
+chpr a1 a2 a3 a4 a5 a6 a7 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = CFloat a4} in
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  chpr'_ a1' a2' a3' a4' a5' a6' a7' >>
+  return ()
+
+{-# LINE 236 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+zhpr :: (Order) -> (Uplo) -> (Int) -> (Double) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> IO ()
+zhpr a1 a2 a3 a4 a5 a6 a7 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  let {a4' = CDouble a4} in
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  zhpr'_ a1' a2' a3' a4' a5' a6' a7' >>
+  return ()
+
+{-# LINE 238 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+cher2 :: (Order) -> (Uplo) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+cher2 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  withVoidPtr a4 $ \a4' ->
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  cher2'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' >>
+  return ()
+
+{-# LINE 240 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+zher2 :: (Order) -> (Uplo) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+zher2 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  withVoidPtr a4 $ \a4' ->
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  zher2'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' >>
+  return ()
+
+{-# LINE 242 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+chpr2 :: (Order) -> (Uplo) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> IO ()
+chpr2 a1 a2 a3 a4 a5 a6 a7 a8 a9 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  withVoidPtr a4 $ \a4' ->
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  chpr2'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' >>
+  return ()
+
+{-# LINE 244 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+zhpr2 :: (Order) -> (Uplo) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> IO ()
+zhpr2 a1 a2 a3 a4 a5 a6 a7 a8 a9 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = fromIntegral a3} in
+  withVoidPtr a4 $ \a4' ->
+  let {a5' = castPtr a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  zhpr2'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' >>
+  return ()
+
+{-# LINE 246 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+sgemm :: (Order) -> (Transpose) -> (Transpose) -> (Int) -> (Int) -> (Int) -> (Float) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> (Float) -> (Ptr Float) -> (Int) -> IO ()
+sgemm a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = CFloat a7} in
+  let {a8' = castPtr a8} in
+  let {a9' = fromIntegral a9} in
+  let {a10' = castPtr a10} in
+  let {a11' = fromIntegral a11} in
+  let {a12' = CFloat a12} in
+  let {a13' = castPtr a13} in
+  let {a14' = fromIntegral a14} in
+  sgemm'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' >>
+  return ()
+
+{-# LINE 248 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+dgemm :: (Order) -> (Transpose) -> (Transpose) -> (Int) -> (Int) -> (Int) -> (Double) -> (Ptr Double) -> (Int) -> (Ptr Double) -> (Int) -> (Double) -> (Ptr Double) -> (Int) -> IO ()
+dgemm a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = CDouble a7} in
+  let {a8' = castPtr a8} in
+  let {a9' = fromIntegral a9} in
+  let {a10' = castPtr a10} in
+  let {a11' = fromIntegral a11} in
+  let {a12' = CDouble a12} in
+  let {a13' = castPtr a13} in
+  let {a14' = fromIntegral a14} in
+  dgemm'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' >>
+  return ()
+
+{-# LINE 250 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+cgemm :: (Order) -> (Transpose) -> (Transpose) -> (Int) -> (Int) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+cgemm a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = fromIntegral a6} in
+  withVoidPtr a7 $ \a7' ->
+  let {a8' = castPtr a8} in
+  let {a9' = fromIntegral a9} in
+  let {a10' = castPtr a10} in
+  let {a11' = fromIntegral a11} in
+  withVoidPtr a12 $ \a12' ->
+  let {a13' = castPtr a13} in
+  let {a14' = fromIntegral a14} in
+  cgemm'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' >>
+  return ()
+
+{-# LINE 252 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+zgemm :: (Order) -> (Transpose) -> (Transpose) -> (Int) -> (Int) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+zgemm a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = fromIntegral a6} in
+  withVoidPtr a7 $ \a7' ->
+  let {a8' = castPtr a8} in
+  let {a9' = fromIntegral a9} in
+  let {a10' = castPtr a10} in
+  let {a11' = fromIntegral a11} in
+  withVoidPtr a12 $ \a12' ->
+  let {a13' = castPtr a13} in
+  let {a14' = fromIntegral a14} in
+  zgemm'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' >>
+  return ()
+
+{-# LINE 254 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+ssymm :: (Order) -> (Side) -> (Uplo) -> (Int) -> (Int) -> (Float) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> (Float) -> (Ptr Float) -> (Int) -> IO ()
+ssymm a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = CFloat a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  let {a11' = CFloat a11} in
+  let {a12' = castPtr a12} in
+  let {a13' = fromIntegral a13} in
+  ssymm'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' >>
+  return ()
+
+{-# LINE 256 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+dsymm :: (Order) -> (Side) -> (Uplo) -> (Int) -> (Int) -> (Double) -> (Ptr Double) -> (Int) -> (Ptr Double) -> (Int) -> (Double) -> (Ptr Double) -> (Int) -> IO ()
+dsymm a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = CDouble a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  let {a11' = CDouble a11} in
+  let {a12' = castPtr a12} in
+  let {a13' = fromIntegral a13} in
+  dsymm'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' >>
+  return ()
+
+{-# LINE 258 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+csymm :: (Order) -> (Side) -> (Uplo) -> (Int) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+csymm a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = fromIntegral a5} in
+  withVoidPtr a6 $ \a6' ->
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  withVoidPtr a11 $ \a11' ->
+  let {a12' = castPtr a12} in
+  let {a13' = fromIntegral a13} in
+  csymm'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' >>
+  return ()
+
+{-# LINE 260 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+zsymm :: (Order) -> (Side) -> (Uplo) -> (Int) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+zsymm a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = fromIntegral a5} in
+  withVoidPtr a6 $ \a6' ->
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  withVoidPtr a11 $ \a11' ->
+  let {a12' = castPtr a12} in
+  let {a13' = fromIntegral a13} in
+  zsymm'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' >>
+  return ()
+
+{-# LINE 262 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+ssyrk :: (Order) -> (Uplo) -> (Transpose) -> (Int) -> (Int) -> (Float) -> (Ptr Float) -> (Int) -> (Float) -> (Ptr Float) -> (Int) -> IO ()
+ssyrk a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = CFloat a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = CFloat a9} in
+  let {a10' = castPtr a10} in
+  let {a11' = fromIntegral a11} in
+  ssyrk'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' >>
+  return ()
+
+{-# LINE 264 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+dsyrk :: (Order) -> (Uplo) -> (Transpose) -> (Int) -> (Int) -> (Double) -> (Ptr Double) -> (Int) -> (Double) -> (Ptr Double) -> (Int) -> IO ()
+dsyrk a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = CDouble a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = CDouble a9} in
+  let {a10' = castPtr a10} in
+  let {a11' = fromIntegral a11} in
+  dsyrk'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' >>
+  return ()
+
+{-# LINE 266 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+csyrk :: (Order) -> (Uplo) -> (Transpose) -> (Int) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+csyrk a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = fromIntegral a5} in
+  withVoidPtr a6 $ \a6' ->
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  withVoidPtr a9 $ \a9' ->
+  let {a10' = castPtr a10} in
+  let {a11' = fromIntegral a11} in
+  csyrk'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' >>
+  return ()
+
+{-# LINE 268 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+zsyrk :: (Order) -> (Uplo) -> (Transpose) -> (Int) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+zsyrk a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = fromIntegral a5} in
+  withVoidPtr a6 $ \a6' ->
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  withVoidPtr a9 $ \a9' ->
+  let {a10' = castPtr a10} in
+  let {a11' = fromIntegral a11} in
+  zsyrk'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' >>
+  return ()
+
+{-# LINE 270 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+ssyr2k :: (Order) -> (Uplo) -> (Transpose) -> (Int) -> (Int) -> (Float) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> (Float) -> (Ptr Float) -> (Int) -> IO ()
+ssyr2k a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = CFloat a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  let {a11' = CFloat a11} in
+  let {a12' = castPtr a12} in
+  let {a13' = fromIntegral a13} in
+  ssyr2k'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' >>
+  return ()
+
+{-# LINE 272 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+dsyr2k :: (Order) -> (Uplo) -> (Transpose) -> (Int) -> (Int) -> (Double) -> (Ptr Double) -> (Int) -> (Ptr Double) -> (Int) -> (Double) -> (Ptr Double) -> (Int) -> IO ()
+dsyr2k a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = CDouble a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  let {a11' = CDouble a11} in
+  let {a12' = castPtr a12} in
+  let {a13' = fromIntegral a13} in
+  dsyr2k'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' >>
+  return ()
+
+{-# LINE 274 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+csyr2k :: (Order) -> (Uplo) -> (Transpose) -> (Int) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+csyr2k a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = fromIntegral a5} in
+  withVoidPtr a6 $ \a6' ->
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  withVoidPtr a11 $ \a11' ->
+  let {a12' = castPtr a12} in
+  let {a13' = fromIntegral a13} in
+  csyr2k'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' >>
+  return ()
+
+{-# LINE 276 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+zsyr2k :: (Order) -> (Uplo) -> (Transpose) -> (Int) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+zsyr2k a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = fromIntegral a5} in
+  withVoidPtr a6 $ \a6' ->
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  withVoidPtr a11 $ \a11' ->
+  let {a12' = castPtr a12} in
+  let {a13' = fromIntegral a13} in
+  zsyr2k'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' >>
+  return ()
+
+{-# LINE 278 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+chemm :: (Order) -> (Side) -> (Uplo) -> (Int) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+chemm a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = fromIntegral a5} in
+  withVoidPtr a6 $ \a6' ->
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  withVoidPtr a11 $ \a11' ->
+  let {a12' = castPtr a12} in
+  let {a13' = fromIntegral a13} in
+  chemm'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' >>
+  return ()
+
+{-# LINE 280 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+zhemm :: (Order) -> (Side) -> (Uplo) -> (Int) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+zhemm a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = fromIntegral a5} in
+  withVoidPtr a6 $ \a6' ->
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  withVoidPtr a11 $ \a11' ->
+  let {a12' = castPtr a12} in
+  let {a13' = fromIntegral a13} in
+  zhemm'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' >>
+  return ()
+
+{-# LINE 282 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+cherk :: (Order) -> (Uplo) -> (Transpose) -> (Int) -> (Int) -> (Float) -> (Ptr (Complex Float)) -> (Int) -> (Float) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+cherk a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = CFloat a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = CFloat a9} in
+  let {a10' = castPtr a10} in
+  let {a11' = fromIntegral a11} in
+  cherk'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' >>
+  return ()
+
+{-# LINE 284 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+zherk :: (Order) -> (Uplo) -> (Transpose) -> (Int) -> (Int) -> (Double) -> (Ptr (Complex Double)) -> (Int) -> (Double) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+zherk a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = fromIntegral a5} in
+  let {a6' = CDouble a6} in
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = CDouble a9} in
+  let {a10' = castPtr a10} in
+  let {a11' = fromIntegral a11} in
+  zherk'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' >>
+  return ()
+
+{-# LINE 286 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+cher2k :: (Order) -> (Uplo) -> (Transpose) -> (Int) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> (Float) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+cher2k a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = fromIntegral a5} in
+  withVoidPtr a6 $ \a6' ->
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  let {a11' = CFloat a11} in
+  let {a12' = castPtr a12} in
+  let {a13' = fromIntegral a13} in
+  cher2k'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' >>
+  return ()
+
+{-# LINE 288 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+zher2k :: (Order) -> (Uplo) -> (Transpose) -> (Int) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> (Double) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+zher2k a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = fromIntegral a4} in
+  let {a5' = fromIntegral a5} in
+  withVoidPtr a6 $ \a6' ->
+  let {a7' = castPtr a7} in
+  let {a8' = fromIntegral a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  let {a11' = CDouble a11} in
+  let {a12' = castPtr a12} in
+  let {a13' = fromIntegral a13} in
+  zher2k'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' >>
+  return ()
+
+{-# LINE 290 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+strmm :: (Order) -> (Side) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Int) -> (Float) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> IO ()
+strmm a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = toCEnum a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = fromIntegral a7} in
+  let {a8' = CFloat a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  let {a11' = castPtr a11} in
+  let {a12' = fromIntegral a12} in
+  strmm'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' >>
+  return ()
+
+{-# LINE 292 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+dtrmm :: (Order) -> (Side) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Int) -> (Double) -> (Ptr Double) -> (Int) -> (Ptr Double) -> (Int) -> IO ()
+dtrmm a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = toCEnum a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = fromIntegral a7} in
+  let {a8' = CDouble a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  let {a11' = castPtr a11} in
+  let {a12' = fromIntegral a12} in
+  dtrmm'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' >>
+  return ()
+
+{-# LINE 294 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+ctrmm :: (Order) -> (Side) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+ctrmm a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = toCEnum a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = fromIntegral a7} in
+  withVoidPtr a8 $ \a8' ->
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  let {a11' = castPtr a11} in
+  let {a12' = fromIntegral a12} in
+  ctrmm'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' >>
+  return ()
+
+{-# LINE 296 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+ztrmm :: (Order) -> (Side) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+ztrmm a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = toCEnum a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = fromIntegral a7} in
+  withVoidPtr a8 $ \a8' ->
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  let {a11' = castPtr a11} in
+  let {a12' = fromIntegral a12} in
+  ztrmm'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' >>
+  return ()
+
+{-# LINE 298 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+strsm :: (Order) -> (Side) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Int) -> (Float) -> (Ptr Float) -> (Int) -> (Ptr Float) -> (Int) -> IO ()
+strsm a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = toCEnum a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = fromIntegral a7} in
+  let {a8' = CFloat a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  let {a11' = castPtr a11} in
+  let {a12' = fromIntegral a12} in
+  strsm'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' >>
+  return ()
+
+{-# LINE 300 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+dtrsm :: (Order) -> (Side) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Int) -> (Double) -> (Ptr Double) -> (Int) -> (Ptr Double) -> (Int) -> IO ()
+dtrsm a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = toCEnum a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = fromIntegral a7} in
+  let {a8' = CDouble a8} in
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  let {a11' = castPtr a11} in
+  let {a12' = fromIntegral a12} in
+  dtrsm'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' >>
+  return ()
+
+{-# LINE 302 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+ctrsm :: (Order) -> (Side) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Int) -> (Complex Float) -> (Ptr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (Int) -> IO ()
+ctrsm a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = toCEnum a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = fromIntegral a7} in
+  withVoidPtr a8 $ \a8' ->
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  let {a11' = castPtr a11} in
+  let {a12' = fromIntegral a12} in
+  ctrsm'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' >>
+  return ()
+
+{-# LINE 304 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+ztrsm :: (Order) -> (Side) -> (Uplo) -> (Transpose) -> (Diag) -> (Int) -> (Int) -> (Complex Double) -> (Ptr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (Int) -> IO ()
+ztrsm a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 =
+  let {a1' = toCEnum a1} in
+  let {a2' = toCEnum a2} in
+  let {a3' = toCEnum a3} in
+  let {a4' = toCEnum a4} in
+  let {a5' = toCEnum a5} in
+  let {a6' = fromIntegral a6} in
+  let {a7' = fromIntegral a7} in
+  withVoidPtr a8 $ \a8' ->
+  let {a9' = castPtr a9} in
+  let {a10' = fromIntegral a10} in
+  let {a11' = castPtr a11} in
+  let {a12' = fromIntegral a12} in
+  ztrsm'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' >>
+  return ()
+
+{-# LINE 306 "src/Blas/Primitive/Unsafe_.chs" #-}
+
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_sdsdot"
+  sdsdot'_ :: (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> (IO CFloat)))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_dsdot"
+  dsdot'_ :: (BlasInt -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> (IO CDouble))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_sdot"
+  sdot'_ :: (BlasInt -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> (IO CFloat))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_ddot"
+  ddot'_ :: (BlasInt -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> (IO CDouble))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_cdotu_sub"
+  cdotu_sub'_ :: (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (IO ())))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_zdotu_sub"
+  zdotu_sub'_ :: (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (IO ())))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_cdotc_sub"
+  cdotc_sub'_ :: (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (IO ())))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_zdotc_sub"
+  zdotc_sub'_ :: (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (IO ())))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_snrm2"
+  snrm2'_ :: (BlasInt -> ((Ptr CFloat) -> (BlasInt -> (IO CFloat))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_dnrm2"
+  dnrm2'_ :: (BlasInt -> ((Ptr CDouble) -> (BlasInt -> (IO CDouble))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_scnrm2"
+  scnrm2'_ :: (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO CFloat))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_dznrm2"
+  dznrm2'_ :: (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO CDouble))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_sasum"
+  sasum'_ :: (BlasInt -> ((Ptr CFloat) -> (BlasInt -> (IO CFloat))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_dasum"
+  dasum'_ :: (BlasInt -> ((Ptr CDouble) -> (BlasInt -> (IO CDouble))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_scasum"
+  scasum'_ :: (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO CFloat))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_dzasum"
+  dzasum'_ :: (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO CDouble))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_isamax"
+  isamax'_ :: (BlasInt -> ((Ptr CFloat) -> (BlasInt -> (IO BlasIndex))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_idamax"
+  idamax'_ :: (BlasInt -> ((Ptr CDouble) -> (BlasInt -> (IO BlasIndex))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_icamax"
+  icamax'_ :: (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO BlasIndex))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_izamax"
+  izamax'_ :: (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO BlasIndex))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_sswap"
+  sswap'_ :: (BlasInt -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> (IO ()))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_dswap"
+  dswap'_ :: (BlasInt -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> (IO ()))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_cswap"
+  cswap'_ :: (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO ()))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_zswap"
+  zswap'_ :: (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO ()))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_scopy"
+  scopy'_ :: (BlasInt -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> (IO ()))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_dcopy"
+  dcopy'_ :: (BlasInt -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> (IO ()))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_ccopy"
+  ccopy'_ :: (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO ()))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_zcopy"
+  zcopy'_ :: (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO ()))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_saxpy"
+  saxpy'_ :: (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> (IO ())))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_daxpy"
+  daxpy'_ :: (BlasInt -> (CDouble -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> (IO ())))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_caxpy"
+  caxpy'_ :: (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO ())))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_zaxpy"
+  zaxpy'_ :: (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO ())))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_srotg"
+  srotg'_ :: ((Ptr CFloat) -> ((Ptr CFloat) -> ((Ptr CFloat) -> ((Ptr CFloat) -> (IO ())))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_drotg"
+  drotg'_ :: ((Ptr CDouble) -> ((Ptr CDouble) -> ((Ptr CDouble) -> ((Ptr CDouble) -> (IO ())))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_srotmg"
+  srotmg'_ :: ((Ptr CFloat) -> ((Ptr CFloat) -> ((Ptr CFloat) -> (CFloat -> ((Ptr CFloat) -> (IO ()))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_drotmg"
+  drotmg'_ :: ((Ptr CDouble) -> ((Ptr CDouble) -> ((Ptr CDouble) -> (CDouble -> ((Ptr CDouble) -> (IO ()))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_srot"
+  srot'_ :: (BlasInt -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> (CFloat -> (CFloat -> (IO ()))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_drot"
+  drot'_ :: (BlasInt -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> (CDouble -> (CDouble -> (IO ()))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_srotm"
+  srotm'_ :: (BlasInt -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (IO ())))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_drotm"
+  drotm'_ :: (BlasInt -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (IO ())))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_sscal"
+  sscal'_ :: (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> (IO ())))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_dscal"
+  dscal'_ :: (BlasInt -> (CDouble -> ((Ptr CDouble) -> (BlasInt -> (IO ())))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_cscal"
+  cscal'_ :: (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> (IO ())))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_csscal"
+  csscal'_ :: (BlasInt -> (CFloat -> ((Ptr ()) -> (BlasInt -> (IO ())))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_zscal"
+  zscal'_ :: (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> (IO ())))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_zdscal"
+  zdscal'_ :: (BlasInt -> (CDouble -> ((Ptr ()) -> (BlasInt -> (IO ())))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_sgemv"
+  sgemv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> (IO ())))))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_dgemv"
+  dgemv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (CDouble -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> (CDouble -> ((Ptr CDouble) -> (BlasInt -> (IO ())))))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_cgemv"
+  cgemv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_zgemv"
+  zgemv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_sgbmv"
+  sgbmv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> (IO ())))))))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_dgbmv"
+  dgbmv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (CDouble -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> (CDouble -> ((Ptr CDouble) -> (BlasInt -> (IO ())))))))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_cgbmv"
+  cgbmv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_zgbmv"
+  zgbmv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_strmv"
+  strmv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> (IO ()))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_dtrmv"
+  dtrmv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> (IO ()))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_ctrmv"
+  ctrmv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO ()))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_ztrmv"
+  ztrmv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO ()))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_stbmv"
+  stbmv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> (IO ())))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_dtbmv"
+  dtbmv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> (IO ())))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_ctbmv"
+  ctbmv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_ztbmv"
+  ztbmv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_stpmv"
+  stpmv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr CFloat) -> ((Ptr CFloat) -> (BlasInt -> (IO ())))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_dtpmv"
+  dtpmv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr CDouble) -> ((Ptr CDouble) -> (BlasInt -> (IO ())))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_ctpmv"
+  ctpmv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_ztpmv"
+  ztpmv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_strsv"
+  strsv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> (IO ()))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_dtrsv"
+  dtrsv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> (IO ()))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_ctrsv"
+  ctrsv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO ()))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_ztrsv"
+  ztrsv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO ()))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_stbsv"
+  stbsv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> (IO ())))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_dtbsv"
+  dtbsv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> (IO ())))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_ctbsv"
+  ctbsv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_ztbsv"
+  ztbsv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_stpsv"
+  stpsv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr CFloat) -> ((Ptr CFloat) -> (BlasInt -> (IO ())))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_dtpsv"
+  dtpsv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr CDouble) -> ((Ptr CDouble) -> (BlasInt -> (IO ())))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_ctpsv"
+  ctpsv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_ztpsv"
+  ztpsv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_ssymv"
+  ssymv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> (IO ()))))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_dsymv"
+  dsymv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (CDouble -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> (CDouble -> ((Ptr CDouble) -> (BlasInt -> (IO ()))))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_ssbmv"
+  ssbmv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> (IO ())))))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_dsbmv"
+  dsbmv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (CDouble -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> (CDouble -> ((Ptr CDouble) -> (BlasInt -> (IO ())))))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_sspmv"
+  sspmv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (CFloat -> ((Ptr CFloat) -> ((Ptr CFloat) -> (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> (IO ())))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_dspmv"
+  dspmv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (CDouble -> ((Ptr CDouble) -> ((Ptr CDouble) -> (BlasInt -> (CDouble -> ((Ptr CDouble) -> (BlasInt -> (IO ())))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_sger"
+  sger'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> (IO ())))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_dger"
+  dger'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (CDouble -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> (IO ())))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_ssyr"
+  ssyr'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> (IO ())))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_dsyr"
+  dsyr'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (CDouble -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> (IO ())))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_ssyr2"
+  ssyr2'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> (IO ())))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_dsyr2"
+  dsyr2'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (CDouble -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> (IO ())))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_sspr"
+  sspr'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (IO ()))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_dspr"
+  dspr'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (CDouble -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (IO ()))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_sspr2"
+  sspr2'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (IO ()))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_dspr2"
+  dspr2'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (CDouble -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (IO ()))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_chemv"
+  chemv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> (IO ()))))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_zhemv"
+  zhemv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> (IO ()))))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_chbmv"
+  chbmv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_zhbmv"
+  zhbmv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_chpmv"
+  chpmv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_zhpmv"
+  zhpmv'_ :: (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_cgeru"
+  cgeru'_ :: (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_zgeru"
+  zgeru'_ :: (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_cgerc"
+  cgerc'_ :: (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_zgerc"
+  zgerc'_ :: (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_cher"
+  cher'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (CFloat -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_zher"
+  zher'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (CDouble -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_chpr"
+  chpr'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (CFloat -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (IO ()))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_zhpr"
+  zhpr'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (CDouble -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (IO ()))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_cher2"
+  cher2'_ :: (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_zher2"
+  zher2'_ :: (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_chpr2"
+  chpr2'_ :: (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (IO ()))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_zhpr2"
+  zhpr2'_ :: (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (IO ()))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_sgemm"
+  sgemm'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> (IO ())))))))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_dgemm"
+  dgemm'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (CDouble -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> (CDouble -> ((Ptr CDouble) -> (BlasInt -> (IO ())))))))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_cgemm"
+  cgemm'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_zgemm"
+  zgemm'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_ssymm"
+  ssymm'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> (IO ()))))))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_dsymm"
+  dsymm'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (CDouble -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> (CDouble -> ((Ptr CDouble) -> (BlasInt -> (IO ()))))))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_csymm"
+  csymm'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> (IO ()))))))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_zsymm"
+  zsymm'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> (IO ()))))))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_ssyrk"
+  ssyrk'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> (IO ()))))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_dsyrk"
+  dsyrk'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (CDouble -> ((Ptr CDouble) -> (BlasInt -> (CDouble -> ((Ptr CDouble) -> (BlasInt -> (IO ()))))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_csyrk"
+  csyrk'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> (IO ()))))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_zsyrk"
+  zsyrk'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> (IO ()))))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_ssyr2k"
+  ssyr2k'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> (IO ()))))))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_dsyr2k"
+  dsyr2k'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (CDouble -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> (CDouble -> ((Ptr CDouble) -> (BlasInt -> (IO ()))))))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_csyr2k"
+  csyr2k'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> (IO ()))))))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_zsyr2k"
+  zsyr2k'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> (IO ()))))))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_chemm"
+  chemm'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> (IO ()))))))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_zhemm"
+  zhemm'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> (IO ()))))))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_cherk"
+  cherk'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (CFloat -> ((Ptr ()) -> (BlasInt -> (CFloat -> ((Ptr ()) -> (BlasInt -> (IO ()))))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_zherk"
+  zherk'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (CDouble -> ((Ptr ()) -> (BlasInt -> (CDouble -> ((Ptr ()) -> (BlasInt -> (IO ()))))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_cher2k"
+  cher2k'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (CFloat -> ((Ptr ()) -> (BlasInt -> (IO ()))))))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_zher2k"
+  zher2k'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (CDouble -> ((Ptr ()) -> (BlasInt -> (IO ()))))))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_strmm"
+  strmm'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> (IO ())))))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_dtrmm"
+  dtrmm'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (CDouble -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> (IO ())))))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_ctrmm"
+  ctrmm'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_ztrmm"
+  ztrmm'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_strsm"
+  strsm'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (CFloat -> ((Ptr CFloat) -> (BlasInt -> ((Ptr CFloat) -> (BlasInt -> (IO ())))))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_dtrsm"
+  dtrsm'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (CDouble -> ((Ptr CDouble) -> (BlasInt -> ((Ptr CDouble) -> (BlasInt -> (IO ())))))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_ctrsm"
+  ctrsm'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))))))
+
+foreign import ccall unsafe "src/Blas/Primitive/Unsafe_.chs.h cblas_ztrsm"
+  ztrsm'_ :: (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> (BlasInt -> ((Ptr ()) -> ((Ptr ()) -> (BlasInt -> ((Ptr ()) -> (BlasInt -> (IO ())))))))))))))
diff --git a/src/BlasCTypes.hs b/src/BlasCTypes.hs
new file mode 100644
--- /dev/null
+++ b/src/BlasCTypes.hs
@@ -0,0 +1,16 @@
+{-# OPTIONS_HADDOCK hide #-}
+module BlasCTypes (BlasInt, BlasIndex) where
+import Foreign.C.Types
+
+-- Here, we define some aliases for the C types in case the Blas
+-- implementation decides to use some non-standard types.
+
+-- This is the main integral type used by the CBlas interface.  Usually, this
+-- corresponds the `int` type in C.  However, some implementations may offer
+-- an alternative interface that uses a different type (e.g. `int64`).
+type BlasInt = CInt
+
+-- This is the integral type used for indices returned by `iamax` functions.
+-- Usually, this corresponds to the `size_t` type in C.  In CBlas, this is
+-- referred to as `CBLAS_INDEX`.
+type BlasIndex = CSize
diff --git a/src/FFI.hs b/src/FFI.hs
new file mode 100644
--- /dev/null
+++ b/src/FFI.hs
@@ -0,0 +1,32 @@
+{-# OPTIONS_HADDOCK hide #-}
+module FFI where
+import Foreign (Ptr, Storable(peek), castPtr, with, alloca)
+import Foreign.C (CFloat(CFloat), CDouble(CDouble))
+
+-- | Convert to a C enum value.
+toCEnum :: (Enum a, Num b) => a -> b
+toCEnum = fromIntegral . fromEnum
+
+-- | Convert from a C enum value.
+fromCEnum :: (Integral a, Enum b) => a -> b
+fromCEnum = toEnum . fromIntegral
+
+-- | Convert by unwrapping a @newtype@.
+--   Safe, though possibly unportable.
+fromCFloat :: CFloat -> Float
+fromCFloat (CFloat x) = x
+
+-- | Convert by unwrapping a @newtype@.
+--   Safe, though possibly unportable.
+fromCDouble :: CDouble -> Double
+fromCDouble (CDouble x) = x
+
+-- | Same as 'with' but accepts a @void@-pointer instead.
+--   Warning: make sure the type is compatible.
+withVoidPtr :: Storable a => a -> (Ptr () -> IO c) -> IO c
+withVoidPtr x f = with x (f . castPtr)
+
+-- | Extract the return value via a pointer argument.
+--   Warning: make sure the only a one element is written.
+getReturnValue :: Storable a => (Ptr a -> IO ()) -> IO a
+getReturnValue f = alloca $ \ x -> f x >> peek x
diff --git a/tests/MainTest.hs b/tests/MainTest.hs
new file mode 100644
--- /dev/null
+++ b/tests/MainTest.hs
@@ -0,0 +1,83 @@
+{-# LANGUAGE Rank2Types #-}
+module MainTest (tests) where
+import Control.Monad.ST (RealWorld)
+import Data.Complex (Complex)
+import Data.Vector.Storable (MVector(MVector))
+import Distribution.TestSuite
+  ( Progress(Finished)
+  , Result(Fail, Pass)
+  , Test(Test)
+  , TestInstance(TestInstance)
+  )
+import Foreign (Ptr, Storable, withForeignPtr)
+import Text.Printf (printf)
+import Blas.Generic.Unsafe (Numeric)
+import qualified Data.Vector.Generic.Mutable as MVector
+import qualified Data.Vector.Storable as Vector
+import qualified Distribution.TestSuite as Test
+import qualified Blas.Primitive.Types as Blas
+import qualified Blas.Generic.Unsafe as Blas
+
+tests :: IO [Test]
+tests =
+  return $
+  mapNumericTypes (simpleTest "gemm test" . testGemm)
+
+simpleTest :: String -> IO Progress -> Test
+simpleTest name action = Test test
+  where test = TestInstance
+               { Test.run = action
+               , Test.name = name
+               , Test.tags = []
+               , Test.options = []
+               , Test.setOption = \_ _ -> Right test
+               }
+
+passT :: IO Progress
+passT = return $ Finished Pass
+
+failT :: String -> IO Progress
+failT = return . Finished .Fail
+
+mapNumericTypes :: (forall a. (Eq a, Numeric a, Show a) => a -> b) -> [b]
+mapNumericTypes f =
+  [ f (dummy :: Float)
+  , f (dummy :: Double)
+  , f (dummy :: Complex Float)
+  , f (dummy :: Complex Double)
+  ]
+
+dummy :: a
+dummy = error "dummy value that shouldn't be used"
+
+withMVector :: MVector s a -> (Ptr a -> IO b) -> IO b
+withMVector (MVector _ foreignPtr) = withForeignPtr foreignPtr
+
+mVectorFromList :: Storable a => [a] -> IO (MVector RealWorld a)
+mVectorFromList = Vector.thaw . Vector.fromList
+
+testGemm :: (Eq a, Numeric a, Show a) => a -> IO Progress
+testGemm numType = do
+  let order    = Blas.RowMajor
+      transa   = Blas.NoTrans
+      transb   = Blas.Trans
+      n        = 2
+      size     = n * n
+      alpha    = 1.0 `asTypeOf` numType
+      beta     = 0.0
+      a        = Vector.fromList [1, 2, 3, 4]
+      b        = Vector.fromList [1, 2, 3, 5]
+      expected = Vector.fromList [5, 13, 11, 29]
+
+  c <- mVectorFromList $ take size (repeat 0)
+
+  Vector.unsafeWith a $ \ pa ->
+    Vector.unsafeWith b $ \ pb ->
+      withMVector c $ \ pc ->
+        Blas.gemm order transa transb n n n alpha pa n pb n beta pc n
+
+  c' <- Vector.freeze c
+  if c' == expected
+    then passT
+    else failT $ printf "result does not match: %s != %s"
+                        (show c') (show expected)
