packages feed

lapack-comfort-array (empty) → 0.0

raw patch · 13 files changed

+57377/−0 lines, 13 filesdep +basedep +comfort-arraydep +lapack-ffisetup-changed

Dependencies added: base, comfort-array, lapack-ffi, netlib-comfort-array, netlib-ffi, storable-complex, transformers

Files

+ LICENSE view
@@ -0,0 +1,27 @@+Copyright (c) Henning Thielemann 2019++All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions+are met:+1. Redistributions of source code must retain the above copyright+   notice, this list of conditions and the following disclaimer.+2. Redistributions in binary form must reproduce the above copyright+   notice, this list of conditions and the following disclaimer in the+   documentation and/or other materials provided with the distribution.+3. Neither the name of the author nor the names of his contributors+   may be used to endorse or promote products derived from this software+   without specific prior written permission.++THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE+ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF+SUCH DAMAGE.
+ Setup.lhs view
@@ -0,0 +1,3 @@+#! /usr/bin/env runhaskell+> import Distribution.Simple+> main = defaultMain
+ lapack-comfort-array.cabal view
@@ -0,0 +1,75 @@+Name:             lapack-comfort-array+Version:          0.0+License:          BSD3+License-File:     LICENSE+Author:           Henning Thielemann <haskell@henning-thielemann.de>+Maintainer:       Henning Thielemann <haskell@henning-thielemann.de>+Homepage:         http://hub.darcs.net/thielema/lapack-comfort-array/+Category:         Math+Synopsis:         Auto-generated interface to Fortran LAPACK via comfort-array+Description:+  LAPACK is a package for efficient numerically robust linear algebra.+  The original implementation is written in FORTRAN.+  This is a semi-automatically generated mid-level wrapper.+  The functions are not ready to use for high-level applications,+  but they are a step closer.+  .+  The functions are all in IO monad because they are auto-generated and+  we cannot make sure automatically that unsafePerformIO is always safe.+  Instead of raw pointers we use Arrays and Mutable.Arrays+  and assign and check array bounds to LAPACK function parameters,+  as far we can retrieve this information from the FORTRAN comments.+  We check consistency of dimensions where consistent dimensions are required,+  but we cannot do all kind of bound checks.+  We use immutable Array for input and output parameters+  and mutable Mutable.Array for input/output parameters.+  LAPACK plays some nasty tricks of in-place array updates+  on input/output arrays+  even if the dimensions of input and output array differ (see e.g. GELS).+  The wrappers also manage allocation of memory for function parameters.+  This is necessary since FORTRAN passes all parameters by reference.+  Further on, the wrappers convert from Haskell values like @Int@+  to low-level values like @CInt@.+  .+  We provide bindings to functions of all variants+  for @Float@, @Double@, @Complex Float@ and @Complex Double@.+  We do not use TemplateHaskell nor HSC nor CHS, but instead Haskell 98 code+  generated by the custom @lapack-ffi-tools@ package.+Tested-With:      GHC==7.4.2, GHC==7.8.4+Cabal-Version:    1.14+Build-Type:       Simple++Source-Repository this+  Tag:         0.0+  Type:        darcs+  Location:    http://hub.darcs.net/thielema/lapack-comfort-array/++Source-Repository head+  Type:        darcs+  Location:    http://hub.darcs.net/thielema/lapack-comfort-array/++Library+  Build-Depends:+    lapack-ffi >=0.0 && <0.1,+    netlib-comfort-array >=0.0 && <0.1,+    netlib-ffi >=0.0 && <0.2,+    comfort-array >=0.3 && <0.4,+    storable-complex >=0.2.2 && <0.3,+    transformers >=0.4 && <0.6,+    base >=4.5 && <5++  GHC-Options:      -Wall -fwarn-missing-import-lists+  Hs-Source-Dirs:   src+  Default-Language: Haskell98+  Exposed-Modules:+    Numeric.LAPACK.ComfortArray.Float+    Numeric.LAPACK.ComfortArray.Double+    Numeric.LAPACK.ComfortArray.Real+    Numeric.LAPACK.ComfortArray.ComplexFloat+    Numeric.LAPACK.ComfortArray.ComplexDouble+    Numeric.LAPACK.ComfortArray.Complex+    Numeric.LAPACK.ComfortArray.Generic+    Numeric.LAPACK.ComfortArray.Miscellaneous+  Other-Modules:+    Numeric.LAPACK.ComfortArray.Demo+    Numeric.LAPACK.ComfortArray.Example
+ src/Numeric/LAPACK/ComfortArray/Complex.hs view
@@ -0,0 +1,2439 @@+-- Do not edit! Automatically generated by create-lapack-ffi.+module Numeric.LAPACK.ComfortArray.Complex (+   bbcsd,+   bdsqr,+   gbbrd,+   gbcon,+   gbequ,+   gbequb,+   gbrfs,+   gbsv,+   gbsvx,+   gbtf2,+   gbtrf,+   gbtrs,+   gebak,+   gebal,+   gebd2,+   gebrd,+   gecon,+   geequ,+   geequb,+   gees,+   geesx,+   geev,+   geevx,+   gehd2,+   gehrd,+   gelq2,+   gelqf,+   gels,+   gelsd,+   gelss,+   gelsy,+   geql2,+   geqlf,+   geqp3,+   geqr2,+   geqr2p,+   geqrf,+   geqrfp,+   gerfs,+   gerq2,+   gerqf,+   gesc2,+   gesdd,+   gesv,+   gesvd,+   gesvx,+   getc2,+   getf2,+   getrf,+   getri,+   getrs,+   ggbak,+   ggbal,+   gges,+   ggesx,+   ggev,+   ggevx,+   ggglm,+   gghrd,+   gglse,+   ggqrf,+   ggrqf,+   gtcon,+   gtrfs,+   gtsv,+   gtsvx,+   gttrf,+   gttrs,+   gtts2,+   hbev,+   hbevd,+   hbevx,+   hbgst,+   hbgv,+   hbgvd,+   hbgvx,+   hbtrd,+   hecon,+   heequb,+   heev,+   heevd,+   heevr,+   heevx,+   hegs2,+   hegst,+   hegv,+   hegvd,+   hegvx,+   herfs,+   hesv,+   hesvx,+   heswapr,+   hetd2,+   hetf2,+   hetrd,+   hetrf,+   hetri,+   hetri2,+   hetri2x,+   hetrs,+   hetrs2,+   hfrk,+   hgeqz,+   hpcon,+   hpev,+   hpevd,+   hpevx,+   hpgst,+   hpgv,+   hpgvd,+   hpgvx,+   hprfs,+   hpsv,+   hpsvx,+   hptrd,+   hptrf,+   hptri,+   hptrs,+   hsein,+   hseqr,+   ilalc,+   ilalr,+   imax1,+   labrd,+   lacgv,+   lacn2,+   lacon,+   lacp2,+   lacpy,+   lacrm,+   lacrt,+   laed0,+   laed7,+   laed8,+   laein,+   laesy,+   laev2,+   lags2,+   lagtm,+   lahef,+   lahqr,+   lahr2,+   laic1,+   lals0,+   lalsa,+   lalsd,+   langb,+   lange,+   langt,+   lanhb,+   lanhe,+   lanhf,+   lanhp,+   lanhs,+   lanht,+   lansb,+   lansp,+   lansy,+   lantb,+   lantp,+   lantr,+   lapll,+   lapmr,+   lapmt,+   laqgb,+   laqge,+   laqhb,+   laqhe,+   laqhp,+   laqp2,+   laqps,+   laqr0,+   laqr1,+   laqr2,+   laqr3,+   laqr4,+   laqr5,+   laqsb,+   laqsp,+   laqsy,+   lar1v,+   lar2v,+   larcm,+   larf,+   larfb,+   larfg,+   larfgp,+   larft,+   larfx,+   largv,+   larnv,+   larrv,+   lartg,+   lartv,+   larz,+   larzb,+   larzt,+   lascl,+   laset,+   lasr,+   lassq,+   laswp,+   lasyf,+   latbs,+   latdf,+   latps,+   latrd,+   latrs,+   latrz,+   lauu2,+   lauum,+   pbcon,+   pbequ,+   pbrfs,+   pbstf,+   pbsv,+   pbsvx,+   pbtf2,+   pbtrf,+   pbtrs,+   pftrf,+   pftri,+   pftrs,+   pocon,+   poequ,+   poequb,+   porfs,+   posv,+   posvx,+   potf2,+   potrf,+   potri,+   potrs,+   ppcon,+   ppequ,+   pprfs,+   ppsv,+   ppsvx,+   pptrf,+   pptri,+   pptrs,+   pstf2,+   pstrf,+   ptcon,+   pteqr,+   ptrfs,+   ptsv,+   ptsvx,+   pttrf,+   pttrs,+   ptts2,+   rot,+   rscl,+   spcon,+   spmv,+   spr,+   sprfs,+   spsv,+   spsvx,+   sptrf,+   sptri,+   sptrs,+   stedc,+   stegr,+   stein,+   stemr,+   steqr,+   sum1,+   sycon,+   syconv,+   syequb,+   symv,+   syr,+   syrfs,+   sysv,+   sysvx,+   syswapr,+   sytf2,+   sytrf,+   sytri,+   sytri2,+   sytri2x,+   sytrs,+   sytrs2,+   tbcon,+   tbrfs,+   tbtrs,+   tfsm,+   tftri,+   tfttp,+   tfttr,+   tgevc,+   tgex2,+   tgexc,+   tgsen,+   tgsja,+   tgsna,+   tgsy2,+   tgsyl,+   tpcon,+   tprfs,+   tptri,+   tptrs,+   tpttf,+   tpttr,+   trcon,+   trevc,+   trexc,+   trrfs,+   trsen,+   trsna,+   trsyl,+   trti2,+   trtri,+   trtrs,+   trttf,+   trttp,+   tzrzf,+   unbdb,+   uncsd,+   ung2l,+   ung2r,+   ungbr,+   unghr,+   ungl2,+   unglq,+   ungql,+   ungqr,+   ungr2,+   ungrq,+   ungtr,+   unm2l,+   unm2r,+   unmbr,+   unmhr,+   unml2,+   unmlq,+   unmql,+   unmqr,+   unmr2,+   unmr3,+   unmrq,+   unmrz,+   unmtr,+   upgtr,+   upmtr,+   ) where++import qualified Numeric.LAPACK.ComfortArray.ComplexDouble as Z+import qualified Numeric.LAPACK.ComfortArray.ComplexFloat as C+import qualified Numeric.Netlib.Class as Class+import Numeric.Netlib.ComfortArray.Utility (ZeroInt)++import Data.Complex (Complex)++import Data.Array.Comfort.Storable.Mutable (IOArray)+import Data.Array.Comfort.Storable (Array)++import Foreign.Ptr (Ptr, FunPtr)+import Foreign.C.Types (CInt)++++newtype BBCSD a = BBCSD {getBBCSD :: Char -> Char -> Char -> Char -> Char -> Int -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Int)}++bbcsd :: Class.Real a => Char -> Char -> Char -> Char -> Char -> Int -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Int)+bbcsd = getBBCSD $ Class.switchReal (BBCSD C.bbcsd) (BBCSD Z.bbcsd)+++newtype BDSQR a = BDSQR {getBDSQR :: Char -> Int -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)}++bdsqr :: Class.Real a => Char -> Int -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)+bdsqr = getBDSQR $ Class.switchReal (BDSQR C.bdsqr) (BDSQR Z.bdsqr)+++newtype GBBRD a = GBBRD {getGBBRD :: Char -> Int -> Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, Array ZeroInt a, Array (ZeroInt,ZeroInt) (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Int)}++gbbrd :: Class.Real a => Char -> Int -> Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, Array ZeroInt a, Array (ZeroInt,ZeroInt) (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Int)+gbbrd = getGBBRD $ Class.switchReal (GBBRD C.gbbrd) (GBBRD Z.gbbrd)+++newtype GBCON a = GBCON {getGBCON :: Char -> Int -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt CInt -> a -> IO (a, Int)}++gbcon :: Class.Real a => Char -> Int -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt CInt -> a -> IO (a, Int)+gbcon = getGBCON $ Class.switchReal (GBCON C.gbcon) (GBCON Z.gbcon)+++newtype GBEQU a = GBEQU {getGBEQU :: Int -> Int -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, Array ZeroInt a, a, a, a, Int)}++gbequ :: Class.Real a => Int -> Int -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, Array ZeroInt a, a, a, a, Int)+gbequ = getGBEQU $ Class.switchReal (GBEQU C.gbequ) (GBEQU Z.gbequ)+++newtype GBEQUB a = GBEQUB {getGBEQUB :: Int -> Int -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, Array ZeroInt a, a, a, a, Int)}++gbequb :: Class.Real a => Int -> Int -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, Array ZeroInt a, a, a, a, Int)+gbequb = getGBEQUB $ Class.switchReal (GBEQUB C.gbequb) (GBEQUB Z.gbequb)+++newtype GBRFS a = GBRFS {getGBRFS :: Char -> Int -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt CInt -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, Array ZeroInt a, Int)}++gbrfs :: Class.Real a => Char -> Int -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt CInt -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, Array ZeroInt a, Int)+gbrfs = getGBRFS $ Class.switchReal (GBRFS C.gbrfs) (GBRFS Z.gbrfs)+++newtype GBSV a = GBSV {getGBSV :: Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt CInt, Int)}++gbsv :: Class.Real a => Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt CInt, Int)+gbsv = getGBSV $ Class.switchReal (GBSV C.gbsv) (GBSV Z.gbsv)+++newtype GBSVX a = GBSVX {getGBSVX :: Char -> Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray ZeroInt CInt -> Char -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Char, Array (ZeroInt,ZeroInt) (Complex a), a, Array ZeroInt a, Array ZeroInt a, Int)}++gbsvx :: Class.Real a => Char -> Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray ZeroInt CInt -> Char -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Char, Array (ZeroInt,ZeroInt) (Complex a), a, Array ZeroInt a, Array ZeroInt a, Int)+gbsvx = getGBSVX $ Class.switchReal (GBSVX C.gbsvx) (GBSVX Z.gbsvx)+++newtype GBTF2 a = GBTF2 {getGBTF2 :: Int -> Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt CInt, Int)}++gbtf2 :: Class.Real a => Int -> Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt CInt, Int)+gbtf2 = getGBTF2 $ Class.switchReal (GBTF2 C.gbtf2) (GBTF2 Z.gbtf2)+++newtype GBTRF a = GBTRF {getGBTRF :: Int -> Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt CInt, Int)}++gbtrf :: Class.Real a => Int -> Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt CInt, Int)+gbtrf = getGBTRF $ Class.switchReal (GBTRF C.gbtrf) (GBTRF Z.gbtrf)+++newtype GBTRS a = GBTRS {getGBTRS :: Char -> Int -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt CInt -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)}++gbtrs :: Class.Real a => Char -> Int -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt CInt -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)+gbtrs = getGBTRS $ Class.switchReal (GBTRS C.gbtrs) (GBTRS Z.gbtrs)+++newtype GEBAK a = GEBAK {getGEBAK :: Char -> Char -> Int -> Int -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)}++gebak :: Class.Real a => Char -> Char -> Int -> Int -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)+gebak = getGEBAK $ Class.switchReal (GEBAK C.gebak) (GEBAK Z.gebak)+++newtype GEBAL a = GEBAL {getGEBAL :: Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int, Int, Array ZeroInt a, Int)}++gebal :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int, Int, Array ZeroInt a, Int)+gebal = getGEBAL $ Class.switchReal (GEBAL C.gebal) (GEBAL Z.gebal)+++newtype GEBD2 a = GEBD2 {getGEBD2 :: Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, Array ZeroInt a, Array ZeroInt (Complex a), Array ZeroInt (Complex a), Int)}++gebd2 :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, Array ZeroInt a, Array ZeroInt (Complex a), Array ZeroInt (Complex a), Int)+gebd2 = getGEBD2 $ Class.switchReal (GEBD2 C.gebd2) (GEBD2 Z.gebd2)+++newtype GEBRD a = GEBRD {getGEBRD :: Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Array ZeroInt (Complex a), Array ZeroInt (Complex a), Int)}++gebrd :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Array ZeroInt (Complex a), Array ZeroInt (Complex a), Int)+gebrd = getGEBRD $ Class.switchReal (GEBRD C.gebrd) (GEBRD Z.gebrd)+++newtype GECON a = GECON {getGECON :: Char -> Array (ZeroInt,ZeroInt) (Complex a) -> a -> IO (a, Int)}++gecon :: Class.Real a => Char -> Array (ZeroInt,ZeroInt) (Complex a) -> a -> IO (a, Int)+gecon = getGECON $ Class.switchReal (GECON C.gecon) (GECON Z.gecon)+++newtype GEEQU a = GEEQU {getGEEQU :: Int -> Array (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, Array ZeroInt a, a, a, a, Int)}++geequ :: Class.Real a => Int -> Array (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, Array ZeroInt a, a, a, a, Int)+geequ = getGEEQU $ Class.switchReal (GEEQU C.geequ) (GEEQU Z.geequ)+++newtype GEEQUB a = GEEQUB {getGEEQUB :: Int -> Array (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, Array ZeroInt a, a, a, a, Int)}++geequb :: Class.Real a => Int -> Array (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, Array ZeroInt a, a, a, a, Int)+geequb = getGEEQUB $ Class.switchReal (GEEQUB C.geequb) (GEEQUB Z.geequb)+++newtype GEES a = GEES {getGEES :: Char -> Char -> FunPtr (Ptr (Complex a) -> IO Bool) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> IO (Int, Array ZeroInt (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Int)}++gees :: Class.Real a => Char -> Char -> FunPtr (Ptr (Complex a) -> IO Bool) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> IO (Int, Array ZeroInt (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Int)+gees = getGEES $ Class.switchReal (GEES C.gees) (GEES Z.gees)+++newtype GEESX a = GEESX {getGEESX :: Char -> Char -> FunPtr (Ptr (Complex a) -> IO Bool) -> Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> IO (Int, Array ZeroInt (Complex a), Array (ZeroInt,ZeroInt) (Complex a), a, a, Int)}++geesx :: Class.Real a => Char -> Char -> FunPtr (Ptr (Complex a) -> IO Bool) -> Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> IO (Int, Array ZeroInt (Complex a), Array (ZeroInt,ZeroInt) (Complex a), a, a, Int)+geesx = getGEESX $ Class.switchReal (GEESX C.geesx) (GEESX Z.geesx)+++newtype GEEV a = GEEV {getGEEV :: Char -> Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> Int -> IO (Array ZeroInt (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Int)}++geev :: Class.Real a => Char -> Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> Int -> IO (Array ZeroInt (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Int)+geev = getGEEV $ Class.switchReal (GEEV C.geev) (GEEV Z.geev)+++newtype GEEVX a = GEEVX {getGEEVX :: Char -> Char -> Char -> Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> Int -> IO (Array ZeroInt (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Int, Int, Array ZeroInt a, a, Array ZeroInt a, Array ZeroInt a, Int)}++geevx :: Class.Real a => Char -> Char -> Char -> Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> Int -> IO (Array ZeroInt (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Int, Int, Array ZeroInt a, a, Array ZeroInt a, Array ZeroInt a, Int)+geevx = getGEEVX $ Class.switchReal (GEEVX C.geevx) (GEEVX Z.geevx)+++newtype GEHD2 a = GEHD2 {getGEHD2 :: Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt (Complex a), Int)}++gehd2 :: Class.Real a => Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt (Complex a), Int)+gehd2 = getGEHD2 $ Class.switchReal (GEHD2 C.gehd2) (GEHD2 Z.gehd2)+++newtype GEHRD a = GEHRD {getGEHRD :: Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array ZeroInt (Complex a), Int)}++gehrd :: Class.Real a => Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array ZeroInt (Complex a), Int)+gehrd = getGEHRD $ Class.switchReal (GEHRD C.gehrd) (GEHRD Z.gehrd)+++newtype GELQ2 a = GELQ2 {getGELQ2 :: Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt (Complex a), Int)}++gelq2 :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt (Complex a), Int)+gelq2 = getGELQ2 $ Class.switchReal (GELQ2 C.gelq2) (GELQ2 Z.gelq2)+++newtype GELQF a = GELQF {getGELQF :: Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array ZeroInt (Complex a), Int)}++gelqf :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array ZeroInt (Complex a), Int)+gelqf = getGELQF $ Class.switchReal (GELQF C.gelqf) (GELQF Z.gelqf)+++newtype GELS a = GELS {getGELS :: Char -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Int)}++gels :: Class.Real a => Char -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Int)+gels = getGELS $ Class.switchReal (GELS C.gels) (GELS Z.gels)+++newtype GELSD a = GELSD {getGELSD :: Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> a -> Int -> Int -> Int -> IO (Array ZeroInt a, Int, Int)}++gelsd :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> a -> Int -> Int -> Int -> IO (Array ZeroInt a, Int, Int)+gelsd = getGELSD $ Class.switchReal (GELSD C.gelsd) (GELSD Z.gelsd)+++newtype GELSS a = GELSS {getGELSS :: Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> a -> Int -> IO (Array ZeroInt a, Int, Int)}++gelss :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> a -> Int -> IO (Array ZeroInt a, Int, Int)+gelss = getGELSS $ Class.switchReal (GELSS C.gelss) (GELSS Z.gelss)+++newtype GELSY a = GELSY {getGELSY :: Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray ZeroInt CInt -> a -> Int -> IO (Int, Int)}++gelsy :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray ZeroInt CInt -> a -> Int -> IO (Int, Int)+gelsy = getGELSY $ Class.switchReal (GELSY C.gelsy) (GELSY Z.gelsy)+++newtype GEQL2 a = GEQL2 {getGEQL2 :: Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt (Complex a), Int)}++geql2 :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt (Complex a), Int)+geql2 = getGEQL2 $ Class.switchReal (GEQL2 C.geql2) (GEQL2 Z.geql2)+++newtype GEQLF a = GEQLF {getGEQLF :: Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array ZeroInt (Complex a), Int)}++geqlf :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array ZeroInt (Complex a), Int)+geqlf = getGEQLF $ Class.switchReal (GEQLF C.geqlf) (GEQLF Z.geqlf)+++newtype GEQP3 a = GEQP3 {getGEQP3 :: Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray ZeroInt CInt -> Int -> IO (Array ZeroInt (Complex a), Int)}++geqp3 :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray ZeroInt CInt -> Int -> IO (Array ZeroInt (Complex a), Int)+geqp3 = getGEQP3 $ Class.switchReal (GEQP3 C.geqp3) (GEQP3 Z.geqp3)+++newtype GEQR2 a = GEQR2 {getGEQR2 :: Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt (Complex a), Int)}++geqr2 :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt (Complex a), Int)+geqr2 = getGEQR2 $ Class.switchReal (GEQR2 C.geqr2) (GEQR2 Z.geqr2)+++newtype GEQR2P a = GEQR2P {getGEQR2P :: Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt (Complex a), Int)}++geqr2p :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt (Complex a), Int)+geqr2p = getGEQR2P $ Class.switchReal (GEQR2P C.geqr2p) (GEQR2P Z.geqr2p)+++newtype GEQRF a = GEQRF {getGEQRF :: Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array ZeroInt (Complex a), Int)}++geqrf :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array ZeroInt (Complex a), Int)+geqrf = getGEQRF $ Class.switchReal (GEQRF C.geqrf) (GEQRF Z.geqrf)+++newtype GEQRFP a = GEQRFP {getGEQRFP :: Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array ZeroInt (Complex a), Int)}++geqrfp :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array ZeroInt (Complex a), Int)+geqrfp = getGEQRFP $ Class.switchReal (GEQRFP C.geqrfp) (GEQRFP Z.geqrfp)+++newtype GERFS a = GERFS {getGERFS :: Char -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt CInt -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, Array ZeroInt a, Int)}++gerfs :: Class.Real a => Char -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt CInt -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, Array ZeroInt a, Int)+gerfs = getGERFS $ Class.switchReal (GERFS C.gerfs) (GERFS Z.gerfs)+++newtype GERQ2 a = GERQ2 {getGERQ2 :: Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt (Complex a), Int)}++gerq2 :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt (Complex a), Int)+gerq2 = getGERQ2 $ Class.switchReal (GERQ2 C.gerq2) (GERQ2 Z.gerq2)+++newtype GERQF a = GERQF {getGERQF :: Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array ZeroInt (Complex a), Int)}++gerqf :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array ZeroInt (Complex a), Int)+gerqf = getGERQF $ Class.switchReal (GERQF C.gerqf) (GERQF Z.gerqf)+++newtype GESC2 a = GESC2 {getGESC2 :: Array (ZeroInt,ZeroInt) (Complex a) -> IOArray ZeroInt (Complex a) -> Array ZeroInt CInt -> Array ZeroInt CInt -> IO (a)}++gesc2 :: Class.Real a => Array (ZeroInt,ZeroInt) (Complex a) -> IOArray ZeroInt (Complex a) -> Array ZeroInt CInt -> Array ZeroInt CInt -> IO (a)+gesc2 = getGESC2 $ Class.switchReal (GESC2 C.gesc2) (GESC2 Z.gesc2)+++newtype GESDD a = GESDD {getGESDD :: Char -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> Int -> Int -> Int -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Int)}++gesdd :: Class.Real a => Char -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> Int -> Int -> Int -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Int)+gesdd = getGESDD $ Class.switchReal (GESDD C.gesdd) (GESDD Z.gesdd)+++newtype GESV a = GESV {getGESV :: IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt CInt, Int)}++gesv :: Class.Real a => IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt CInt, Int)+gesv = getGESV $ Class.switchReal (GESV C.gesv) (GESV Z.gesv)+++newtype GESVD a = GESVD {getGESVD :: Char -> Char -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> Int -> Int -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Int)}++gesvd :: Class.Real a => Char -> Char -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> Int -> Int -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Int)+gesvd = getGESVD $ Class.switchReal (GESVD C.gesvd) (GESVD Z.gesvd)+++newtype GESVX a = GESVX {getGESVX :: Char -> Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray ZeroInt CInt -> Char -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Char, Array (ZeroInt,ZeroInt) (Complex a), a, Array ZeroInt a, Array ZeroInt a, Int)}++gesvx :: Class.Real a => Char -> Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray ZeroInt CInt -> Char -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Char, Array (ZeroInt,ZeroInt) (Complex a), a, Array ZeroInt a, Array ZeroInt a, Int)+gesvx = getGESVX $ Class.switchReal (GESVX C.gesvx) (GESVX Z.gesvx)+++newtype GETC2 a = GETC2 {getGETC2 :: IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt CInt, Array ZeroInt CInt, Int)}++getc2 :: Class.Real a => IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt CInt, Array ZeroInt CInt, Int)+getc2 = getGETC2 $ Class.switchReal (GETC2 C.getc2) (GETC2 Z.getc2)+++newtype GETF2 a = GETF2 {getGETF2 :: Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt CInt, Int)}++getf2 :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt CInt, Int)+getf2 = getGETF2 $ Class.switchReal (GETF2 C.getf2) (GETF2 Z.getf2)+++newtype GETRF a = GETRF {getGETRF :: Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt CInt, Int)}++getrf :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt CInt, Int)+getrf = getGETRF $ Class.switchReal (GETRF C.getrf) (GETRF Z.getrf)+++newtype GETRI a = GETRI {getGETRI :: IOArray (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt CInt -> Int -> IO (Int)}++getri :: Class.Real a => IOArray (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt CInt -> Int -> IO (Int)+getri = getGETRI $ Class.switchReal (GETRI C.getri) (GETRI Z.getri)+++newtype GETRS a = GETRS {getGETRS :: Char -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt CInt -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)}++getrs :: Class.Real a => Char -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt CInt -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)+getrs = getGETRS $ Class.switchReal (GETRS C.getrs) (GETRS Z.getrs)+++newtype GGBAK a = GGBAK {getGGBAK :: Char -> Char -> Int -> Int -> Array ZeroInt a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)}++ggbak :: Class.Real a => Char -> Char -> Int -> Int -> Array ZeroInt a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)+ggbak = getGGBAK $ Class.switchReal (GGBAK C.ggbak) (GGBAK Z.ggbak)+++newtype GGBAL a = GGBAL {getGGBAL :: Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Int, Int, Array ZeroInt a, Array ZeroInt a, Int)}++ggbal :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Int, Int, Array ZeroInt a, Array ZeroInt a, Int)+ggbal = getGGBAL $ Class.switchReal (GGBAL C.ggbal) (GGBAL Z.ggbal)+++newtype GGES a = GGES {getGGES :: Char -> Char -> Char -> FunPtr (Ptr (Complex a) -> Ptr (Complex a) -> IO Bool) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> Int -> IO (Int, Array ZeroInt (Complex a), Array ZeroInt (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Int)}++gges :: Class.Real a => Char -> Char -> Char -> FunPtr (Ptr (Complex a) -> Ptr (Complex a) -> IO Bool) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> Int -> IO (Int, Array ZeroInt (Complex a), Array ZeroInt (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Int)+gges = getGGES $ Class.switchReal (GGES C.gges) (GGES Z.gges)+++newtype GGESX a = GGESX {getGGESX :: Char -> Char -> Char -> FunPtr (Ptr (Complex a) -> Ptr (Complex a) -> IO Bool) -> Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> Int -> Int -> IO (Int, Array ZeroInt (Complex a), Array ZeroInt (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Array ZeroInt a, Array ZeroInt a, Int)}++ggesx :: Class.Real a => Char -> Char -> Char -> FunPtr (Ptr (Complex a) -> Ptr (Complex a) -> IO Bool) -> Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> Int -> Int -> IO (Int, Array ZeroInt (Complex a), Array ZeroInt (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Array ZeroInt a, Array ZeroInt a, Int)+ggesx = getGGESX $ Class.switchReal (GGESX C.ggesx) (GGESX Z.ggesx)+++newtype GGEV a = GGEV {getGGEV :: Char -> Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> Int -> IO (Array ZeroInt (Complex a), Array ZeroInt (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Int)}++ggev :: Class.Real a => Char -> Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> Int -> IO (Array ZeroInt (Complex a), Array ZeroInt (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Int)+ggev = getGGEV $ Class.switchReal (GGEV C.ggev) (GGEV Z.ggev)+++newtype GGEVX a = GGEVX {getGGEVX :: Char -> Char -> Char -> Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> Int -> Int -> IO (Array ZeroInt (Complex a), Array ZeroInt (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Int, Int, Array ZeroInt a, Array ZeroInt a, a, a, Array ZeroInt a, Array ZeroInt a, Int)}++ggevx :: Class.Real a => Char -> Char -> Char -> Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> Int -> Int -> IO (Array ZeroInt (Complex a), Array ZeroInt (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Int, Int, Array ZeroInt a, Array ZeroInt a, a, a, Array ZeroInt a, Array ZeroInt a, Int)+ggevx = getGGEVX $ Class.switchReal (GGEVX C.ggevx) (GGEVX Z.ggevx)+++newtype GGGLM a = GGGLM {getGGGLM :: IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray ZeroInt (Complex a) -> Int -> IO (Array ZeroInt (Complex a), Array ZeroInt (Complex a), Int)}++ggglm :: Class.Real a => IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray ZeroInt (Complex a) -> Int -> IO (Array ZeroInt (Complex a), Array ZeroInt (Complex a), Int)+ggglm = getGGGLM $ Class.switchReal (GGGLM C.ggglm) (GGGLM Z.ggglm)+++newtype GGHRD a = GGHRD {getGGHRD :: Char -> Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)}++gghrd :: Class.Real a => Char -> Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)+gghrd = getGGHRD $ Class.switchReal (GGHRD C.gghrd) (GGHRD Z.gghrd)+++newtype GGLSE a = GGLSE {getGGLSE :: IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray ZeroInt (Complex a) -> IOArray ZeroInt (Complex a) -> Int -> IO (Array ZeroInt (Complex a), Int)}++gglse :: Class.Real a => IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray ZeroInt (Complex a) -> IOArray ZeroInt (Complex a) -> Int -> IO (Array ZeroInt (Complex a), Int)+gglse = getGGLSE $ Class.switchReal (GGLSE C.gglse) (GGLSE Z.gglse)+++newtype GGQRF a = GGQRF {getGGQRF :: Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array ZeroInt (Complex a), Array ZeroInt (Complex a), Int)}++ggqrf :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array ZeroInt (Complex a), Array ZeroInt (Complex a), Int)+ggqrf = getGGQRF $ Class.switchReal (GGQRF C.ggqrf) (GGQRF Z.ggqrf)+++newtype GGRQF a = GGRQF {getGGRQF :: Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array ZeroInt (Complex a), Array ZeroInt (Complex a), Int)}++ggrqf :: Class.Real a => Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array ZeroInt (Complex a), Array ZeroInt (Complex a), Int)+ggrqf = getGGRQF $ Class.switchReal (GGRQF C.ggrqf) (GGRQF Z.ggrqf)+++newtype GTCON a = GTCON {getGTCON :: Char -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> Array ZeroInt CInt -> a -> IO (a, Int)}++gtcon :: Class.Real a => Char -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> Array ZeroInt CInt -> a -> IO (a, Int)+gtcon = getGTCON $ Class.switchReal (GTCON C.gtcon) (GTCON Z.gtcon)+++newtype GTRFS a = GTRFS {getGTRFS :: Char -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> Array ZeroInt CInt -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, Array ZeroInt a, Int)}++gtrfs :: Class.Real a => Char -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> Array ZeroInt CInt -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, Array ZeroInt a, Int)+gtrfs = getGTRFS $ Class.switchReal (GTRFS C.gtrfs) (GTRFS Z.gtrfs)+++newtype GTSV a = GTSV {getGTSV :: IOArray ZeroInt (Complex a) -> IOArray ZeroInt (Complex a) -> IOArray ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)}++gtsv :: Class.Real a => IOArray ZeroInt (Complex a) -> IOArray ZeroInt (Complex a) -> IOArray ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)+gtsv = getGTSV $ Class.switchReal (GTSV C.gtsv) (GTSV Z.gtsv)+++newtype GTSVX a = GTSVX {getGTSVX :: Char -> Char -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> IOArray ZeroInt (Complex a) -> IOArray ZeroInt (Complex a) -> IOArray ZeroInt (Complex a) -> IOArray ZeroInt (Complex a) -> IOArray ZeroInt CInt -> Array (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array (ZeroInt,ZeroInt) (Complex a), a, Array ZeroInt a, Array ZeroInt a, Int)}++gtsvx :: Class.Real a => Char -> Char -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> IOArray ZeroInt (Complex a) -> IOArray ZeroInt (Complex a) -> IOArray ZeroInt (Complex a) -> IOArray ZeroInt (Complex a) -> IOArray ZeroInt CInt -> Array (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array (ZeroInt,ZeroInt) (Complex a), a, Array ZeroInt a, Array ZeroInt a, Int)+gtsvx = getGTSVX $ Class.switchReal (GTSVX C.gtsvx) (GTSVX Z.gtsvx)+++newtype GTTRF a = GTTRF {getGTTRF :: IOArray ZeroInt (Complex a) -> IOArray ZeroInt (Complex a) -> IOArray ZeroInt (Complex a) -> IO (Array ZeroInt (Complex a), Array ZeroInt CInt, Int)}++gttrf :: Class.Real a => IOArray ZeroInt (Complex a) -> IOArray ZeroInt (Complex a) -> IOArray ZeroInt (Complex a) -> IO (Array ZeroInt (Complex a), Array ZeroInt CInt, Int)+gttrf = getGTTRF $ Class.switchReal (GTTRF C.gttrf) (GTTRF Z.gttrf)+++newtype GTTRS a = GTTRS {getGTTRS :: Char -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> Array ZeroInt CInt -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)}++gttrs :: Class.Real a => Char -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> Array ZeroInt CInt -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)+gttrs = getGTTRS $ Class.switchReal (GTTRS C.gttrs) (GTTRS Z.gttrs)+++newtype GTTS2 a = GTTS2 {getGTTS2 :: Int -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> Array ZeroInt CInt -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO ()}++gtts2 :: Class.Real a => Int -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> Array ZeroInt CInt -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO ()+gtts2 = getGTTS2 $ Class.switchReal (GTTS2 C.gtts2) (GTTS2 Z.gtts2)+++newtype HBEV a = HBEV {getHBEV :: Char -> Char -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) (Complex a), Int)}++hbev :: Class.Real a => Char -> Char -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) (Complex a), Int)+hbev = getHBEV $ Class.switchReal (HBEV C.hbev) (HBEV Z.hbev)+++newtype HBEVD a = HBEVD {getHBEVD :: Char -> Char -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> Int -> Int -> Int -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) (Complex a), Int)}++hbevd :: Class.Real a => Char -> Char -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> Int -> Int -> Int -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) (Complex a), Int)+hbevd = getHBEVD $ Class.switchReal (HBEVD C.hbevd) (HBEVD Z.hbevd)+++newtype HBEVX a = HBEVX {getHBEVX :: Char -> Char -> Char -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> a -> a -> Int -> Int -> a -> Int -> Int -> IO (Array (ZeroInt,ZeroInt) (Complex a), Int, Array ZeroInt a, Array (ZeroInt,ZeroInt) (Complex a), Array ZeroInt CInt, Int)}++hbevx :: Class.Real a => Char -> Char -> Char -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> a -> a -> Int -> Int -> a -> Int -> Int -> IO (Array (ZeroInt,ZeroInt) (Complex a), Int, Array ZeroInt a, Array (ZeroInt,ZeroInt) (Complex a), Array ZeroInt CInt, Int)+hbevx = getHBEVX $ Class.switchReal (HBEVX C.hbevx) (HBEVX Z.hbevx)+++newtype HBGST a = HBGST {getHBGST :: Char -> Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array (ZeroInt,ZeroInt) (Complex a), Int)}++hbgst :: Class.Real a => Char -> Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array (ZeroInt,ZeroInt) (Complex a), Int)+hbgst = getHBGST $ Class.switchReal (HBGST C.hbgst) (HBGST Z.hbgst)+++newtype HBGV a = HBGV {getHBGV :: Char -> Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) (Complex a), Int)}++hbgv :: Class.Real a => Char -> Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) (Complex a), Int)+hbgv = getHBGV $ Class.switchReal (HBGV C.hbgv) (HBGV Z.hbgv)+++newtype HBGVD a = HBGVD {getHBGVD :: Char -> Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> Int -> Int -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) (Complex a), Int)}++hbgvd :: Class.Real a => Char -> Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> Int -> Int -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) (Complex a), Int)+hbgvd = getHBGVD $ Class.switchReal (HBGVD C.hbgvd) (HBGVD Z.hbgvd)+++newtype HBGVX a = HBGVX {getHBGVX :: Char -> Char -> Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> a -> a -> Int -> Int -> a -> Int -> IO (Array (ZeroInt,ZeroInt) (Complex a), Int, Array ZeroInt a, Array (ZeroInt,ZeroInt) (Complex a), Array ZeroInt CInt, Int)}++hbgvx :: Class.Real a => Char -> Char -> Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> a -> a -> Int -> Int -> a -> Int -> IO (Array (ZeroInt,ZeroInt) (Complex a), Int, Array ZeroInt a, Array (ZeroInt,ZeroInt) (Complex a), Array ZeroInt CInt, Int)+hbgvx = getHBGVX $ Class.switchReal (HBGVX C.hbgvx) (HBGVX Z.hbgvx)+++newtype HBTRD a = HBTRD {getHBTRD :: Char -> Char -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, Array ZeroInt a, Int)}++hbtrd :: Class.Real a => Char -> Char -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, Array ZeroInt a, Int)+hbtrd = getHBTRD $ Class.switchReal (HBTRD C.hbtrd) (HBTRD Z.hbtrd)+++newtype HECON a = HECON {getHECON :: Char -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt CInt -> a -> IO (a, Int)}++hecon :: Class.Real a => Char -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt CInt -> a -> IO (a, Int)+hecon = getHECON $ Class.switchReal (HECON C.hecon) (HECON Z.hecon)+++newtype HEEQUB a = HEEQUB {getHEEQUB :: Char -> Array (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, a, a, Int)}++heequb :: Class.Real a => Char -> Array (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, a, a, Int)+heequb = getHEEQUB $ Class.switchReal (HEEQUB C.heequb) (HEEQUB Z.heequb)+++newtype HEEV a = HEEV {getHEEV :: Char -> Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array ZeroInt a, Int)}++heev :: Class.Real a => Char -> Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array ZeroInt a, Int)+heev = getHEEV $ Class.switchReal (HEEV C.heev) (HEEV Z.heev)+++newtype HEEVD a = HEEVD {getHEEVD :: Char -> Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> Int -> Int -> IO (Array ZeroInt a, Int)}++heevd :: Class.Real a => Char -> Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> Int -> Int -> IO (Array ZeroInt a, Int)+heevd = getHEEVD $ Class.switchReal (HEEVD C.heevd) (HEEVD Z.heevd)+++newtype HEEVR a = HEEVR {getHEEVR :: Char -> Char -> Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> a -> a -> Int -> Int -> a -> Int -> Int -> Int -> Int -> Int -> IO (Int, Array ZeroInt a, Array (ZeroInt,ZeroInt) (Complex a), Array ZeroInt CInt, Int)}++heevr :: Class.Real a => Char -> Char -> Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> a -> a -> Int -> Int -> a -> Int -> Int -> Int -> Int -> Int -> IO (Int, Array ZeroInt a, Array (ZeroInt,ZeroInt) (Complex a), Array ZeroInt CInt, Int)+heevr = getHEEVR $ Class.switchReal (HEEVR C.heevr) (HEEVR Z.heevr)+++newtype HEEVX a = HEEVX {getHEEVX :: Char -> Char -> Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> a -> a -> Int -> Int -> a -> Int -> Int -> Int -> IO (Int, Array ZeroInt a, Array (ZeroInt,ZeroInt) (Complex a), Array ZeroInt CInt, Int)}++heevx :: Class.Real a => Char -> Char -> Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> a -> a -> Int -> Int -> a -> Int -> Int -> Int -> IO (Int, Array ZeroInt a, Array (ZeroInt,ZeroInt) (Complex a), Array ZeroInt CInt, Int)+heevx = getHEEVX $ Class.switchReal (HEEVX C.heevx) (HEEVX Z.heevx)+++newtype HEGS2 a = HEGS2 {getHEGS2 :: Int -> Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)}++hegs2 :: Class.Real a => Int -> Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)+hegs2 = getHEGS2 $ Class.switchReal (HEGS2 C.hegs2) (HEGS2 Z.hegs2)+++newtype HEGST a = HEGST {getHEGST :: Int -> Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)}++hegst :: Class.Real a => Int -> Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)+hegst = getHEGST $ Class.switchReal (HEGST C.hegst) (HEGST Z.hegst)+++newtype HEGV a = HEGV {getHEGV :: Int -> Char -> Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array ZeroInt a, Int)}++hegv :: Class.Real a => Int -> Char -> Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array ZeroInt a, Int)+hegv = getHEGV $ Class.switchReal (HEGV C.hegv) (HEGV Z.hegv)+++newtype HEGVD a = HEGVD {getHEGVD :: Int -> Char -> Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> Int -> IO (Array ZeroInt a, Int)}++hegvd :: Class.Real a => Int -> Char -> Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> Int -> IO (Array ZeroInt a, Int)+hegvd = getHEGVD $ Class.switchReal (HEGVD C.hegvd) (HEGVD Z.hegvd)+++newtype HEGVX a = HEGVX {getHEGVX :: Int -> Char -> Char -> Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> a -> a -> Int -> Int -> a -> Int -> Int -> Int -> IO (Int, Array ZeroInt a, Array (ZeroInt,ZeroInt) (Complex a), Array ZeroInt CInt, Int)}++hegvx :: Class.Real a => Int -> Char -> Char -> Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> a -> a -> Int -> Int -> a -> Int -> Int -> Int -> IO (Int, Array ZeroInt a, Array (ZeroInt,ZeroInt) (Complex a), Array ZeroInt CInt, Int)+hegvx = getHEGVX $ Class.switchReal (HEGVX C.hegvx) (HEGVX Z.hegvx)+++newtype HERFS a = HERFS {getHERFS :: Char -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt CInt -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, Array ZeroInt a, Int)}++herfs :: Class.Real a => Char -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt CInt -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, Array ZeroInt a, Int)+herfs = getHERFS $ Class.switchReal (HERFS C.herfs) (HERFS Z.herfs)+++newtype HESV a = HESV {getHESV :: Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array ZeroInt CInt, Int)}++hesv :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array ZeroInt CInt, Int)+hesv = getHESV $ Class.switchReal (HESV C.hesv) (HESV Z.hesv)+++newtype HESVX a = HESVX {getHESVX :: Char -> Char -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray ZeroInt CInt -> Array (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> IO (Array (ZeroInt,ZeroInt) (Complex a), a, Array ZeroInt a, Array ZeroInt a, Int)}++hesvx :: Class.Real a => Char -> Char -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray ZeroInt CInt -> Array (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> IO (Array (ZeroInt,ZeroInt) (Complex a), a, Array ZeroInt a, Array ZeroInt a, Int)+hesvx = getHESVX $ Class.switchReal (HESVX C.hesvx) (HESVX Z.hesvx)+++newtype HESWAPR a = HESWAPR {getHESWAPR :: Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> IO ()}++heswapr :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> IO ()+heswapr = getHESWAPR $ Class.switchReal (HESWAPR C.heswapr) (HESWAPR Z.heswapr)+++newtype HETD2 a = HETD2 {getHETD2 :: Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, Array ZeroInt a, Array ZeroInt (Complex a), Int)}++hetd2 :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, Array ZeroInt a, Array ZeroInt (Complex a), Int)+hetd2 = getHETD2 $ Class.switchReal (HETD2 C.hetd2) (HETD2 Z.hetd2)+++newtype HETF2 a = HETF2 {getHETF2 :: Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt CInt, Int)}++hetf2 :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt CInt, Int)+hetf2 = getHETF2 $ Class.switchReal (HETF2 C.hetf2) (HETF2 Z.hetf2)+++newtype HETRD a = HETRD {getHETRD :: Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Array ZeroInt (Complex a), Int)}++hetrd :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Array ZeroInt (Complex a), Int)+hetrd = getHETRD $ Class.switchReal (HETRD C.hetrd) (HETRD Z.hetrd)+++newtype HETRF a = HETRF {getHETRF :: Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array ZeroInt CInt, Int)}++hetrf :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array ZeroInt CInt, Int)+hetrf = getHETRF $ Class.switchReal (HETRF C.hetrf) (HETRF Z.hetrf)+++newtype HETRI a = HETRI {getHETRI :: Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt CInt -> IO (Int)}++hetri :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt CInt -> IO (Int)+hetri = getHETRI $ Class.switchReal (HETRI C.hetri) (HETRI Z.hetri)+++newtype HETRI2 a = HETRI2 {getHETRI2 :: Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt CInt -> Int -> Int -> IO (Int)}++hetri2 :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt CInt -> Int -> Int -> IO (Int)+hetri2 = getHETRI2 $ Class.switchReal (HETRI2 C.hetri2) (HETRI2 Z.hetri2)+++newtype HETRI2X a = HETRI2X {getHETRI2X :: Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt CInt -> Int -> IO (Int)}++hetri2x :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt CInt -> Int -> IO (Int)+hetri2x = getHETRI2X $ Class.switchReal (HETRI2X C.hetri2x) (HETRI2X Z.hetri2x)+++newtype HETRS a = HETRS {getHETRS :: Char -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt CInt -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)}++hetrs :: Class.Real a => Char -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt CInt -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)+hetrs = getHETRS $ Class.switchReal (HETRS C.hetrs) (HETRS Z.hetrs)+++newtype HETRS2 a = HETRS2 {getHETRS2 :: Char -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt CInt -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)}++hetrs2 :: Class.Real a => Char -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt CInt -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)+hetrs2 = getHETRS2 $ Class.switchReal (HETRS2 C.hetrs2) (HETRS2 Z.hetrs2)+++newtype HFRK a = HFRK {getHFRK :: Char -> Char -> Char -> Int -> Int -> a -> Array (ZeroInt,ZeroInt) (Complex a) -> a -> IOArray ZeroInt (Complex a) -> IO ()}++hfrk :: Class.Real a => Char -> Char -> Char -> Int -> Int -> a -> Array (ZeroInt,ZeroInt) (Complex a) -> a -> IOArray ZeroInt (Complex a) -> IO ()+hfrk = getHFRK $ Class.switchReal (HFRK C.hfrk) (HFRK Z.hfrk)+++newtype HGEQZ a = HGEQZ {getHGEQZ :: Char -> Char -> Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array ZeroInt (Complex a), Array ZeroInt (Complex a), Int)}++hgeqz :: Class.Real a => Char -> Char -> Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array ZeroInt (Complex a), Array ZeroInt (Complex a), Int)+hgeqz = getHGEQZ $ Class.switchReal (HGEQZ C.hgeqz) (HGEQZ Z.hgeqz)+++newtype HPCON a = HPCON {getHPCON :: Char -> Array ZeroInt (Complex a) -> Array ZeroInt CInt -> a -> IO (a, Int)}++hpcon :: Class.Real a => Char -> Array ZeroInt (Complex a) -> Array ZeroInt CInt -> a -> IO (a, Int)+hpcon = getHPCON $ Class.switchReal (HPCON C.hpcon) (HPCON Z.hpcon)+++newtype HPEV a = HPEV {getHPEV :: Char -> Char -> Int -> IOArray ZeroInt (Complex a) -> Int -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) (Complex a), Int)}++hpev :: Class.Real a => Char -> Char -> Int -> IOArray ZeroInt (Complex a) -> Int -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) (Complex a), Int)+hpev = getHPEV $ Class.switchReal (HPEV C.hpev) (HPEV Z.hpev)+++newtype HPEVD a = HPEVD {getHPEVD :: Char -> Char -> Int -> IOArray ZeroInt (Complex a) -> Int -> Int -> Int -> Int -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) (Complex a), Int)}++hpevd :: Class.Real a => Char -> Char -> Int -> IOArray ZeroInt (Complex a) -> Int -> Int -> Int -> Int -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) (Complex a), Int)+hpevd = getHPEVD $ Class.switchReal (HPEVD C.hpevd) (HPEVD Z.hpevd)+++newtype HPEVX a = HPEVX {getHPEVX :: Char -> Char -> Char -> Int -> IOArray ZeroInt (Complex a) -> a -> a -> Int -> Int -> a -> Int -> Int -> IO (Int, Array ZeroInt a, Array (ZeroInt,ZeroInt) (Complex a), Array ZeroInt CInt, Int)}++hpevx :: Class.Real a => Char -> Char -> Char -> Int -> IOArray ZeroInt (Complex a) -> a -> a -> Int -> Int -> a -> Int -> Int -> IO (Int, Array ZeroInt a, Array (ZeroInt,ZeroInt) (Complex a), Array ZeroInt CInt, Int)+hpevx = getHPEVX $ Class.switchReal (HPEVX C.hpevx) (HPEVX Z.hpevx)+++newtype HPGST a = HPGST {getHPGST :: Int -> Char -> Int -> IOArray ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> IO (Int)}++hpgst :: Class.Real a => Int -> Char -> Int -> IOArray ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> IO (Int)+hpgst = getHPGST $ Class.switchReal (HPGST C.hpgst) (HPGST Z.hpgst)+++newtype HPGV a = HPGV {getHPGV :: Int -> Char -> Char -> Int -> IOArray ZeroInt (Complex a) -> IOArray ZeroInt (Complex a) -> Int -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) (Complex a), Int)}++hpgv :: Class.Real a => Int -> Char -> Char -> Int -> IOArray ZeroInt (Complex a) -> IOArray ZeroInt (Complex a) -> Int -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) (Complex a), Int)+hpgv = getHPGV $ Class.switchReal (HPGV C.hpgv) (HPGV Z.hpgv)+++newtype HPGVD a = HPGVD {getHPGVD :: Int -> Char -> Char -> Int -> IOArray ZeroInt (Complex a) -> IOArray ZeroInt (Complex a) -> Int -> Int -> Int -> Int -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) (Complex a), Int)}++hpgvd :: Class.Real a => Int -> Char -> Char -> Int -> IOArray ZeroInt (Complex a) -> IOArray ZeroInt (Complex a) -> Int -> Int -> Int -> Int -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) (Complex a), Int)+hpgvd = getHPGVD $ Class.switchReal (HPGVD C.hpgvd) (HPGVD Z.hpgvd)+++newtype HPGVX a = HPGVX {getHPGVX :: Int -> Char -> Char -> Char -> Int -> IOArray ZeroInt (Complex a) -> IOArray ZeroInt (Complex a) -> a -> a -> Int -> Int -> a -> Int -> IO (Int, Array ZeroInt a, Array (ZeroInt,ZeroInt) (Complex a), Array ZeroInt CInt, Int)}++hpgvx :: Class.Real a => Int -> Char -> Char -> Char -> Int -> IOArray ZeroInt (Complex a) -> IOArray ZeroInt (Complex a) -> a -> a -> Int -> Int -> a -> Int -> IO (Int, Array ZeroInt a, Array (ZeroInt,ZeroInt) (Complex a), Array ZeroInt CInt, Int)+hpgvx = getHPGVX $ Class.switchReal (HPGVX C.hpgvx) (HPGVX Z.hpgvx)+++newtype HPRFS a = HPRFS {getHPRFS :: Char -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> Array ZeroInt CInt -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, Array ZeroInt a, Int)}++hprfs :: Class.Real a => Char -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> Array ZeroInt CInt -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, Array ZeroInt a, Int)+hprfs = getHPRFS $ Class.switchReal (HPRFS C.hprfs) (HPRFS Z.hprfs)+++newtype HPSV a = HPSV {getHPSV :: Char -> Int -> IOArray ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt CInt, Int)}++hpsv :: Class.Real a => Char -> Int -> IOArray ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt CInt, Int)+hpsv = getHPSV $ Class.switchReal (HPSV C.hpsv) (HPSV Z.hpsv)+++newtype HPSVX a = HPSVX {getHPSVX :: Char -> Char -> Array ZeroInt (Complex a) -> IOArray ZeroInt (Complex a) -> IOArray ZeroInt CInt -> Array (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array (ZeroInt,ZeroInt) (Complex a), a, Array ZeroInt a, Array ZeroInt a, Int)}++hpsvx :: Class.Real a => Char -> Char -> Array ZeroInt (Complex a) -> IOArray ZeroInt (Complex a) -> IOArray ZeroInt CInt -> Array (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array (ZeroInt,ZeroInt) (Complex a), a, Array ZeroInt a, Array ZeroInt a, Int)+hpsvx = getHPSVX $ Class.switchReal (HPSVX C.hpsvx) (HPSVX Z.hpsvx)+++newtype HPTRD a = HPTRD {getHPTRD :: Char -> Int -> IOArray ZeroInt (Complex a) -> IO (Array ZeroInt a, Array ZeroInt a, Array ZeroInt (Complex a), Int)}++hptrd :: Class.Real a => Char -> Int -> IOArray ZeroInt (Complex a) -> IO (Array ZeroInt a, Array ZeroInt a, Array ZeroInt (Complex a), Int)+hptrd = getHPTRD $ Class.switchReal (HPTRD C.hptrd) (HPTRD Z.hptrd)+++newtype HPTRF a = HPTRF {getHPTRF :: Char -> Int -> IOArray ZeroInt (Complex a) -> IO (Array ZeroInt CInt, Int)}++hptrf :: Class.Real a => Char -> Int -> IOArray ZeroInt (Complex a) -> IO (Array ZeroInt CInt, Int)+hptrf = getHPTRF $ Class.switchReal (HPTRF C.hptrf) (HPTRF Z.hptrf)+++newtype HPTRI a = HPTRI {getHPTRI :: Char -> IOArray ZeroInt (Complex a) -> Array ZeroInt CInt -> IO (Int)}++hptri :: Class.Real a => Char -> IOArray ZeroInt (Complex a) -> Array ZeroInt CInt -> IO (Int)+hptri = getHPTRI $ Class.switchReal (HPTRI C.hptri) (HPTRI Z.hptri)+++newtype HPTRS a = HPTRS {getHPTRS :: Char -> Array ZeroInt (Complex a) -> Array ZeroInt CInt -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)}++hptrs :: Class.Real a => Char -> Array ZeroInt (Complex a) -> Array ZeroInt CInt -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)+hptrs = getHPTRS $ Class.switchReal (HPTRS C.hptrs) (HPTRS Z.hptrs)+++newtype HSEIN a = HSEIN {getHSEIN :: Char -> Char -> Char -> Array ZeroInt Bool -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)}++hsein :: Class.Real a => Char -> Char -> Char -> Array ZeroInt Bool -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)+hsein = getHSEIN $ Class.switchReal (HSEIN C.hsein) (HSEIN Z.hsein)+++newtype HSEQR a = HSEQR {getHSEQR :: Char -> Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array ZeroInt (Complex a), Int)}++hseqr :: Class.Real a => Char -> Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array ZeroInt (Complex a), Int)+hseqr = getHSEQR $ Class.switchReal (HSEQR C.hseqr) (HSEQR Z.hseqr)+++newtype ILALC a = ILALC {getILALC :: Int -> Array (ZeroInt,ZeroInt) (Complex a) -> IO CInt}++ilalc :: Class.Real a => Int -> Array (ZeroInt,ZeroInt) (Complex a) -> IO CInt+ilalc = getILALC $ Class.switchReal (ILALC C.ilalc) (ILALC Z.ilalc)+++newtype ILALR a = ILALR {getILALR :: Int -> Array (ZeroInt,ZeroInt) (Complex a) -> IO CInt}++ilalr :: Class.Real a => Int -> Array (ZeroInt,ZeroInt) (Complex a) -> IO CInt+ilalr = getILALR $ Class.switchReal (ILALR C.ilalr) (ILALR Z.ilalr)+++newtype IMAX1 a = IMAX1 {getIMAX1 :: Array ZeroInt (Complex a) -> Int -> IO CInt}++imax1 :: Class.Real a => Array ZeroInt (Complex a) -> Int -> IO CInt+imax1 = getIMAX1 $ Class.switchReal (IMAX1 C.imax1) (IMAX1 Z.imax1)+++newtype LABRD a = LABRD {getLABRD :: Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Array ZeroInt (Complex a), Array ZeroInt (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Array (ZeroInt,ZeroInt) (Complex a))}++labrd :: Class.Real a => Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Array ZeroInt (Complex a), Array ZeroInt (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Array (ZeroInt,ZeroInt) (Complex a))+labrd = getLABRD $ Class.switchReal (LABRD C.labrd) (LABRD Z.labrd)+++newtype LACGV a = LACGV {getLACGV :: Int -> IOArray ZeroInt (Complex a) -> Int -> IO ()}++lacgv :: Class.Real a => Int -> IOArray ZeroInt (Complex a) -> Int -> IO ()+lacgv = getLACGV $ Class.switchReal (LACGV C.lacgv) (LACGV Z.lacgv)+++newtype LACN2 a = LACN2 {getLACN2 :: IOArray ZeroInt (Complex a) -> a -> Int -> IOArray ZeroInt CInt -> IO (Array ZeroInt (Complex a), a, Int)}++lacn2 :: Class.Real a => IOArray ZeroInt (Complex a) -> a -> Int -> IOArray ZeroInt CInt -> IO (Array ZeroInt (Complex a), a, Int)+lacn2 = getLACN2 $ Class.switchReal (LACN2 C.lacn2) (LACN2 Z.lacn2)+++newtype LACON a = LACON {getLACON :: IOArray ZeroInt (Complex a) -> a -> Int -> IO (Array ZeroInt (Complex a), a, Int)}++lacon :: Class.Real a => IOArray ZeroInt (Complex a) -> a -> Int -> IO (Array ZeroInt (Complex a), a, Int)+lacon = getLACON $ Class.switchReal (LACON C.lacon) (LACON Z.lacon)+++newtype LACP2 a = LACP2 {getLACP2 :: Char -> Int -> Array (ZeroInt,ZeroInt) a -> Int -> IO (Array (ZeroInt,ZeroInt) (Complex a))}++lacp2 :: Class.Real a => Char -> Int -> Array (ZeroInt,ZeroInt) a -> Int -> IO (Array (ZeroInt,ZeroInt) (Complex a))+lacp2 = getLACP2 $ Class.switchReal (LACP2 C.lacp2) (LACP2 Z.lacp2)+++newtype LACPY a = LACPY {getLACPY :: Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array (ZeroInt,ZeroInt) (Complex a))}++lacpy :: Class.Real a => Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array (ZeroInt,ZeroInt) (Complex a))+lacpy = getLACPY $ Class.switchReal (LACPY C.lacpy) (LACPY Z.lacpy)+++newtype LACRM a = LACRM {getLACRM :: Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) a -> Int -> IO (Array (ZeroInt,ZeroInt) (Complex a))}++lacrm :: Class.Real a => Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) a -> Int -> IO (Array (ZeroInt,ZeroInt) (Complex a))+lacrm = getLACRM $ Class.switchReal (LACRM C.lacrm) (LACRM Z.lacrm)+++newtype LACRT a = LACRT {getLACRT :: IOArray ZeroInt (Complex a) -> Int -> IOArray ZeroInt (Complex a) -> Int -> (Complex a) -> (Complex a) -> IO ()}++lacrt :: Class.Real a => IOArray ZeroInt (Complex a) -> Int -> IOArray ZeroInt (Complex a) -> Int -> (Complex a) -> (Complex a) -> IO ()+lacrt = getLACRT $ Class.switchReal (LACRT C.lacrt) (LACRT Z.lacrt)+++newtype LAED0 a = LAED0 {getLAED0 :: Int -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> Int -> IO (Array (ZeroInt,ZeroInt) (Complex a), Int)}++laed0 :: Class.Real a => Int -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> Int -> IO (Array (ZeroInt,ZeroInt) (Complex a), Int)+laed0 = getLAED0 $ Class.switchReal (LAED0 C.laed0) (LAED0 Z.laed0)+++newtype LAED7 a = LAED7 {getLAED7 :: Int -> Int -> Int -> Int -> Int -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) (Complex a) -> a -> IOArray ZeroInt a -> IOArray ZeroInt CInt -> Array ZeroInt CInt -> Array ZeroInt CInt -> Array ZeroInt CInt -> Array (ZeroInt,ZeroInt) CInt -> Array (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt CInt, Int)}++laed7 :: Class.Real a => Int -> Int -> Int -> Int -> Int -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) (Complex a) -> a -> IOArray ZeroInt a -> IOArray ZeroInt CInt -> Array ZeroInt CInt -> Array ZeroInt CInt -> Array ZeroInt CInt -> Array (ZeroInt,ZeroInt) CInt -> Array (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt CInt, Int)+laed7 = getLAED7 $ Class.switchReal (LAED7 C.laed7) (LAED7 Z.laed7)+++newtype LAED8 a = LAED8 {getLAED8 :: Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray ZeroInt a -> a -> Int -> Array ZeroInt a -> Int -> Array ZeroInt CInt -> IO (Int, a, Array ZeroInt a, Array (ZeroInt,ZeroInt) (Complex a), Array ZeroInt a, Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int, Array (ZeroInt,ZeroInt) CInt, Array (ZeroInt,ZeroInt) a, Int)}++laed8 :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray ZeroInt a -> a -> Int -> Array ZeroInt a -> Int -> Array ZeroInt CInt -> IO (Int, a, Array ZeroInt a, Array (ZeroInt,ZeroInt) (Complex a), Array ZeroInt a, Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int, Array (ZeroInt,ZeroInt) CInt, Array (ZeroInt,ZeroInt) a, Int)+laed8 = getLAED8 $ Class.switchReal (LAED8 C.laed8) (LAED8 Z.laed8)+++newtype LAEIN a = LAEIN {getLAEIN :: Bool -> Bool -> Array (ZeroInt,ZeroInt) (Complex a) -> (Complex a) -> IOArray ZeroInt (Complex a) -> Int -> a -> a -> IO (Array (ZeroInt,ZeroInt) (Complex a), Int)}++laein :: Class.Real a => Bool -> Bool -> Array (ZeroInt,ZeroInt) (Complex a) -> (Complex a) -> IOArray ZeroInt (Complex a) -> Int -> a -> a -> IO (Array (ZeroInt,ZeroInt) (Complex a), Int)+laein = getLAEIN $ Class.switchReal (LAEIN C.laein) (LAEIN Z.laein)+++newtype LAESY a = LAESY {getLAESY :: (Complex a) -> (Complex a) -> (Complex a) -> IO ((Complex a), (Complex a), (Complex a), (Complex a), (Complex a))}++laesy :: Class.Real a => (Complex a) -> (Complex a) -> (Complex a) -> IO ((Complex a), (Complex a), (Complex a), (Complex a), (Complex a))+laesy = getLAESY $ Class.switchReal (LAESY C.laesy) (LAESY Z.laesy)+++newtype LAEV2 a = LAEV2 {getLAEV2 :: (Complex a) -> (Complex a) -> (Complex a) -> IO (a, a, a, (Complex a))}++laev2 :: Class.Real a => (Complex a) -> (Complex a) -> (Complex a) -> IO (a, a, a, (Complex a))+laev2 = getLAEV2 $ Class.switchReal (LAEV2 C.laev2) (LAEV2 Z.laev2)+++newtype LAGS2 a = LAGS2 {getLAGS2 :: Bool -> a -> (Complex a) -> a -> a -> (Complex a) -> a -> IO (a, (Complex a), a, (Complex a), a, (Complex a))}++lags2 :: Class.Real a => Bool -> a -> (Complex a) -> a -> a -> (Complex a) -> a -> IO (a, (Complex a), a, (Complex a), a, (Complex a))+lags2 = getLAGS2 $ Class.switchReal (LAGS2 C.lags2) (LAGS2 Z.lags2)+++newtype LAGTM a = LAGTM {getLAGTM :: Char -> a -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> a -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO ()}++lagtm :: Class.Real a => Char -> a -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> a -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO ()+lagtm = getLAGTM $ Class.switchReal (LAGTM C.lagtm) (LAGTM Z.lagtm)+++newtype LAHEF a = LAHEF {getLAHEF :: Char -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Int, Array ZeroInt CInt, Array (ZeroInt,ZeroInt) (Complex a), Int)}++lahef :: Class.Real a => Char -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Int, Array ZeroInt CInt, Array (ZeroInt,ZeroInt) (Complex a), Int)+lahef = getLAHEF $ Class.switchReal (LAHEF C.lahef) (LAHEF Z.lahef)+++newtype LAHQR a = LAHQR {getLAHQR :: Bool -> Bool -> Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt (Complex a), Int)}++lahqr :: Class.Real a => Bool -> Bool -> Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt (Complex a), Int)+lahqr = getLAHQR $ Class.switchReal (LAHQR C.lahqr) (LAHQR Z.lahqr)+++newtype LAHR2 a = LAHR2 {getLAHR2 :: Int -> Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> IO (Array ZeroInt (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Array (ZeroInt,ZeroInt) (Complex a))}++lahr2 :: Class.Real a => Int -> Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> IO (Array ZeroInt (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Array (ZeroInt,ZeroInt) (Complex a))+lahr2 = getLAHR2 $ Class.switchReal (LAHR2 C.lahr2) (LAHR2 Z.lahr2)+++newtype LAIC1 a = LAIC1 {getLAIC1 :: Int -> Array ZeroInt (Complex a) -> a -> Array ZeroInt (Complex a) -> (Complex a) -> IO (a, (Complex a), (Complex a))}++laic1 :: Class.Real a => Int -> Array ZeroInt (Complex a) -> a -> Array ZeroInt (Complex a) -> (Complex a) -> IO (a, (Complex a), (Complex a))+laic1 = getLAIC1 $ Class.switchReal (LAIC1 C.laic1) (LAIC1 Z.laic1)+++newtype LALS0 a = LALS0 {getLALS0 :: Int -> Int -> Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Array ZeroInt CInt -> Int -> Array (ZeroInt,ZeroInt) CInt -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> a -> a -> Int -> IO (Array (ZeroInt,ZeroInt) (Complex a), Int)}++lals0 :: Class.Real a => Int -> Int -> Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Array ZeroInt CInt -> Int -> Array (ZeroInt,ZeroInt) CInt -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> a -> a -> Int -> IO (Array (ZeroInt,ZeroInt) (Complex a), Int)+lals0 = getLALS0 $ Class.switchReal (LALS0 C.lals0) (LALS0 Z.lals0)+++newtype LALSA a = LALSA {getLALSA :: Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> Array (ZeroInt,ZeroInt) CInt -> Array (ZeroInt,ZeroInt) CInt -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> Array ZeroInt a -> Int -> IO (Array (ZeroInt,ZeroInt) (Complex a), Int)}++lalsa :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> Array (ZeroInt,ZeroInt) CInt -> Array (ZeroInt,ZeroInt) CInt -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> Array ZeroInt a -> Int -> IO (Array (ZeroInt,ZeroInt) (Complex a), Int)+lalsa = getLALSA $ Class.switchReal (LALSA C.lalsa) (LALSA Z.lalsa)+++newtype LALSD a = LALSD {getLALSD :: Char -> Int -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) (Complex a) -> a -> Int -> Int -> IO (Int, Int)}++lalsd :: Class.Real a => Char -> Int -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) (Complex a) -> a -> Int -> Int -> IO (Int, Int)+lalsd = getLALSD $ Class.switchReal (LALSD C.lalsd) (LALSD Z.lalsd)+++newtype LANGB a = LANGB {getLANGB :: Char -> Int -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Int -> IO a}++langb :: Class.Real a => Char -> Int -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Int -> IO a+langb = getLANGB $ Class.switchReal (LANGB C.langb) (LANGB Z.langb)+++newtype LANGE a = LANGE {getLANGE :: Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Int -> IO a}++lange :: Class.Real a => Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Int -> IO a+lange = getLANGE $ Class.switchReal (LANGE C.lange) (LANGE Z.lange)+++newtype LANGT a = LANGT {getLANGT :: Char -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> IO a}++langt :: Class.Real a => Char -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> IO a+langt = getLANGT $ Class.switchReal (LANGT C.langt) (LANGT Z.langt)+++newtype LANHB a = LANHB {getLANHB :: Char -> Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Int -> IO a}++lanhb :: Class.Real a => Char -> Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Int -> IO a+lanhb = getLANHB $ Class.switchReal (LANHB C.lanhb) (LANHB Z.lanhb)+++newtype LANHE a = LANHE {getLANHE :: Char -> Char -> Array (ZeroInt,ZeroInt) (Complex a) -> Int -> IO a}++lanhe :: Class.Real a => Char -> Char -> Array (ZeroInt,ZeroInt) (Complex a) -> Int -> IO a+lanhe = getLANHE $ Class.switchReal (LANHE C.lanhe) (LANHE Z.lanhe)+++newtype LANHF a = LANHF {getLANHF :: Char -> Char -> Char -> Int -> Array ZeroInt (Complex a) -> Int -> IO a}++lanhf :: Class.Real a => Char -> Char -> Char -> Int -> Array ZeroInt (Complex a) -> Int -> IO a+lanhf = getLANHF $ Class.switchReal (LANHF C.lanhf) (LANHF Z.lanhf)+++newtype LANHP a = LANHP {getLANHP :: Char -> Char -> Int -> Array ZeroInt (Complex a) -> Int -> IO a}++lanhp :: Class.Real a => Char -> Char -> Int -> Array ZeroInt (Complex a) -> Int -> IO a+lanhp = getLANHP $ Class.switchReal (LANHP C.lanhp) (LANHP Z.lanhp)+++newtype LANHS a = LANHS {getLANHS :: Char -> Array (ZeroInt,ZeroInt) (Complex a) -> Int -> IO a}++lanhs :: Class.Real a => Char -> Array (ZeroInt,ZeroInt) (Complex a) -> Int -> IO a+lanhs = getLANHS $ Class.switchReal (LANHS C.lanhs) (LANHS Z.lanhs)+++newtype LANHT a = LANHT {getLANHT :: Char -> Array ZeroInt a -> Array ZeroInt (Complex a) -> IO a}++lanht :: Class.Real a => Char -> Array ZeroInt a -> Array ZeroInt (Complex a) -> IO a+lanht = getLANHT $ Class.switchReal (LANHT C.lanht) (LANHT Z.lanht)+++newtype LANSB a = LANSB {getLANSB :: Char -> Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Int -> IO a}++lansb :: Class.Real a => Char -> Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Int -> IO a+lansb = getLANSB $ Class.switchReal (LANSB C.lansb) (LANSB Z.lansb)+++newtype LANSP a = LANSP {getLANSP :: Char -> Char -> Int -> Array ZeroInt (Complex a) -> Int -> IO a}++lansp :: Class.Real a => Char -> Char -> Int -> Array ZeroInt (Complex a) -> Int -> IO a+lansp = getLANSP $ Class.switchReal (LANSP C.lansp) (LANSP Z.lansp)+++newtype LANSY a = LANSY {getLANSY :: Char -> Char -> Array (ZeroInt,ZeroInt) (Complex a) -> Int -> IO a}++lansy :: Class.Real a => Char -> Char -> Array (ZeroInt,ZeroInt) (Complex a) -> Int -> IO a+lansy = getLANSY $ Class.switchReal (LANSY C.lansy) (LANSY Z.lansy)+++newtype LANTB a = LANTB {getLANTB :: Char -> Char -> Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Int -> IO a}++lantb :: Class.Real a => Char -> Char -> Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Int -> IO a+lantb = getLANTB $ Class.switchReal (LANTB C.lantb) (LANTB Z.lantb)+++newtype LANTP a = LANTP {getLANTP :: Char -> Char -> Char -> Int -> Array ZeroInt (Complex a) -> Int -> IO a}++lantp :: Class.Real a => Char -> Char -> Char -> Int -> Array ZeroInt (Complex a) -> Int -> IO a+lantp = getLANTP $ Class.switchReal (LANTP C.lantp) (LANTP Z.lantp)+++newtype LANTR a = LANTR {getLANTR :: Char -> Char -> Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Int -> IO a}++lantr :: Class.Real a => Char -> Char -> Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Int -> IO a+lantr = getLANTR $ Class.switchReal (LANTR C.lantr) (LANTR Z.lantr)+++newtype LAPLL a = LAPLL {getLAPLL :: Int -> IOArray ZeroInt (Complex a) -> Int -> IOArray ZeroInt (Complex a) -> Int -> IO (a)}++lapll :: Class.Real a => Int -> IOArray ZeroInt (Complex a) -> Int -> IOArray ZeroInt (Complex a) -> Int -> IO (a)+lapll = getLAPLL $ Class.switchReal (LAPLL C.lapll) (LAPLL Z.lapll)+++newtype LAPMR a = LAPMR {getLAPMR :: Bool -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray ZeroInt CInt -> IO ()}++lapmr :: Class.Real a => Bool -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray ZeroInt CInt -> IO ()+lapmr = getLAPMR $ Class.switchReal (LAPMR C.lapmr) (LAPMR Z.lapmr)+++newtype LAPMT a = LAPMT {getLAPMT :: Bool -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray ZeroInt CInt -> IO ()}++lapmt :: Class.Real a => Bool -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray ZeroInt CInt -> IO ()+lapmt = getLAPMT $ Class.switchReal (LAPMT C.lapmt) (LAPMT Z.lapmt)+++newtype LAQGB a = LAQGB {getLAQGB :: Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt a -> Array ZeroInt a -> a -> a -> a -> IO (Char)}++laqgb :: Class.Real a => Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt a -> Array ZeroInt a -> a -> a -> a -> IO (Char)+laqgb = getLAQGB $ Class.switchReal (LAQGB C.laqgb) (LAQGB Z.laqgb)+++newtype LAQGE a = LAQGE {getLAQGE :: IOArray (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt a -> Array ZeroInt a -> a -> a -> a -> IO (Char)}++laqge :: Class.Real a => IOArray (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt a -> Array ZeroInt a -> a -> a -> a -> IO (Char)+laqge = getLAQGE $ Class.switchReal (LAQGE C.laqge) (LAQGE Z.laqge)+++newtype LAQHB a = LAQHB {getLAQHB :: Char -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> a -> a -> IO (Array ZeroInt a, Char)}++laqhb :: Class.Real a => Char -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> a -> a -> IO (Array ZeroInt a, Char)+laqhb = getLAQHB $ Class.switchReal (LAQHB C.laqhb) (LAQHB Z.laqhb)+++newtype LAQHE a = LAQHE {getLAQHE :: Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt a -> a -> a -> IO (Char)}++laqhe :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt a -> a -> a -> IO (Char)+laqhe = getLAQHE $ Class.switchReal (LAQHE C.laqhe) (LAQHE Z.laqhe)+++newtype LAQHP a = LAQHP {getLAQHP :: Char -> IOArray ZeroInt (Complex a) -> Array ZeroInt a -> a -> a -> IO (Char)}++laqhp :: Class.Real a => Char -> IOArray ZeroInt (Complex a) -> Array ZeroInt a -> a -> a -> IO (Char)+laqhp = getLAQHP $ Class.switchReal (LAQHP C.laqhp) (LAQHP Z.laqhp)+++newtype LAQP2 a = LAQP2 {getLAQP2 :: Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray ZeroInt CInt -> IOArray ZeroInt a -> IOArray ZeroInt a -> IO (Array ZeroInt (Complex a))}++laqp2 :: Class.Real a => Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray ZeroInt CInt -> IOArray ZeroInt a -> IOArray ZeroInt a -> IO (Array ZeroInt (Complex a))+laqp2 = getLAQP2 $ Class.switchReal (LAQP2 C.laqp2) (LAQP2 Z.laqp2)+++newtype LAQPS a = LAQPS {getLAQPS :: Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray ZeroInt CInt -> Int -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int, Array ZeroInt (Complex a))}++laqps :: Class.Real a => Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray ZeroInt CInt -> Int -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int, Array ZeroInt (Complex a))+laqps = getLAQPS $ Class.switchReal (LAQPS C.laqps) (LAQPS Z.laqps)+++newtype LAQR0 a = LAQR0 {getLAQR0 :: Bool -> Bool -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> IO (Array ZeroInt (Complex a), Int)}++laqr0 :: Class.Real a => Bool -> Bool -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> IO (Array ZeroInt (Complex a), Int)+laqr0 = getLAQR0 $ Class.switchReal (LAQR0 C.laqr0) (LAQR0 Z.laqr0)+++newtype LAQR1 a = LAQR1 {getLAQR1 :: Array (ZeroInt,ZeroInt) (Complex a) -> (Complex a) -> (Complex a) -> IO (Array ZeroInt (Complex a))}++laqr1 :: Class.Real a => Array (ZeroInt,ZeroInt) (Complex a) -> (Complex a) -> (Complex a) -> IO (Array ZeroInt (Complex a))+laqr1 = getLAQR1 $ Class.switchReal (LAQR1 C.laqr1) (LAQR1 Z.laqr1)+++newtype LAQR2 a = LAQR2 {getLAQR2 :: Bool -> Bool -> Int -> Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> Int -> Int -> Int -> Int -> IO (Int, Int, Array ZeroInt (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Array (ZeroInt,ZeroInt) (Complex a))}++laqr2 :: Class.Real a => Bool -> Bool -> Int -> Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> Int -> Int -> Int -> Int -> IO (Int, Int, Array ZeroInt (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Array (ZeroInt,ZeroInt) (Complex a))+laqr2 = getLAQR2 $ Class.switchReal (LAQR2 C.laqr2) (LAQR2 Z.laqr2)+++newtype LAQR3 a = LAQR3 {getLAQR3 :: Bool -> Bool -> Int -> Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> Int -> Int -> Int -> Int -> IO (Int, Int, Array ZeroInt (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Array (ZeroInt,ZeroInt) (Complex a))}++laqr3 :: Class.Real a => Bool -> Bool -> Int -> Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> Int -> Int -> Int -> Int -> IO (Int, Int, Array ZeroInt (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Array (ZeroInt,ZeroInt) (Complex a))+laqr3 = getLAQR3 $ Class.switchReal (LAQR3 C.laqr3) (LAQR3 Z.laqr3)+++newtype LAQR4 a = LAQR4 {getLAQR4 :: Bool -> Bool -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> IO (Array ZeroInt (Complex a), Int)}++laqr4 :: Class.Real a => Bool -> Bool -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> IO (Array ZeroInt (Complex a), Int)+laqr4 = getLAQR4 $ Class.switchReal (LAQR4 C.laqr4) (LAQR4 Z.laqr4)+++newtype LAQR5 a = LAQR5 {getLAQR5 :: Bool -> Bool -> Int -> Int -> Int -> IOArray ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> Int -> Int -> Int -> Int -> IO (Array (ZeroInt,ZeroInt) (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Array (ZeroInt,ZeroInt) (Complex a))}++laqr5 :: Class.Real a => Bool -> Bool -> Int -> Int -> Int -> IOArray ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> Int -> Int -> Int -> Int -> IO (Array (ZeroInt,ZeroInt) (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Array (ZeroInt,ZeroInt) (Complex a))+laqr5 = getLAQR5 $ Class.switchReal (LAQR5 C.laqr5) (LAQR5 Z.laqr5)+++newtype LAQSB a = LAQSB {getLAQSB :: Char -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt a -> a -> a -> IO (Char)}++laqsb :: Class.Real a => Char -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt a -> a -> a -> IO (Char)+laqsb = getLAQSB $ Class.switchReal (LAQSB C.laqsb) (LAQSB Z.laqsb)+++newtype LAQSP a = LAQSP {getLAQSP :: Char -> IOArray ZeroInt (Complex a) -> Array ZeroInt a -> a -> a -> IO (Char)}++laqsp :: Class.Real a => Char -> IOArray ZeroInt (Complex a) -> Array ZeroInt a -> a -> a -> IO (Char)+laqsp = getLAQSP $ Class.switchReal (LAQSP C.laqsp) (LAQSP Z.laqsp)+++newtype LAQSY a = LAQSY {getLAQSY :: Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt a -> a -> a -> IO (Char)}++laqsy :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt a -> a -> a -> IO (Char)+laqsy = getLAQSY $ Class.switchReal (LAQSY C.laqsy) (LAQSY Z.laqsy)+++newtype LAR1V a = LAR1V {getLAR1V :: Int -> Int -> a -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> a -> a -> IOArray ZeroInt (Complex a) -> Bool -> Int -> IO (Int, a, a, Int, Array ZeroInt CInt, a, a, a)}++lar1v :: Class.Real a => Int -> Int -> a -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> a -> a -> IOArray ZeroInt (Complex a) -> Bool -> Int -> IO (Int, a, a, Int, Array ZeroInt CInt, a, a, a)+lar1v = getLAR1V $ Class.switchReal (LAR1V C.lar1v) (LAR1V Z.lar1v)+++newtype LAR2V a = LAR2V {getLAR2V :: Int -> IOArray ZeroInt (Complex a) -> IOArray ZeroInt (Complex a) -> IOArray ZeroInt (Complex a) -> Int -> Array ZeroInt a -> Array ZeroInt (Complex a) -> Int -> IO ()}++lar2v :: Class.Real a => Int -> IOArray ZeroInt (Complex a) -> IOArray ZeroInt (Complex a) -> IOArray ZeroInt (Complex a) -> Int -> Array ZeroInt a -> Array ZeroInt (Complex a) -> Int -> IO ()+lar2v = getLAR2V $ Class.switchReal (LAR2V C.lar2v) (LAR2V Z.lar2v)+++newtype LARCM a = LARCM {getLARCM :: Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array (ZeroInt,ZeroInt) (Complex a))}++larcm :: Class.Real a => Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array (ZeroInt,ZeroInt) (Complex a))+larcm = getLARCM $ Class.switchReal (LARCM C.larcm) (LARCM Z.larcm)+++newtype LARF a = LARF {getLARF :: Char -> Int -> Array ZeroInt (Complex a) -> Int -> (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO ()}++larf :: Class.Real a => Char -> Int -> Array ZeroInt (Complex a) -> Int -> (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO ()+larf = getLARF $ Class.switchReal (LARF C.larf) (LARF Z.larf)+++newtype LARFB a = LARFB {getLARFB :: Char -> Char -> Char -> Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO ()}++larfb :: Class.Real a => Char -> Char -> Char -> Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO ()+larfb = getLARFB $ Class.switchReal (LARFB C.larfb) (LARFB Z.larfb)+++newtype LARFG a = LARFG {getLARFG :: Int -> (Complex a) -> IOArray ZeroInt (Complex a) -> Int -> IO ((Complex a), (Complex a))}++larfg :: Class.Real a => Int -> (Complex a) -> IOArray ZeroInt (Complex a) -> Int -> IO ((Complex a), (Complex a))+larfg = getLARFG $ Class.switchReal (LARFG C.larfg) (LARFG Z.larfg)+++newtype LARFGP a = LARFGP {getLARFGP :: Int -> (Complex a) -> IOArray ZeroInt (Complex a) -> Int -> IO ((Complex a), (Complex a))}++larfgp :: Class.Real a => Int -> (Complex a) -> IOArray ZeroInt (Complex a) -> Int -> IO ((Complex a), (Complex a))+larfgp = getLARFGP $ Class.switchReal (LARFGP C.larfgp) (LARFGP Z.larfgp)+++newtype LARFT a = LARFT {getLARFT :: Char -> Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> Int -> IO (Array (ZeroInt,ZeroInt) (Complex a))}++larft :: Class.Real a => Char -> Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> Int -> IO (Array (ZeroInt,ZeroInt) (Complex a))+larft = getLARFT $ Class.switchReal (LARFT C.larft) (LARFT Z.larft)+++newtype LARFX a = LARFX {getLARFX :: Char -> Int -> Array ZeroInt (Complex a) -> (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO ()}++larfx :: Class.Real a => Char -> Int -> Array ZeroInt (Complex a) -> (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO ()+larfx = getLARFX $ Class.switchReal (LARFX C.larfx) (LARFX Z.larfx)+++newtype LARGV a = LARGV {getLARGV :: Int -> IOArray ZeroInt (Complex a) -> Int -> IOArray ZeroInt (Complex a) -> Int -> Int -> IO (Array ZeroInt a)}++largv :: Class.Real a => Int -> IOArray ZeroInt (Complex a) -> Int -> IOArray ZeroInt (Complex a) -> Int -> Int -> IO (Array ZeroInt a)+largv = getLARGV $ Class.switchReal (LARGV C.largv) (LARGV Z.largv)+++newtype LARNV a = LARNV {getLARNV :: Int -> IOArray ZeroInt CInt -> Int -> IO (Array ZeroInt (Complex a))}++larnv :: Class.Real a => Int -> IOArray ZeroInt CInt -> Int -> IO (Array ZeroInt (Complex a))+larnv = getLARNV $ Class.switchReal (LARNV C.larnv) (LARNV Z.larnv)+++newtype LARRV a = LARRV {getLARRV :: a -> a -> IOArray ZeroInt a -> IOArray ZeroInt a -> a -> Array ZeroInt CInt -> Int -> Int -> Int -> a -> a -> a -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray ZeroInt a -> Array ZeroInt CInt -> Array ZeroInt CInt -> Array ZeroInt a -> Int -> IO (Array (ZeroInt,ZeroInt) (Complex a), Array ZeroInt CInt, Int)}++larrv :: Class.Real a => a -> a -> IOArray ZeroInt a -> IOArray ZeroInt a -> a -> Array ZeroInt CInt -> Int -> Int -> Int -> a -> a -> a -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray ZeroInt a -> Array ZeroInt CInt -> Array ZeroInt CInt -> Array ZeroInt a -> Int -> IO (Array (ZeroInt,ZeroInt) (Complex a), Array ZeroInt CInt, Int)+larrv = getLARRV $ Class.switchReal (LARRV C.larrv) (LARRV Z.larrv)+++newtype LARTG a = LARTG {getLARTG :: (Complex a) -> (Complex a) -> IO (a, (Complex a), (Complex a))}++lartg :: Class.Real a => (Complex a) -> (Complex a) -> IO (a, (Complex a), (Complex a))+lartg = getLARTG $ Class.switchReal (LARTG C.lartg) (LARTG Z.lartg)+++newtype LARTV a = LARTV {getLARTV :: Int -> IOArray ZeroInt (Complex a) -> Int -> IOArray ZeroInt (Complex a) -> Int -> Array ZeroInt a -> Array ZeroInt (Complex a) -> Int -> IO ()}++lartv :: Class.Real a => Int -> IOArray ZeroInt (Complex a) -> Int -> IOArray ZeroInt (Complex a) -> Int -> Array ZeroInt a -> Array ZeroInt (Complex a) -> Int -> IO ()+lartv = getLARTV $ Class.switchReal (LARTV C.lartv) (LARTV Z.lartv)+++newtype LARZ a = LARZ {getLARZ :: Char -> Int -> Int -> Array ZeroInt (Complex a) -> Int -> (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO ()}++larz :: Class.Real a => Char -> Int -> Int -> Array ZeroInt (Complex a) -> Int -> (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO ()+larz = getLARZ $ Class.switchReal (LARZ C.larz) (LARZ Z.larz)+++newtype LARZB a = LARZB {getLARZB :: Char -> Char -> Char -> Char -> Int -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO ()}++larzb :: Class.Real a => Char -> Char -> Char -> Char -> Int -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO ()+larzb = getLARZB $ Class.switchReal (LARZB C.larzb) (LARZB Z.larzb)+++newtype LARZT a = LARZT {getLARZT :: Char -> Char -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> Int -> IO (Array (ZeroInt,ZeroInt) (Complex a))}++larzt :: Class.Real a => Char -> Char -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> Int -> IO (Array (ZeroInt,ZeroInt) (Complex a))+larzt = getLARZT $ Class.switchReal (LARZT C.larzt) (LARZT Z.larzt)+++newtype LASCL a = LASCL {getLASCL :: Char -> Int -> Int -> a -> a -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)}++lascl :: Class.Real a => Char -> Int -> Int -> a -> a -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)+lascl = getLASCL $ Class.switchReal (LASCL C.lascl) (LASCL Z.lascl)+++newtype LASET a = LASET {getLASET :: Char -> Int -> Int -> (Complex a) -> (Complex a) -> Int -> IO (Array (ZeroInt,ZeroInt) (Complex a))}++laset :: Class.Real a => Char -> Int -> Int -> (Complex a) -> (Complex a) -> Int -> IO (Array (ZeroInt,ZeroInt) (Complex a))+laset = getLASET $ Class.switchReal (LASET C.laset) (LASET Z.laset)+++newtype LASR a = LASR {getLASR :: Char -> Char -> Char -> Int -> Array ZeroInt a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO ()}++lasr :: Class.Real a => Char -> Char -> Char -> Int -> Array ZeroInt a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO ()+lasr = getLASR $ Class.switchReal (LASR C.lasr) (LASR Z.lasr)+++newtype LASSQ a = LASSQ {getLASSQ :: Array ZeroInt (Complex a) -> Int -> a -> a -> IO (a, a)}++lassq :: Class.Real a => Array ZeroInt (Complex a) -> Int -> a -> a -> IO (a, a)+lassq = getLASSQ $ Class.switchReal (LASSQ C.lassq) (LASSQ Z.lassq)+++newtype LASWP a = LASWP {getLASWP :: IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> Array ZeroInt CInt -> Int -> IO ()}++laswp :: Class.Real a => IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> Array ZeroInt CInt -> Int -> IO ()+laswp = getLASWP $ Class.switchReal (LASWP C.laswp) (LASWP Z.laswp)+++newtype LASYF a = LASYF {getLASYF :: Char -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Int, Array ZeroInt CInt, Array (ZeroInt,ZeroInt) (Complex a), Int)}++lasyf :: Class.Real a => Char -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Int, Array ZeroInt CInt, Array (ZeroInt,ZeroInt) (Complex a), Int)+lasyf = getLASYF $ Class.switchReal (LASYF C.lasyf) (LASYF Z.lasyf)+++newtype LATBS a = LATBS {getLATBS :: Char -> Char -> Char -> Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray ZeroInt (Complex a) -> IOArray ZeroInt a -> IO (a, Int)}++latbs :: Class.Real a => Char -> Char -> Char -> Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray ZeroInt (Complex a) -> IOArray ZeroInt a -> IO (a, Int)+latbs = getLATBS $ Class.switchReal (LATBS C.latbs) (LATBS Z.latbs)+++newtype LATDF a = LATDF {getLATDF :: Int -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray ZeroInt (Complex a) -> a -> a -> Array ZeroInt CInt -> Array ZeroInt CInt -> IO (a, a)}++latdf :: Class.Real a => Int -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray ZeroInt (Complex a) -> a -> a -> Array ZeroInt CInt -> Array ZeroInt CInt -> IO (a, a)+latdf = getLATDF $ Class.switchReal (LATDF C.latdf) (LATDF Z.latdf)+++newtype LATPS a = LATPS {getLATPS :: Char -> Char -> Char -> Char -> Array ZeroInt (Complex a) -> IOArray ZeroInt (Complex a) -> IOArray ZeroInt a -> IO (a, Int)}++latps :: Class.Real a => Char -> Char -> Char -> Char -> Array ZeroInt (Complex a) -> IOArray ZeroInt (Complex a) -> IOArray ZeroInt a -> IO (a, Int)+latps = getLATPS $ Class.switchReal (LATPS C.latps) (LATPS Z.latps)+++newtype LATRD a = LATRD {getLATRD :: Char -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array ZeroInt a, Array ZeroInt (Complex a), Array (ZeroInt,ZeroInt) (Complex a))}++latrd :: Class.Real a => Char -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array ZeroInt a, Array ZeroInt (Complex a), Array (ZeroInt,ZeroInt) (Complex a))+latrd = getLATRD $ Class.switchReal (LATRD C.latrd) (LATRD Z.latrd)+++newtype LATRS a = LATRS {getLATRS :: Char -> Char -> Char -> Char -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray ZeroInt (Complex a) -> IOArray ZeroInt a -> IO (a, Int)}++latrs :: Class.Real a => Char -> Char -> Char -> Char -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray ZeroInt (Complex a) -> IOArray ZeroInt a -> IO (a, Int)+latrs = getLATRS $ Class.switchReal (LATRS C.latrs) (LATRS Z.latrs)+++newtype LATRZ a = LATRZ {getLATRZ :: Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt (Complex a))}++latrz :: Class.Real a => Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt (Complex a))+latrz = getLATRZ $ Class.switchReal (LATRZ C.latrz) (LATRZ Z.latrz)+++newtype LAUU2 a = LAUU2 {getLAUU2 :: Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)}++lauu2 :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)+lauu2 = getLAUU2 $ Class.switchReal (LAUU2 C.lauu2) (LAUU2 Z.lauu2)+++newtype LAUUM a = LAUUM {getLAUUM :: Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)}++lauum :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)+lauum = getLAUUM $ Class.switchReal (LAUUM C.lauum) (LAUUM Z.lauum)+++newtype PBCON a = PBCON {getPBCON :: Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> a -> IO (a, Int)}++pbcon :: Class.Real a => Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> a -> IO (a, Int)+pbcon = getPBCON $ Class.switchReal (PBCON C.pbcon) (PBCON Z.pbcon)+++newtype PBEQU a = PBEQU {getPBEQU :: Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, a, a, Int)}++pbequ :: Class.Real a => Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, a, a, Int)+pbequ = getPBEQU $ Class.switchReal (PBEQU C.pbequ) (PBEQU Z.pbequ)+++newtype PBRFS a = PBRFS {getPBRFS :: Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, Array ZeroInt a, Int)}++pbrfs :: Class.Real a => Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, Array ZeroInt a, Int)+pbrfs = getPBRFS $ Class.switchReal (PBRFS C.pbrfs) (PBRFS Z.pbrfs)+++newtype PBSTF a = PBSTF {getPBSTF :: Char -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)}++pbstf :: Class.Real a => Char -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)+pbstf = getPBSTF $ Class.switchReal (PBSTF C.pbstf) (PBSTF Z.pbstf)+++newtype PBSV a = PBSV {getPBSV :: Char -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)}++pbsv :: Class.Real a => Char -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)+pbsv = getPBSV $ Class.switchReal (PBSV C.pbsv) (PBSV Z.pbsv)+++newtype PBSVX a = PBSVX {getPBSVX :: Char -> Char -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Char -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Char, Array (ZeroInt,ZeroInt) (Complex a), a, Array ZeroInt a, Array ZeroInt a, Int)}++pbsvx :: Class.Real a => Char -> Char -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Char -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Char, Array (ZeroInt,ZeroInt) (Complex a), a, Array ZeroInt a, Array ZeroInt a, Int)+pbsvx = getPBSVX $ Class.switchReal (PBSVX C.pbsvx) (PBSVX Z.pbsvx)+++newtype PBTF2 a = PBTF2 {getPBTF2 :: Char -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)}++pbtf2 :: Class.Real a => Char -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)+pbtf2 = getPBTF2 $ Class.switchReal (PBTF2 C.pbtf2) (PBTF2 Z.pbtf2)+++newtype PBTRF a = PBTRF {getPBTRF :: Char -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)}++pbtrf :: Class.Real a => Char -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)+pbtrf = getPBTRF $ Class.switchReal (PBTRF C.pbtrf) (PBTRF Z.pbtrf)+++newtype PBTRS a = PBTRS {getPBTRS :: Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)}++pbtrs :: Class.Real a => Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)+pbtrs = getPBTRS $ Class.switchReal (PBTRS C.pbtrs) (PBTRS Z.pbtrs)+++newtype PFTRF a = PFTRF {getPFTRF :: Char -> Char -> Int -> IOArray ZeroInt (Complex a) -> IO (Int)}++pftrf :: Class.Real a => Char -> Char -> Int -> IOArray ZeroInt (Complex a) -> IO (Int)+pftrf = getPFTRF $ Class.switchReal (PFTRF C.pftrf) (PFTRF Z.pftrf)+++newtype PFTRI a = PFTRI {getPFTRI :: Char -> Char -> Int -> IOArray ZeroInt (Complex a) -> IO (Int)}++pftri :: Class.Real a => Char -> Char -> Int -> IOArray ZeroInt (Complex a) -> IO (Int)+pftri = getPFTRI $ Class.switchReal (PFTRI C.pftri) (PFTRI Z.pftri)+++newtype PFTRS a = PFTRS {getPFTRS :: Char -> Char -> Int -> Array ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)}++pftrs :: Class.Real a => Char -> Char -> Int -> Array ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)+pftrs = getPFTRS $ Class.switchReal (PFTRS C.pftrs) (PFTRS Z.pftrs)+++newtype POCON a = POCON {getPOCON :: Char -> Array (ZeroInt,ZeroInt) (Complex a) -> a -> IO (a, Int)}++pocon :: Class.Real a => Char -> Array (ZeroInt,ZeroInt) (Complex a) -> a -> IO (a, Int)+pocon = getPOCON $ Class.switchReal (POCON C.pocon) (POCON Z.pocon)+++newtype POEQU a = POEQU {getPOEQU :: Array (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, a, a, Int)}++poequ :: Class.Real a => Array (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, a, a, Int)+poequ = getPOEQU $ Class.switchReal (POEQU C.poequ) (POEQU Z.poequ)+++newtype POEQUB a = POEQUB {getPOEQUB :: Array (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, a, a, Int)}++poequb :: Class.Real a => Array (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, a, a, Int)+poequb = getPOEQUB $ Class.switchReal (POEQUB C.poequb) (POEQUB Z.poequb)+++newtype PORFS a = PORFS {getPORFS :: Char -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, Array ZeroInt a, Int)}++porfs :: Class.Real a => Char -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, Array ZeroInt a, Int)+porfs = getPORFS $ Class.switchReal (PORFS C.porfs) (PORFS Z.porfs)+++newtype POSV a = POSV {getPOSV :: Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)}++posv :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)+posv = getPOSV $ Class.switchReal (POSV C.posv) (POSV Z.posv)+++newtype POSVX a = POSVX {getPOSVX :: Char -> Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Char -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Char, Array (ZeroInt,ZeroInt) (Complex a), a, Array ZeroInt a, Array ZeroInt a, Int)}++posvx :: Class.Real a => Char -> Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Char -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Char, Array (ZeroInt,ZeroInt) (Complex a), a, Array ZeroInt a, Array ZeroInt a, Int)+posvx = getPOSVX $ Class.switchReal (POSVX C.posvx) (POSVX Z.posvx)+++newtype POTF2 a = POTF2 {getPOTF2 :: Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)}++potf2 :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)+potf2 = getPOTF2 $ Class.switchReal (POTF2 C.potf2) (POTF2 Z.potf2)+++newtype POTRF a = POTRF {getPOTRF :: Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)}++potrf :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)+potrf = getPOTRF $ Class.switchReal (POTRF C.potrf) (POTRF Z.potrf)+++newtype POTRI a = POTRI {getPOTRI :: Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)}++potri :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)+potri = getPOTRI $ Class.switchReal (POTRI C.potri) (POTRI Z.potri)+++newtype POTRS a = POTRS {getPOTRS :: Char -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)}++potrs :: Class.Real a => Char -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)+potrs = getPOTRS $ Class.switchReal (POTRS C.potrs) (POTRS Z.potrs)+++newtype PPCON a = PPCON {getPPCON :: Char -> Int -> Array ZeroInt (Complex a) -> a -> IO (a, Int)}++ppcon :: Class.Real a => Char -> Int -> Array ZeroInt (Complex a) -> a -> IO (a, Int)+ppcon = getPPCON $ Class.switchReal (PPCON C.ppcon) (PPCON Z.ppcon)+++newtype PPEQU a = PPEQU {getPPEQU :: Char -> Int -> Array ZeroInt (Complex a) -> IO (Array ZeroInt a, a, a, Int)}++ppequ :: Class.Real a => Char -> Int -> Array ZeroInt (Complex a) -> IO (Array ZeroInt a, a, a, Int)+ppequ = getPPEQU $ Class.switchReal (PPEQU C.ppequ) (PPEQU Z.ppequ)+++newtype PPRFS a = PPRFS {getPPRFS :: Char -> Int -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, Array ZeroInt a, Int)}++pprfs :: Class.Real a => Char -> Int -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, Array ZeroInt a, Int)+pprfs = getPPRFS $ Class.switchReal (PPRFS C.pprfs) (PPRFS Z.pprfs)+++newtype PPSV a = PPSV {getPPSV :: Char -> Int -> IOArray ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)}++ppsv :: Class.Real a => Char -> Int -> IOArray ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)+ppsv = getPPSV $ Class.switchReal (PPSV C.ppsv) (PPSV Z.ppsv)+++newtype PPSVX a = PPSVX {getPPSVX :: Char -> Char -> IOArray ZeroInt (Complex a) -> IOArray ZeroInt (Complex a) -> Char -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Char, Array (ZeroInt,ZeroInt) (Complex a), a, Array ZeroInt a, Array ZeroInt a, Int)}++ppsvx :: Class.Real a => Char -> Char -> IOArray ZeroInt (Complex a) -> IOArray ZeroInt (Complex a) -> Char -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Char, Array (ZeroInt,ZeroInt) (Complex a), a, Array ZeroInt a, Array ZeroInt a, Int)+ppsvx = getPPSVX $ Class.switchReal (PPSVX C.ppsvx) (PPSVX Z.ppsvx)+++newtype PPTRF a = PPTRF {getPPTRF :: Char -> Int -> IOArray ZeroInt (Complex a) -> IO (Int)}++pptrf :: Class.Real a => Char -> Int -> IOArray ZeroInt (Complex a) -> IO (Int)+pptrf = getPPTRF $ Class.switchReal (PPTRF C.pptrf) (PPTRF Z.pptrf)+++newtype PPTRI a = PPTRI {getPPTRI :: Char -> Int -> IOArray ZeroInt (Complex a) -> IO (Int)}++pptri :: Class.Real a => Char -> Int -> IOArray ZeroInt (Complex a) -> IO (Int)+pptri = getPPTRI $ Class.switchReal (PPTRI C.pptri) (PPTRI Z.pptri)+++newtype PPTRS a = PPTRS {getPPTRS :: Char -> Int -> Array ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)}++pptrs :: Class.Real a => Char -> Int -> Array ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)+pptrs = getPPTRS $ Class.switchReal (PPTRS C.pptrs) (PPTRS Z.pptrs)+++newtype PSTF2 a = PSTF2 {getPSTF2 :: Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> a -> IO (Array ZeroInt CInt, Int, Int)}++pstf2 :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> a -> IO (Array ZeroInt CInt, Int, Int)+pstf2 = getPSTF2 $ Class.switchReal (PSTF2 C.pstf2) (PSTF2 Z.pstf2)+++newtype PSTRF a = PSTRF {getPSTRF :: Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> a -> IO (Array ZeroInt CInt, Int, Int)}++pstrf :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> a -> IO (Array ZeroInt CInt, Int, Int)+pstrf = getPSTRF $ Class.switchReal (PSTRF C.pstrf) (PSTRF Z.pstrf)+++newtype PTCON a = PTCON {getPTCON :: Array ZeroInt a -> Array ZeroInt (Complex a) -> a -> IO (a, Int)}++ptcon :: Class.Real a => Array ZeroInt a -> Array ZeroInt (Complex a) -> a -> IO (a, Int)+ptcon = getPTCON $ Class.switchReal (PTCON C.ptcon) (PTCON Z.ptcon)+++newtype PTEQR a = PTEQR {getPTEQR :: Char -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)}++pteqr :: Class.Real a => Char -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)+pteqr = getPTEQR $ Class.switchReal (PTEQR C.pteqr) (PTEQR Z.pteqr)+++newtype PTRFS a = PTRFS {getPTRFS :: Char -> Array ZeroInt a -> Array ZeroInt (Complex a) -> Array ZeroInt a -> Array ZeroInt (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, Array ZeroInt a, Int)}++ptrfs :: Class.Real a => Char -> Array ZeroInt a -> Array ZeroInt (Complex a) -> Array ZeroInt a -> Array ZeroInt (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, Array ZeroInt a, Int)+ptrfs = getPTRFS $ Class.switchReal (PTRFS C.ptrfs) (PTRFS Z.ptrfs)+++newtype PTSV a = PTSV {getPTSV :: IOArray ZeroInt a -> IOArray ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)}++ptsv :: Class.Real a => IOArray ZeroInt a -> IOArray ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)+ptsv = getPTSV $ Class.switchReal (PTSV C.ptsv) (PTSV Z.ptsv)+++newtype PTSVX a = PTSVX {getPTSVX :: Char -> Array ZeroInt a -> Array ZeroInt (Complex a) -> IOArray ZeroInt a -> IOArray ZeroInt (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array (ZeroInt,ZeroInt) (Complex a), a, Array ZeroInt a, Array ZeroInt a, Int)}++ptsvx :: Class.Real a => Char -> Array ZeroInt a -> Array ZeroInt (Complex a) -> IOArray ZeroInt a -> IOArray ZeroInt (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array (ZeroInt,ZeroInt) (Complex a), a, Array ZeroInt a, Array ZeroInt a, Int)+ptsvx = getPTSVX $ Class.switchReal (PTSVX C.ptsvx) (PTSVX Z.ptsvx)+++newtype PTTRF a = PTTRF {getPTTRF :: IOArray ZeroInt a -> IOArray ZeroInt (Complex a) -> IO (Int)}++pttrf :: Class.Real a => IOArray ZeroInt a -> IOArray ZeroInt (Complex a) -> IO (Int)+pttrf = getPTTRF $ Class.switchReal (PTTRF C.pttrf) (PTTRF Z.pttrf)+++newtype PTTRS a = PTTRS {getPTTRS :: Char -> Array ZeroInt a -> Array ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)}++pttrs :: Class.Real a => Char -> Array ZeroInt a -> Array ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)+pttrs = getPTTRS $ Class.switchReal (PTTRS C.pttrs) (PTTRS Z.pttrs)+++newtype PTTS2 a = PTTS2 {getPTTS2 :: Int -> Array ZeroInt a -> Array ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO ()}++ptts2 :: Class.Real a => Int -> Array ZeroInt a -> Array ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO ()+ptts2 = getPTTS2 $ Class.switchReal (PTTS2 C.ptts2) (PTTS2 Z.ptts2)+++newtype ROT a = ROT {getROT :: IOArray ZeroInt (Complex a) -> Int -> IOArray ZeroInt (Complex a) -> Int -> a -> (Complex a) -> IO ()}++rot :: Class.Real a => IOArray ZeroInt (Complex a) -> Int -> IOArray ZeroInt (Complex a) -> Int -> a -> (Complex a) -> IO ()+rot = getROT $ Class.switchReal (ROT C.rot) (ROT Z.rot)+++newtype RSCL a = RSCL {getRSCL :: Int -> a -> IOArray ZeroInt (Complex a) -> Int -> IO ()}++rscl :: Class.Real a => Int -> a -> IOArray ZeroInt (Complex a) -> Int -> IO ()+rscl = getRSCL $ Class.switchReal (RSCL C.rscl) (RSCL Z.rscl)+++newtype SPCON a = SPCON {getSPCON :: Char -> Array ZeroInt (Complex a) -> Array ZeroInt CInt -> a -> IO (a, Int)}++spcon :: Class.Real a => Char -> Array ZeroInt (Complex a) -> Array ZeroInt CInt -> a -> IO (a, Int)+spcon = getSPCON $ Class.switchReal (SPCON C.spcon) (SPCON Z.spcon)+++newtype SPMV a = SPMV {getSPMV :: Char -> Int -> (Complex a) -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> Int -> (Complex a) -> IOArray ZeroInt (Complex a) -> Int -> IO ()}++spmv :: Class.Real a => Char -> Int -> (Complex a) -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> Int -> (Complex a) -> IOArray ZeroInt (Complex a) -> Int -> IO ()+spmv = getSPMV $ Class.switchReal (SPMV C.spmv) (SPMV Z.spmv)+++newtype SPR a = SPR {getSPR :: Char -> Int -> (Complex a) -> Array ZeroInt (Complex a) -> Int -> IOArray ZeroInt (Complex a) -> IO ()}++spr :: Class.Real a => Char -> Int -> (Complex a) -> Array ZeroInt (Complex a) -> Int -> IOArray ZeroInt (Complex a) -> IO ()+spr = getSPR $ Class.switchReal (SPR C.spr) (SPR Z.spr)+++newtype SPRFS a = SPRFS {getSPRFS :: Char -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> Array ZeroInt CInt -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, Array ZeroInt a, Int)}++sprfs :: Class.Real a => Char -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> Array ZeroInt CInt -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, Array ZeroInt a, Int)+sprfs = getSPRFS $ Class.switchReal (SPRFS C.sprfs) (SPRFS Z.sprfs)+++newtype SPSV a = SPSV {getSPSV :: Char -> Int -> IOArray ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt CInt, Int)}++spsv :: Class.Real a => Char -> Int -> IOArray ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt CInt, Int)+spsv = getSPSV $ Class.switchReal (SPSV C.spsv) (SPSV Z.spsv)+++newtype SPSVX a = SPSVX {getSPSVX :: Char -> Char -> Array ZeroInt (Complex a) -> IOArray ZeroInt (Complex a) -> IOArray ZeroInt CInt -> Array (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array (ZeroInt,ZeroInt) (Complex a), a, Array ZeroInt a, Array ZeroInt a, Int)}++spsvx :: Class.Real a => Char -> Char -> Array ZeroInt (Complex a) -> IOArray ZeroInt (Complex a) -> IOArray ZeroInt CInt -> Array (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array (ZeroInt,ZeroInt) (Complex a), a, Array ZeroInt a, Array ZeroInt a, Int)+spsvx = getSPSVX $ Class.switchReal (SPSVX C.spsvx) (SPSVX Z.spsvx)+++newtype SPTRF a = SPTRF {getSPTRF :: Char -> Int -> IOArray ZeroInt (Complex a) -> IO (Array ZeroInt CInt, Int)}++sptrf :: Class.Real a => Char -> Int -> IOArray ZeroInt (Complex a) -> IO (Array ZeroInt CInt, Int)+sptrf = getSPTRF $ Class.switchReal (SPTRF C.sptrf) (SPTRF Z.sptrf)+++newtype SPTRI a = SPTRI {getSPTRI :: Char -> IOArray ZeroInt (Complex a) -> Array ZeroInt CInt -> IO (Int)}++sptri :: Class.Real a => Char -> IOArray ZeroInt (Complex a) -> Array ZeroInt CInt -> IO (Int)+sptri = getSPTRI $ Class.switchReal (SPTRI C.sptri) (SPTRI Z.sptri)+++newtype SPTRS a = SPTRS {getSPTRS :: Char -> Array ZeroInt (Complex a) -> Array ZeroInt CInt -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)}++sptrs :: Class.Real a => Char -> Array ZeroInt (Complex a) -> Array ZeroInt CInt -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)+sptrs = getSPTRS $ Class.switchReal (SPTRS C.sptrs) (SPTRS Z.sptrs)+++newtype STEDC a = STEDC {getSTEDC :: Char -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> Int -> IO (Int)}++stedc :: Class.Real a => Char -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> Int -> IO (Int)+stedc = getSTEDC $ Class.switchReal (STEDC C.stedc) (STEDC Z.stedc)+++newtype STEGR a = STEGR {getSTEGR :: Char -> Char -> IOArray ZeroInt a -> IOArray ZeroInt a -> a -> a -> Int -> Int -> a -> Int -> Int -> Int -> Int -> IO (Int, Array ZeroInt a, Array (ZeroInt,ZeroInt) (Complex a), Array ZeroInt CInt, Int)}++stegr :: Class.Real a => Char -> Char -> IOArray ZeroInt a -> IOArray ZeroInt a -> a -> a -> Int -> Int -> a -> Int -> Int -> Int -> Int -> IO (Int, Array ZeroInt a, Array (ZeroInt,ZeroInt) (Complex a), Array ZeroInt CInt, Int)+stegr = getSTEGR $ Class.switchReal (STEGR C.stegr) (STEGR Z.stegr)+++newtype STEIN a = STEIN {getSTEIN :: Array ZeroInt a -> Array ZeroInt a -> Int -> Array ZeroInt a -> Array ZeroInt CInt -> Array ZeroInt CInt -> Int -> IO (Array (ZeroInt,ZeroInt) (Complex a), Array ZeroInt CInt, Int)}++stein :: Class.Real a => Array ZeroInt a -> Array ZeroInt a -> Int -> Array ZeroInt a -> Array ZeroInt CInt -> Array ZeroInt CInt -> Int -> IO (Array (ZeroInt,ZeroInt) (Complex a), Array ZeroInt CInt, Int)+stein = getSTEIN $ Class.switchReal (STEIN C.stein) (STEIN Z.stein)+++newtype STEMR a = STEMR {getSTEMR :: Char -> Char -> IOArray ZeroInt a -> IOArray ZeroInt a -> a -> a -> Int -> Int -> Int -> Int -> Int -> Bool -> Int -> Int -> IO (Int, Array ZeroInt a, Array (ZeroInt,ZeroInt) (Complex a), Array ZeroInt CInt, Bool, Int)}++stemr :: Class.Real a => Char -> Char -> IOArray ZeroInt a -> IOArray ZeroInt a -> a -> a -> Int -> Int -> Int -> Int -> Int -> Bool -> Int -> Int -> IO (Int, Array ZeroInt a, Array (ZeroInt,ZeroInt) (Complex a), Array ZeroInt CInt, Bool, Int)+stemr = getSTEMR $ Class.switchReal (STEMR C.stemr) (STEMR Z.stemr)+++newtype STEQR a = STEQR {getSTEQR :: Char -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)}++steqr :: Class.Real a => Char -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)+steqr = getSTEQR $ Class.switchReal (STEQR C.steqr) (STEQR Z.steqr)+++newtype SUM1 a = SUM1 {getSUM1 :: Array ZeroInt (Complex a) -> Int -> IO a}++sum1 :: Class.Real a => Array ZeroInt (Complex a) -> Int -> IO a+sum1 = getSUM1 $ Class.switchReal (SUM1 C.sum1) (SUM1 Z.sum1)+++newtype SYCON a = SYCON {getSYCON :: Char -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt CInt -> a -> IO (a, Int)}++sycon :: Class.Real a => Char -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt CInt -> a -> IO (a, Int)+sycon = getSYCON $ Class.switchReal (SYCON C.sycon) (SYCON Z.sycon)+++newtype SYCONV a = SYCONV {getSYCONV :: Char -> Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt CInt -> IO (Array ZeroInt (Complex a), Int)}++syconv :: Class.Real a => Char -> Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt CInt -> IO (Array ZeroInt (Complex a), Int)+syconv = getSYCONV $ Class.switchReal (SYCONV C.syconv) (SYCONV Z.syconv)+++newtype SYEQUB a = SYEQUB {getSYEQUB :: Char -> Array (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, a, a, Int)}++syequb :: Class.Real a => Char -> Array (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, a, a, Int)+syequb = getSYEQUB $ Class.switchReal (SYEQUB C.syequb) (SYEQUB Z.syequb)+++newtype SYMV a = SYMV {getSYMV :: Char -> (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> Int -> (Complex a) -> IOArray ZeroInt (Complex a) -> Int -> IO ()}++symv :: Class.Real a => Char -> (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> Int -> (Complex a) -> IOArray ZeroInt (Complex a) -> Int -> IO ()+symv = getSYMV $ Class.switchReal (SYMV C.symv) (SYMV Z.symv)+++newtype SYR a = SYR {getSYR :: Char -> (Complex a) -> Array ZeroInt (Complex a) -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO ()}++syr :: Class.Real a => Char -> (Complex a) -> Array ZeroInt (Complex a) -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO ()+syr = getSYR $ Class.switchReal (SYR C.syr) (SYR Z.syr)+++newtype SYRFS a = SYRFS {getSYRFS :: Char -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt CInt -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, Array ZeroInt a, Int)}++syrfs :: Class.Real a => Char -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt CInt -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, Array ZeroInt a, Int)+syrfs = getSYRFS $ Class.switchReal (SYRFS C.syrfs) (SYRFS Z.syrfs)+++newtype SYSV a = SYSV {getSYSV :: Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array ZeroInt CInt, Int)}++sysv :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array ZeroInt CInt, Int)+sysv = getSYSV $ Class.switchReal (SYSV C.sysv) (SYSV Z.sysv)+++newtype SYSVX a = SYSVX {getSYSVX :: Char -> Char -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray ZeroInt CInt -> Array (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> IO (Array (ZeroInt,ZeroInt) (Complex a), a, Array ZeroInt a, Array ZeroInt a, Int)}++sysvx :: Class.Real a => Char -> Char -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray ZeroInt CInt -> Array (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> IO (Array (ZeroInt,ZeroInt) (Complex a), a, Array ZeroInt a, Array ZeroInt a, Int)+sysvx = getSYSVX $ Class.switchReal (SYSVX C.sysvx) (SYSVX Z.sysvx)+++newtype SYSWAPR a = SYSWAPR {getSYSWAPR :: Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> IO ()}++syswapr :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> IO ()+syswapr = getSYSWAPR $ Class.switchReal (SYSWAPR C.syswapr) (SYSWAPR Z.syswapr)+++newtype SYTF2 a = SYTF2 {getSYTF2 :: Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt CInt, Int)}++sytf2 :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt CInt, Int)+sytf2 = getSYTF2 $ Class.switchReal (SYTF2 C.sytf2) (SYTF2 Z.sytf2)+++newtype SYTRF a = SYTRF {getSYTRF :: Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array ZeroInt CInt, Int)}++sytrf :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array ZeroInt CInt, Int)+sytrf = getSYTRF $ Class.switchReal (SYTRF C.sytrf) (SYTRF Z.sytrf)+++newtype SYTRI a = SYTRI {getSYTRI :: Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt CInt -> IO (Int)}++sytri :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt CInt -> IO (Int)+sytri = getSYTRI $ Class.switchReal (SYTRI C.sytri) (SYTRI Z.sytri)+++newtype SYTRI2 a = SYTRI2 {getSYTRI2 :: Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt CInt -> Int -> Int -> IO (Int)}++sytri2 :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt CInt -> Int -> Int -> IO (Int)+sytri2 = getSYTRI2 $ Class.switchReal (SYTRI2 C.sytri2) (SYTRI2 Z.sytri2)+++newtype SYTRI2X a = SYTRI2X {getSYTRI2X :: Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt CInt -> Int -> IO (Int)}++sytri2x :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt CInt -> Int -> IO (Int)+sytri2x = getSYTRI2X $ Class.switchReal (SYTRI2X C.sytri2x) (SYTRI2X Z.sytri2x)+++newtype SYTRS a = SYTRS {getSYTRS :: Char -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt CInt -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)}++sytrs :: Class.Real a => Char -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt CInt -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)+sytrs = getSYTRS $ Class.switchReal (SYTRS C.sytrs) (SYTRS Z.sytrs)+++newtype SYTRS2 a = SYTRS2 {getSYTRS2 :: Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt CInt -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)}++sytrs2 :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt CInt -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)+sytrs2 = getSYTRS2 $ Class.switchReal (SYTRS2 C.sytrs2) (SYTRS2 Z.sytrs2)+++newtype TBCON a = TBCON {getTBCON :: Char -> Char -> Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> IO (a, Int)}++tbcon :: Class.Real a => Char -> Char -> Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> IO (a, Int)+tbcon = getTBCON $ Class.switchReal (TBCON C.tbcon) (TBCON Z.tbcon)+++newtype TBRFS a = TBRFS {getTBRFS :: Char -> Char -> Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, Array ZeroInt a, Int)}++tbrfs :: Class.Real a => Char -> Char -> Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, Array ZeroInt a, Int)+tbrfs = getTBRFS $ Class.switchReal (TBRFS C.tbrfs) (TBRFS Z.tbrfs)+++newtype TBTRS a = TBTRS {getTBTRS :: Char -> Char -> Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)}++tbtrs :: Class.Real a => Char -> Char -> Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)+tbtrs = getTBTRS $ Class.switchReal (TBTRS C.tbtrs) (TBTRS Z.tbtrs)+++newtype TFSM a = TFSM {getTFSM :: Char -> Char -> Char -> Char -> Char -> Int -> (Complex a) -> Array ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO ()}++tfsm :: Class.Real a => Char -> Char -> Char -> Char -> Char -> Int -> (Complex a) -> Array ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO ()+tfsm = getTFSM $ Class.switchReal (TFSM C.tfsm) (TFSM Z.tfsm)+++newtype TFTRI a = TFTRI {getTFTRI :: Char -> Char -> Char -> Int -> IOArray ZeroInt (Complex a) -> IO (Int)}++tftri :: Class.Real a => Char -> Char -> Char -> Int -> IOArray ZeroInt (Complex a) -> IO (Int)+tftri = getTFTRI $ Class.switchReal (TFTRI C.tftri) (TFTRI Z.tftri)+++newtype TFTTP a = TFTTP {getTFTTP :: Char -> Char -> Int -> Array ZeroInt (Complex a) -> IO (Array ZeroInt (Complex a), Int)}++tfttp :: Class.Real a => Char -> Char -> Int -> Array ZeroInt (Complex a) -> IO (Array ZeroInt (Complex a), Int)+tfttp = getTFTTP $ Class.switchReal (TFTTP C.tfttp) (TFTTP Z.tfttp)+++newtype TFTTR a = TFTTR {getTFTTR :: Char -> Char -> Int -> Array ZeroInt (Complex a) -> Int -> IO (Array (ZeroInt,ZeroInt) (Complex a), Int)}++tfttr :: Class.Real a => Char -> Char -> Int -> Array ZeroInt (Complex a) -> Int -> IO (Array (ZeroInt,ZeroInt) (Complex a), Int)+tfttr = getTFTTR $ Class.switchReal (TFTTR C.tfttr) (TFTTR Z.tfttr)+++newtype TGEVC a = TGEVC {getTGEVC :: Char -> Char -> Array ZeroInt Bool -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int, Int)}++tgevc :: Class.Real a => Char -> Char -> Array ZeroInt Bool -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int, Int)+tgevc = getTGEVC $ Class.switchReal (TGEVC C.tgevc) (TGEVC Z.tgevc)+++newtype TGEX2 a = TGEX2 {getTGEX2 :: Bool -> Bool -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Int)}++tgex2 :: Class.Real a => Bool -> Bool -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Int)+tgex2 = getTGEX2 $ Class.switchReal (TGEX2 C.tgex2) (TGEX2 Z.tgex2)+++newtype TGEXC a = TGEXC {getTGEXC :: Bool -> Bool -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> IO (Int, Int)}++tgexc :: Class.Real a => Bool -> Bool -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> IO (Int, Int)+tgexc = getTGEXC $ Class.switchReal (TGEXC C.tgexc) (TGEXC Z.tgexc)+++newtype TGSEN a = TGSEN {getTGSEN :: Int -> Bool -> Bool -> Array ZeroInt Bool -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> IO (Array ZeroInt (Complex a), Array ZeroInt (Complex a), Int, a, a, Array ZeroInt a, Int)}++tgsen :: Class.Real a => Int -> Bool -> Bool -> Array ZeroInt Bool -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> IO (Array ZeroInt (Complex a), Array ZeroInt (Complex a), Int, a, a, Array ZeroInt a, Int)+tgsen = getTGSEN $ Class.switchReal (TGSEN C.tgsen) (TGSEN Z.tgsen)+++newtype TGSJA a = TGSJA {getTGSJA :: Char -> Char -> Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> a -> a -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, Array ZeroInt a, Int, Int)}++tgsja :: Class.Real a => Char -> Char -> Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> a -> a -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, Array ZeroInt a, Int, Int)+tgsja = getTGSJA $ Class.switchReal (TGSJA C.tgsja) (TGSJA Z.tgsja)+++newtype TGSNA a = TGSNA {getTGSNA :: Char -> Char -> Array ZeroInt Bool -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Int, Int)}++tgsna :: Class.Real a => Char -> Char -> Array ZeroInt Bool -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Int, Int)+tgsna = getTGSNA $ Class.switchReal (TGSNA C.tgsna) (TGSNA Z.tgsna)+++newtype TGSY2 a = TGSY2 {getTGSY2 :: Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> a -> a -> IO (a, a, a, Int)}++tgsy2 :: Class.Real a => Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> a -> a -> IO (a, a, a, Int)+tgsy2 = getTGSY2 $ Class.switchReal (TGSY2 C.tgsy2) (TGSY2 Z.tgsy2)+++newtype TGSYL a = TGSYL {getTGSYL :: Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (a, a, Int)}++tgsyl :: Class.Real a => Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (a, a, Int)+tgsyl = getTGSYL $ Class.switchReal (TGSYL C.tgsyl) (TGSYL Z.tgsyl)+++newtype TPCON a = TPCON {getTPCON :: Char -> Char -> Char -> Int -> Array ZeroInt (Complex a) -> IO (a, Int)}++tpcon :: Class.Real a => Char -> Char -> Char -> Int -> Array ZeroInt (Complex a) -> IO (a, Int)+tpcon = getTPCON $ Class.switchReal (TPCON C.tpcon) (TPCON Z.tpcon)+++newtype TPRFS a = TPRFS {getTPRFS :: Char -> Char -> Char -> Int -> Array ZeroInt (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, Array ZeroInt a, Int)}++tprfs :: Class.Real a => Char -> Char -> Char -> Int -> Array ZeroInt (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, Array ZeroInt a, Int)+tprfs = getTPRFS $ Class.switchReal (TPRFS C.tprfs) (TPRFS Z.tprfs)+++newtype TPTRI a = TPTRI {getTPTRI :: Char -> Char -> Int -> IOArray ZeroInt (Complex a) -> IO (Int)}++tptri :: Class.Real a => Char -> Char -> Int -> IOArray ZeroInt (Complex a) -> IO (Int)+tptri = getTPTRI $ Class.switchReal (TPTRI C.tptri) (TPTRI Z.tptri)+++newtype TPTRS a = TPTRS {getTPTRS :: Char -> Char -> Char -> Int -> Array ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)}++tptrs :: Class.Real a => Char -> Char -> Char -> Int -> Array ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)+tptrs = getTPTRS $ Class.switchReal (TPTRS C.tptrs) (TPTRS Z.tptrs)+++newtype TPTTF a = TPTTF {getTPTTF :: Char -> Char -> Int -> Array ZeroInt (Complex a) -> IO (Array ZeroInt (Complex a), Int)}++tpttf :: Class.Real a => Char -> Char -> Int -> Array ZeroInt (Complex a) -> IO (Array ZeroInt (Complex a), Int)+tpttf = getTPTTF $ Class.switchReal (TPTTF C.tpttf) (TPTTF Z.tpttf)+++newtype TPTTR a = TPTTR {getTPTTR :: Char -> Int -> Array ZeroInt (Complex a) -> Int -> IO (Array (ZeroInt,ZeroInt) (Complex a), Int)}++tpttr :: Class.Real a => Char -> Int -> Array ZeroInt (Complex a) -> Int -> IO (Array (ZeroInt,ZeroInt) (Complex a), Int)+tpttr = getTPTTR $ Class.switchReal (TPTTR C.tpttr) (TPTTR Z.tpttr)+++newtype TRCON a = TRCON {getTRCON :: Char -> Char -> Char -> Array (ZeroInt,ZeroInt) (Complex a) -> IO (a, Int)}++trcon :: Class.Real a => Char -> Char -> Char -> Array (ZeroInt,ZeroInt) (Complex a) -> IO (a, Int)+trcon = getTRCON $ Class.switchReal (TRCON C.trcon) (TRCON Z.trcon)+++newtype TREVC a = TREVC {getTREVC :: Char -> Char -> Array ZeroInt Bool -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int, Int)}++trevc :: Class.Real a => Char -> Char -> Array ZeroInt Bool -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int, Int)+trevc = getTREVC $ Class.switchReal (TREVC C.trevc) (TREVC Z.trevc)+++newtype TREXC a = TREXC {getTREXC :: Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> IO (Int)}++trexc :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> IO (Int)+trexc = getTREXC $ Class.switchReal (TREXC C.trexc) (TREXC Z.trexc)+++newtype TRRFS a = TRRFS {getTRRFS :: Char -> Char -> Char -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, Array ZeroInt a, Int)}++trrfs :: Class.Real a => Char -> Char -> Char -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt a, Array ZeroInt a, Int)+trrfs = getTRRFS $ Class.switchReal (TRRFS C.trrfs) (TRRFS Z.trrfs)+++newtype TRSEN a = TRSEN {getTRSEN :: Char -> Char -> Array ZeroInt Bool -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array ZeroInt (Complex a), Int, a, a, Int)}++trsen :: Class.Real a => Char -> Char -> Array ZeroInt Bool -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array ZeroInt (Complex a), Int, a, a, Int)+trsen = getTRSEN $ Class.switchReal (TRSEN C.trsen) (TRSEN Z.trsen)+++newtype TRSNA a = TRSNA {getTRSNA :: Char -> Char -> Array ZeroInt Bool -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Int, Int)}++trsna :: Class.Real a => Char -> Char -> Array ZeroInt Bool -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Int, Int)+trsna = getTRSNA $ Class.switchReal (TRSNA C.trsna) (TRSNA Z.trsna)+++newtype TRSYL a = TRSYL {getTRSYL :: Char -> Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (a, Int)}++trsyl :: Class.Real a => Char -> Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (a, Int)+trsyl = getTRSYL $ Class.switchReal (TRSYL C.trsyl) (TRSYL Z.trsyl)+++newtype TRTI2 a = TRTI2 {getTRTI2 :: Char -> Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)}++trti2 :: Class.Real a => Char -> Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)+trti2 = getTRTI2 $ Class.switchReal (TRTI2 C.trti2) (TRTI2 Z.trti2)+++newtype TRTRI a = TRTRI {getTRTRI :: Char -> Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)}++trtri :: Class.Real a => Char -> Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)+trtri = getTRTRI $ Class.switchReal (TRTRI C.trtri) (TRTRI Z.trtri)+++newtype TRTRS a = TRTRS {getTRTRS :: Char -> Char -> Char -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)}++trtrs :: Class.Real a => Char -> Char -> Char -> Array (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IO (Int)+trtrs = getTRTRS $ Class.switchReal (TRTRS C.trtrs) (TRTRS Z.trtrs)+++newtype TRTTF a = TRTTF {getTRTTF :: Char -> Char -> Array (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt (Complex a), Int)}++trttf :: Class.Real a => Char -> Char -> Array (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt (Complex a), Int)+trttf = getTRTTF $ Class.switchReal (TRTTF C.trttf) (TRTTF Z.trttf)+++newtype TRTTP a = TRTTP {getTRTTP :: Char -> Array (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt (Complex a), Int)}++trttp :: Class.Real a => Char -> Array (ZeroInt,ZeroInt) (Complex a) -> IO (Array ZeroInt (Complex a), Int)+trttp = getTRTTP $ Class.switchReal (TRTTP C.trttp) (TRTTP Z.trttp)+++newtype TZRZF a = TZRZF {getTZRZF :: Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array ZeroInt (Complex a), Int)}++tzrzf :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array ZeroInt (Complex a), Int)+tzrzf = getTZRZF $ Class.switchReal (TZRZF C.tzrzf) (TZRZF Z.tzrzf)+++newtype UNBDB a = UNBDB {getUNBDB :: Char -> Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Array ZeroInt (Complex a), Array ZeroInt (Complex a), Array ZeroInt (Complex a), Array ZeroInt (Complex a), Int)}++unbdb :: Class.Real a => Char -> Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Array ZeroInt (Complex a), Array ZeroInt (Complex a), Array ZeroInt (Complex a), Array ZeroInt (Complex a), Int)+unbdb = getUNBDB $ Class.switchReal (UNBDB C.unbdb) (UNBDB Z.unbdb)+++newtype UNCSD a = UNCSD {getUNCSD :: Char -> Char -> Char -> Char -> Char -> Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> Int -> Int -> Int -> Int -> Int -> Int -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Int)}++uncsd :: Class.Real a => Char -> Char -> Char -> Char -> Char -> Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> Int -> Int -> Int -> Int -> Int -> Int -> Int -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Array (ZeroInt,ZeroInt) (Complex a), Int)+uncsd = getUNCSD $ Class.switchReal (UNCSD C.uncsd) (UNCSD Z.uncsd)+++newtype UNG2L a = UNG2L {getUNG2L :: Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> IO (Int)}++ung2l :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> IO (Int)+ung2l = getUNG2L $ Class.switchReal (UNG2L C.ung2l) (UNG2L Z.ung2l)+++newtype UNG2R a = UNG2R {getUNG2R :: Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> IO (Int)}++ung2r :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> IO (Int)+ung2r = getUNG2R $ Class.switchReal (UNG2R C.ung2r) (UNG2R Z.ung2r)+++newtype UNGBR a = UNGBR {getUNGBR :: Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> Int -> IO (Int)}++ungbr :: Class.Real a => Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> Int -> IO (Int)+ungbr = getUNGBR $ Class.switchReal (UNGBR C.ungbr) (UNGBR Z.ungbr)+++newtype UNGHR a = UNGHR {getUNGHR :: Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> Int -> IO (Int)}++unghr :: Class.Real a => Int -> Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> Int -> IO (Int)+unghr = getUNGHR $ Class.switchReal (UNGHR C.unghr) (UNGHR Z.unghr)+++newtype UNGL2 a = UNGL2 {getUNGL2 :: Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> IO (Int)}++ungl2 :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> IO (Int)+ungl2 = getUNGL2 $ Class.switchReal (UNGL2 C.ungl2) (UNGL2 Z.ungl2)+++newtype UNGLQ a = UNGLQ {getUNGLQ :: Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> Int -> IO (Int)}++unglq :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> Int -> IO (Int)+unglq = getUNGLQ $ Class.switchReal (UNGLQ C.unglq) (UNGLQ Z.unglq)+++newtype UNGQL a = UNGQL {getUNGQL :: Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> Int -> IO (Int)}++ungql :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> Int -> IO (Int)+ungql = getUNGQL $ Class.switchReal (UNGQL C.ungql) (UNGQL Z.ungql)+++newtype UNGQR a = UNGQR {getUNGQR :: Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> Int -> IO (Int)}++ungqr :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> Int -> IO (Int)+ungqr = getUNGQR $ Class.switchReal (UNGQR C.ungqr) (UNGQR Z.ungqr)+++newtype UNGR2 a = UNGR2 {getUNGR2 :: Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> IO (Int)}++ungr2 :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> IO (Int)+ungr2 = getUNGR2 $ Class.switchReal (UNGR2 C.ungr2) (UNGR2 Z.ungr2)+++newtype UNGRQ a = UNGRQ {getUNGRQ :: Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> Int -> IO (Int)}++ungrq :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> Int -> IO (Int)+ungrq = getUNGRQ $ Class.switchReal (UNGRQ C.ungrq) (UNGRQ Z.ungrq)+++newtype UNGTR a = UNGTR {getUNGTR :: Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> Int -> IO (Int)}++ungtr :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> Int -> IO (Int)+ungtr = getUNGTR $ Class.switchReal (UNGTR C.ungtr) (UNGTR Z.ungtr)+++newtype UNM2L a = UNM2L {getUNM2L :: Char -> Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Int)}++unm2l :: Class.Real a => Char -> Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Int)+unm2l = getUNM2L $ Class.switchReal (UNM2L C.unm2l) (UNM2L Z.unm2l)+++newtype UNM2R a = UNM2R {getUNM2R :: Char -> Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Int)}++unm2r :: Class.Real a => Char -> Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Int)+unm2r = getUNM2R $ Class.switchReal (UNM2R C.unm2r) (UNM2R Z.unm2r)+++newtype UNMBR a = UNMBR {getUNMBR :: Char -> Char -> Char -> Int -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Int)}++unmbr :: Class.Real a => Char -> Char -> Char -> Int -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Int)+unmbr = getUNMBR $ Class.switchReal (UNMBR C.unmbr) (UNMBR Z.unmbr)+++newtype UNMHR a = UNMHR {getUNMHR :: Char -> Char -> Int -> Int -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Int)}++unmhr :: Class.Real a => Char -> Char -> Int -> Int -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Int)+unmhr = getUNMHR $ Class.switchReal (UNMHR C.unmhr) (UNMHR Z.unmhr)+++newtype UNML2 a = UNML2 {getUNML2 :: Char -> Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Int)}++unml2 :: Class.Real a => Char -> Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Int)+unml2 = getUNML2 $ Class.switchReal (UNML2 C.unml2) (UNML2 Z.unml2)+++newtype UNMLQ a = UNMLQ {getUNMLQ :: Char -> Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Int)}++unmlq :: Class.Real a => Char -> Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Int)+unmlq = getUNMLQ $ Class.switchReal (UNMLQ C.unmlq) (UNMLQ Z.unmlq)+++newtype UNMQL a = UNMQL {getUNMQL :: Char -> Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Int)}++unmql :: Class.Real a => Char -> Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Int)+unmql = getUNMQL $ Class.switchReal (UNMQL C.unmql) (UNMQL Z.unmql)+++newtype UNMQR a = UNMQR {getUNMQR :: Char -> Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Int)}++unmqr :: Class.Real a => Char -> Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Int)+unmqr = getUNMQR $ Class.switchReal (UNMQR C.unmqr) (UNMQR Z.unmqr)+++newtype UNMR2 a = UNMR2 {getUNMR2 :: Char -> Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Int)}++unmr2 :: Class.Real a => Char -> Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Int)+unmr2 = getUNMR2 $ Class.switchReal (UNMR2 C.unmr2) (UNMR2 Z.unmr2)+++newtype UNMR3 a = UNMR3 {getUNMR3 :: Char -> Char -> Int -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Int)}++unmr3 :: Class.Real a => Char -> Char -> Int -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Int)+unmr3 = getUNMR3 $ Class.switchReal (UNMR3 C.unmr3) (UNMR3 Z.unmr3)+++newtype UNMRQ a = UNMRQ {getUNMRQ :: Char -> Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Int)}++unmrq :: Class.Real a => Char -> Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Int)+unmrq = getUNMRQ $ Class.switchReal (UNMRQ C.unmrq) (UNMRQ Z.unmrq)+++newtype UNMRZ a = UNMRZ {getUNMRZ :: Char -> Char -> Int -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Int)}++unmrz :: Class.Real a => Char -> Char -> Int -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Int)+unmrz = getUNMRZ $ Class.switchReal (UNMRZ C.unmrz) (UNMRZ Z.unmrz)+++newtype UNMTR a = UNMTR {getUNMTR :: Char -> Char -> Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Int)}++unmtr :: Class.Real a => Char -> Char -> Char -> Int -> Array (ZeroInt,ZeroInt) (Complex a) -> Array ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Int)+unmtr = getUNMTR $ Class.switchReal (UNMTR C.unmtr) (UNMTR Z.unmtr)+++newtype UPGTR a = UPGTR {getUPGTR :: Char -> Int -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> Int -> IO (Array (ZeroInt,ZeroInt) (Complex a), Int)}++upgtr :: Class.Real a => Char -> Int -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> Int -> IO (Array (ZeroInt,ZeroInt) (Complex a), Int)+upgtr = getUPGTR $ Class.switchReal (UPGTR C.upgtr) (UPGTR Z.upgtr)+++newtype UPMTR a = UPMTR {getUPMTR :: Char -> Char -> Char -> Int -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Int)}++upmtr :: Class.Real a => Char -> Char -> Char -> Int -> Array ZeroInt (Complex a) -> Array ZeroInt (Complex a) -> IOArray (ZeroInt,ZeroInt) (Complex a) -> Int -> IO (Int)+upmtr = getUPMTR $ Class.switchReal (UPMTR C.upmtr) (UPMTR Z.upmtr)
+ src/Numeric/LAPACK/ComfortArray/ComplexDouble.hs view
@@ -0,0 +1,12044 @@+-- Do not edit! Automatically generated by create-lapack-ffi.+module Numeric.LAPACK.ComfortArray.ComplexDouble where++import qualified Numeric.LAPACK.FFI.ComplexDouble as FFI+import qualified Numeric.Netlib.ComfortArray.Utility as Call+import Numeric.Netlib.ComfortArray.Utility (ZeroInt, (^!))++import qualified Data.Array.Comfort.Storable.Mutable as MutArray+import qualified Data.Array.Comfort.Storable as Array+import Data.Array.Comfort.Storable.Mutable (IOArray)+import Data.Array.Comfort.Storable (Array)++import Data.Complex (Complex)++import Foreign.Storable.Complex ()+import Foreign.Storable (peek)+import Foreign.Ptr (Ptr, FunPtr)+import Foreign.C.String (castCCharToChar)+import Foreign.C.Types (CInt)++import Control.Monad.Trans.Cont (evalContT)+import Control.Monad.IO.Class (liftIO)+import Control.Applicative (pure, (<*>))+++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zbbcsd.f>+bbcsd ::+   Char {- ^ jobu1 -} ->+   Char {- ^ jobu2 -} ->+   Char {- ^ jobv1t -} ->+   Char {- ^ jobv2t -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   IOArray ZeroInt Double {- ^ theta -} ->+   IOArray ZeroInt Double {- ^ phi -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ u1 -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ u2 -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ v1t -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ v2t -} ->+   Int {- ^ lrwork -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Int)+bbcsd jobu1 jobu2 jobv1t jobv2t trans m theta phi u1 u2 v1t v2t lrwork = do+   let thetaDim0 = Call.sizes1 $ MutArray.shape theta+   let phiDim0 = Call.sizes1 $ MutArray.shape phi+   let (u1Dim0,u1Dim1) = Call.sizes2 $ MutArray.shape u1+   let (u2Dim0,u2Dim1) = Call.sizes2 $ MutArray.shape u2+   let (v1tDim0,v1tDim1) = Call.sizes2 $ MutArray.shape v1t+   let (v2tDim0,v2tDim1) = Call.sizes2 $ MutArray.shape v2t+   let q = thetaDim0+   let p = u1Dim0+   let ldu1 = u1Dim1+   let ldu2 = u2Dim1+   let ldv1t = v1tDim1+   let ldv2t = v2tDim1+   Call.assert "bbcsd: q-1 == phiDim0" (q-1 == phiDim0)+   Call.assert "bbcsd: m-p == u2Dim0" (m-p == u2Dim0)+   Call.assert "bbcsd: q == v1tDim0" (q == v1tDim0)+   Call.assert "bbcsd: m-q == v2tDim0" (m-q == v2tDim0)+   b11d <- Call.newArray1 q+   b11e <- Call.newArray1 (q-1)+   b12d <- Call.newArray1 q+   b12e <- Call.newArray1 (q-1)+   b21d <- Call.newArray1 q+   b21e <- Call.newArray1 (q-1)+   b22d <- Call.newArray1 q+   b22e <- Call.newArray1 (q-1)+   rwork <- Call.newArray1 (maximum[1,lrwork])+   evalContT $ do+      jobu1Ptr <- Call.char jobu1+      jobu2Ptr <- Call.char jobu2+      jobv1tPtr <- Call.char jobv1t+      jobv2tPtr <- Call.char jobv2t+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      pPtr <- Call.cint p+      qPtr <- Call.cint q+      thetaPtr <- Call.ioarray theta+      phiPtr <- Call.ioarray phi+      u1Ptr <- Call.ioarray u1+      ldu1Ptr <- Call.cint ldu1+      u2Ptr <- Call.ioarray u2+      ldu2Ptr <- Call.cint ldu2+      v1tPtr <- Call.ioarray v1t+      ldv1tPtr <- Call.cint ldv1t+      v2tPtr <- Call.ioarray v2t+      ldv2tPtr <- Call.cint ldv2t+      b11dPtr <- Call.ioarray b11d+      b11ePtr <- Call.ioarray b11e+      b12dPtr <- Call.ioarray b12d+      b12ePtr <- Call.ioarray b12e+      b21dPtr <- Call.ioarray b21d+      b21ePtr <- Call.ioarray b21e+      b22dPtr <- Call.ioarray b22d+      b22ePtr <- Call.ioarray b22e+      rworkPtr <- Call.ioarray rwork+      lrworkPtr <- Call.cint lrwork+      infoPtr <- Call.alloca+      liftIO $ FFI.bbcsd jobu1Ptr jobu2Ptr jobv1tPtr jobv2tPtr transPtr mPtr pPtr qPtr thetaPtr phiPtr u1Ptr ldu1Ptr u2Ptr ldu2Ptr v1tPtr ldv1tPtr v2tPtr ldv2tPtr b11dPtr b11ePtr b12dPtr b12ePtr b21dPtr b21ePtr b22dPtr b22ePtr rworkPtr lrworkPtr infoPtr+      liftIO $ pure (,,,,,,,,)+         <*> Call.freezeArray b11d+         <*> Call.freezeArray b11e+         <*> Call.freezeArray b12d+         <*> Call.freezeArray b12e+         <*> Call.freezeArray b21d+         <*> Call.freezeArray b21e+         <*> Call.freezeArray b22d+         <*> Call.freezeArray b22e+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zbdsqr.f>+bdsqr ::+   Char {- ^ uplo -} ->+   Int {- ^ nru -} ->+   IOArray ZeroInt Double {- ^ d -} ->+   IOArray ZeroInt Double {- ^ e -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ vt -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ u -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ c -} ->+   IO (Int)+bdsqr uplo nru d e vt u c = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let (vtDim0,vtDim1) = Call.sizes2 $ MutArray.shape vt+   let (uDim0,uDim1) = Call.sizes2 $ MutArray.shape u+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let n = dDim0+   let ncvt = vtDim0+   let ldvt = vtDim1+   let ldu = uDim1+   let ncc = cDim0+   let ldc = cDim1+   Call.assert "bdsqr: n-1 == eDim0" (n-1 == eDim0)+   Call.assert "bdsqr: n == uDim0" (n == uDim0)+   rwork <- Call.newArray1 (4*n)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      ncvtPtr <- Call.cint ncvt+      nruPtr <- Call.cint nru+      nccPtr <- Call.cint ncc+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      vtPtr <- Call.ioarray vt+      ldvtPtr <- Call.cint ldvt+      uPtr <- Call.ioarray u+      lduPtr <- Call.cint ldu+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.bdsqr uploPtr nPtr ncvtPtr nruPtr nccPtr dPtr ePtr vtPtr ldvtPtr uPtr lduPtr cPtr ldcPtr rworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zcgesv.f>+cgesv ::+   Int {- ^ n -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   Int {- ^ ldx -} ->+   IO (Array ZeroInt CInt, Array (ZeroInt,ZeroInt) (Complex Double), Int, Int)+cgesv n a b ldx = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let _aSize = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   ipiv <- Call.newArray1 n+   x <- Call.newArray2 nrhs ldx+   work <- Call.newArray2 nrhs n+   swork <- Call.newArray1 (n*(n+nrhs))+   rwork <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.ioarray ipiv+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      workPtr <- Call.ioarray work+      sworkPtr <- Call.ioarray swork+      rworkPtr <- Call.ioarray rwork+      iterPtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.cgesv nPtr nrhsPtr aPtr ldaPtr ipivPtr bPtr ldbPtr xPtr ldxPtr workPtr sworkPtr rworkPtr iterPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray ipiv+         <*> Call.freezeArray x+         <*> fmap fromIntegral (peek iterPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zcposv.f>+cposv ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   Int {- ^ ldx -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Double), Int, Int)+cposv uplo n a b ldx = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let _aSize = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   x <- Call.newArray2 nrhs ldx+   work <- Call.newArray2 nrhs n+   swork <- Call.newArray1 (n*(n+nrhs))+   rwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      workPtr <- Call.ioarray work+      sworkPtr <- Call.ioarray swork+      rworkPtr <- Call.ioarray rwork+      iterPtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.cposv uploPtr nPtr nrhsPtr aPtr ldaPtr bPtr ldbPtr xPtr ldxPtr workPtr sworkPtr rworkPtr iterPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray x+         <*> fmap fromIntegral (peek iterPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgbbrd.f>+gbbrd ::+   Char {- ^ vect -} ->+   Int {- ^ m -} ->+   Int {- ^ kl -} ->+   Int {- ^ ku -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ ab -} ->+   Int {- ^ ldq -} ->+   Int {- ^ ldpt -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ c -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Array (ZeroInt,ZeroInt) (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Int)+gbbrd vect m kl ku ab ldq ldpt c = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let n = abDim0+   let ldab = abDim1+   let ncc = cDim0+   let ldc = cDim1+   d <- Call.newArray1 (minimum[m,n])+   e <- Call.newArray1 (minimum[m,n]-1)+   q <- Call.newArray2 m ldq+   pt <- Call.newArray2 n ldpt+   work <- Call.newArray1 (maximum[m,n])+   rwork <- Call.newArray1 (maximum[m,n])+   evalContT $ do+      vectPtr <- Call.char vect+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      nccPtr <- Call.cint ncc+      klPtr <- Call.cint kl+      kuPtr <- Call.cint ku+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      ptPtr <- Call.ioarray pt+      ldptPtr <- Call.cint ldpt+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gbbrd vectPtr mPtr nPtr nccPtr klPtr kuPtr abPtr ldabPtr dPtr ePtr qPtr ldqPtr ptPtr ldptPtr cPtr ldcPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,,,)+         <*> Call.freezeArray d+         <*> Call.freezeArray e+         <*> Call.freezeArray q+         <*> Call.freezeArray pt+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgbcon.f>+gbcon ::+   Char {- ^ norm -} ->+   Int {- ^ kl -} ->+   Int {- ^ ku -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ ab -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Double {- ^ anorm -} ->+   IO (Double, Int)+gbcon norm kl ku ab ipiv anorm = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = abDim0+   let ldab = abDim1+   Call.assert "gbcon: n == ipivDim0" (n == ipivDim0)+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      normPtr <- Call.char norm+      nPtr <- Call.cint n+      klPtr <- Call.cint kl+      kuPtr <- Call.cint ku+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      ipivPtr <- Call.array ipiv+      anormPtr <- Call.double anorm+      rcondPtr <- Call.alloca+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gbcon normPtr nPtr klPtr kuPtr abPtr ldabPtr ipivPtr anormPtr rcondPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,)+         <*> peek rcondPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgbequ.f>+gbequ ::+   Int {- ^ m -} ->+   Int {- ^ kl -} ->+   Int {- ^ ku -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ ab -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Double, Double, Double, Int)+gbequ m kl ku ab = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let n = abDim0+   let ldab = abDim1+   r <- Call.newArray1 m+   c <- Call.newArray1 n+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      klPtr <- Call.cint kl+      kuPtr <- Call.cint ku+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      rPtr <- Call.ioarray r+      cPtr <- Call.ioarray c+      rowcndPtr <- Call.alloca+      colcndPtr <- Call.alloca+      amaxPtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.gbequ mPtr nPtr klPtr kuPtr abPtr ldabPtr rPtr cPtr rowcndPtr colcndPtr amaxPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> Call.freezeArray r+         <*> Call.freezeArray c+         <*> peek rowcndPtr+         <*> peek colcndPtr+         <*> peek amaxPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgbequb.f>+gbequb ::+   Int {- ^ m -} ->+   Int {- ^ kl -} ->+   Int {- ^ ku -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ ab -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Double, Double, Double, Int)+gbequb m kl ku ab = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let n = abDim0+   let ldab = abDim1+   r <- Call.newArray1 m+   c <- Call.newArray1 n+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      klPtr <- Call.cint kl+      kuPtr <- Call.cint ku+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      rPtr <- Call.ioarray r+      cPtr <- Call.ioarray c+      rowcndPtr <- Call.alloca+      colcndPtr <- Call.alloca+      amaxPtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.gbequb mPtr nPtr klPtr kuPtr abPtr ldabPtr rPtr cPtr rowcndPtr colcndPtr amaxPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> Call.freezeArray r+         <*> Call.freezeArray c+         <*> peek rowcndPtr+         <*> peek colcndPtr+         <*> peek amaxPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgbrfs.f>+gbrfs ::+   Char {- ^ trans -} ->+   Int {- ^ kl -} ->+   Int {- ^ ku -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ ab -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ afb -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ x -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Int)+gbrfs trans kl ku ab afb ipiv b x = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let (afbDim0,afbDim1) = Call.sizes2 $ Array.shape afb+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (xDim0,xDim1) = Call.sizes2 $ MutArray.shape x+   let n = abDim0+   let ldab = abDim1+   let ldafb = afbDim1+   let nrhs = bDim0+   let ldb = bDim1+   let ldx = xDim1+   Call.assert "gbrfs: n == afbDim0" (n == afbDim0)+   Call.assert "gbrfs: n == ipivDim0" (n == ipivDim0)+   Call.assert "gbrfs: nrhs == xDim0" (nrhs == xDim0)+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      transPtr <- Call.char trans+      nPtr <- Call.cint n+      klPtr <- Call.cint kl+      kuPtr <- Call.cint ku+      nrhsPtr <- Call.cint nrhs+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      afbPtr <- Call.array afb+      ldafbPtr <- Call.cint ldafb+      ipivPtr <- Call.array ipiv+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gbrfs transPtr nPtr klPtr kuPtr nrhsPtr abPtr ldabPtr afbPtr ldafbPtr ipivPtr bPtr ldbPtr xPtr ldxPtr ferrPtr berrPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgbsv.f>+gbsv ::+   Int {- ^ kl -} ->+   Int {- ^ ku -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ ab -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   IO (Array ZeroInt CInt, Int)+gbsv kl ku ab b = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = abDim0+   let ldab = abDim1+   let nrhs = bDim0+   let ldb = bDim1+   ipiv <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      klPtr <- Call.cint kl+      kuPtr <- Call.cint ku+      nrhsPtr <- Call.cint nrhs+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      ipivPtr <- Call.ioarray ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.gbsv nPtr klPtr kuPtr nrhsPtr abPtr ldabPtr ipivPtr bPtr ldbPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgbsvx.f>+gbsvx ::+   Char {- ^ fact -} ->+   Char {- ^ trans -} ->+   Int {- ^ kl -} ->+   Int {- ^ ku -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ ab -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ afb -} ->+   IOArray ZeroInt CInt {- ^ ipiv -} ->+   Char {- ^ equed -} ->+   IOArray ZeroInt Double {- ^ r -} ->+   IOArray ZeroInt Double {- ^ c -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   Int {- ^ ldx -} ->+   IO (Char, Array (ZeroInt,ZeroInt) (Complex Double), Double, Array ZeroInt Double, Array ZeroInt Double, Int)+gbsvx fact trans kl ku ab afb ipiv equed r c b ldx = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let (afbDim0,afbDim1) = Call.sizes2 $ MutArray.shape afb+   let ipivDim0 = Call.sizes1 $ MutArray.shape ipiv+   let rDim0 = Call.sizes1 $ MutArray.shape r+   let cDim0 = Call.sizes1 $ MutArray.shape c+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = abDim0+   let ldab = abDim1+   let ldafb = afbDim1+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "gbsvx: n == afbDim0" (n == afbDim0)+   Call.assert "gbsvx: n == ipivDim0" (n == ipivDim0)+   Call.assert "gbsvx: n == rDim0" (n == rDim0)+   Call.assert "gbsvx: n == cDim0" (n == cDim0)+   x <- Call.newArray2 nrhs ldx+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      factPtr <- Call.char fact+      transPtr <- Call.char trans+      nPtr <- Call.cint n+      klPtr <- Call.cint kl+      kuPtr <- Call.cint ku+      nrhsPtr <- Call.cint nrhs+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      afbPtr <- Call.ioarray afb+      ldafbPtr <- Call.cint ldafb+      ipivPtr <- Call.ioarray ipiv+      equedPtr <- Call.char equed+      rPtr <- Call.ioarray r+      cPtr <- Call.ioarray c+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      rcondPtr <- Call.alloca+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gbsvx factPtr transPtr nPtr klPtr kuPtr nrhsPtr abPtr ldabPtr afbPtr ldafbPtr ipivPtr equedPtr rPtr cPtr bPtr ldbPtr xPtr ldxPtr rcondPtr ferrPtr berrPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> fmap castCCharToChar (peek equedPtr)+         <*> Call.freezeArray x+         <*> peek rcondPtr+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgbtf2.f>+gbtf2 ::+   Int {- ^ m -} ->+   Int {- ^ kl -} ->+   Int {- ^ ku -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ ab -} ->+   IO (Array ZeroInt CInt, Int)+gbtf2 m kl ku ab = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let n = abDim0+   let ldab = abDim1+   ipiv <- Call.newArray1 (minimum[m,n])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      klPtr <- Call.cint kl+      kuPtr <- Call.cint ku+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      ipivPtr <- Call.ioarray ipiv+      infoPtr <- Call.alloca+      liftIO $ FFI.gbtf2 mPtr nPtr klPtr kuPtr abPtr ldabPtr ipivPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgbtrf.f>+gbtrf ::+   Int {- ^ m -} ->+   Int {- ^ kl -} ->+   Int {- ^ ku -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ ab -} ->+   IO (Array ZeroInt CInt, Int)+gbtrf m kl ku ab = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let n = abDim0+   let ldab = abDim1+   ipiv <- Call.newArray1 (minimum[m,n])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      klPtr <- Call.cint kl+      kuPtr <- Call.cint ku+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      ipivPtr <- Call.ioarray ipiv+      infoPtr <- Call.alloca+      liftIO $ FFI.gbtrf mPtr nPtr klPtr kuPtr abPtr ldabPtr ipivPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgbtrs.f>+gbtrs ::+   Char {- ^ trans -} ->+   Int {- ^ kl -} ->+   Int {- ^ ku -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ ab -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   IO (Int)+gbtrs trans kl ku ab ipiv b = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = abDim0+   let ldab = abDim1+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "gbtrs: n == ipivDim0" (n == ipivDim0)+   evalContT $ do+      transPtr <- Call.char trans+      nPtr <- Call.cint n+      klPtr <- Call.cint kl+      kuPtr <- Call.cint ku+      nrhsPtr <- Call.cint nrhs+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      ipivPtr <- Call.array ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.gbtrs transPtr nPtr klPtr kuPtr nrhsPtr abPtr ldabPtr ipivPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgebak.f>+gebak ::+   Char {- ^ job -} ->+   Char {- ^ side -} ->+   Int {- ^ ilo -} ->+   Int {- ^ ihi -} ->+   Array ZeroInt Double {- ^ scale -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ v -} ->+   IO (Int)+gebak job side ilo ihi scale v = do+   let scaleDim0 = Call.sizes1 $ Array.shape scale+   let (vDim0,vDim1) = Call.sizes2 $ MutArray.shape v+   let n = scaleDim0+   let m = vDim0+   let ldv = vDim1+   evalContT $ do+      jobPtr <- Call.char job+      sidePtr <- Call.char side+      nPtr <- Call.cint n+      iloPtr <- Call.cint ilo+      ihiPtr <- Call.cint ihi+      scalePtr <- Call.array scale+      mPtr <- Call.cint m+      vPtr <- Call.ioarray v+      ldvPtr <- Call.cint ldv+      infoPtr <- Call.alloca+      liftIO $ FFI.gebak jobPtr sidePtr nPtr iloPtr ihiPtr scalePtr mPtr vPtr ldvPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgebal.f>+gebal ::+   Char {- ^ job -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IO (Int, Int, Array ZeroInt Double, Int)+gebal job a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   scale <- Call.newArray1 n+   evalContT $ do+      jobPtr <- Call.char job+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      iloPtr <- Call.alloca+      ihiPtr <- Call.alloca+      scalePtr <- Call.ioarray scale+      infoPtr <- Call.alloca+      liftIO $ FFI.gebal jobPtr nPtr aPtr ldaPtr iloPtr ihiPtr scalePtr infoPtr+      liftIO $ pure (,,,)+         <*> fmap fromIntegral (peek iloPtr)+         <*> fmap fromIntegral (peek ihiPtr)+         <*> Call.freezeArray scale+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgebd2.f>+gebd2 ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt (Complex Double), Array ZeroInt (Complex Double), Int)+gebd2 m a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   d <- Call.newArray1 (minimum[m,n])+   e <- Call.newArray1 (minimum[m,n]-1)+   tauq <- Call.newArray1 (minimum[m,n])+   taup <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 (maximum[m,n])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      tauqPtr <- Call.ioarray tauq+      taupPtr <- Call.ioarray taup+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.gebd2 mPtr nPtr aPtr ldaPtr dPtr ePtr tauqPtr taupPtr workPtr infoPtr+      liftIO $ pure (,,,,)+         <*> Call.freezeArray d+         <*> Call.freezeArray e+         <*> Call.freezeArray tauq+         <*> Call.freezeArray taup+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgebrd.f>+gebrd ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt (Complex Double), Array ZeroInt (Complex Double), Int)+gebrd m a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   d <- Call.newArray1 (minimum[m,n])+   e <- Call.newArray1 (minimum[m,n]-1)+   tauq <- Call.newArray1 (minimum[m,n])+   taup <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      tauqPtr <- Call.ioarray tauq+      taupPtr <- Call.ioarray taup+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gebrd mPtr nPtr aPtr ldaPtr dPtr ePtr tauqPtr taupPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,,,,)+         <*> Call.freezeArray d+         <*> Call.freezeArray e+         <*> Call.freezeArray tauq+         <*> Call.freezeArray taup+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgecon.f>+gecon ::+   Char {- ^ norm -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Double {- ^ anorm -} ->+   IO (Double, Int)+gecon norm a anorm = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 (2*n)+   evalContT $ do+      normPtr <- Call.char norm+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      anormPtr <- Call.double anorm+      rcondPtr <- Call.alloca+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gecon normPtr nPtr aPtr ldaPtr anormPtr rcondPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,)+         <*> peek rcondPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgeequ.f>+geequ ::+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Double, Double, Double, Int)+geequ m a = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   r <- Call.newArray1 m+   c <- Call.newArray1 n+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      rPtr <- Call.ioarray r+      cPtr <- Call.ioarray c+      rowcndPtr <- Call.alloca+      colcndPtr <- Call.alloca+      amaxPtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.geequ mPtr nPtr aPtr ldaPtr rPtr cPtr rowcndPtr colcndPtr amaxPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> Call.freezeArray r+         <*> Call.freezeArray c+         <*> peek rowcndPtr+         <*> peek colcndPtr+         <*> peek amaxPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgeequb.f>+geequb ::+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Double, Double, Double, Int)+geequb m a = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   r <- Call.newArray1 m+   c <- Call.newArray1 n+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      rPtr <- Call.ioarray r+      cPtr <- Call.ioarray c+      rowcndPtr <- Call.alloca+      colcndPtr <- Call.alloca+      amaxPtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.geequb mPtr nPtr aPtr ldaPtr rPtr cPtr rowcndPtr colcndPtr amaxPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> Call.freezeArray r+         <*> Call.freezeArray c+         <*> peek rowcndPtr+         <*> peek colcndPtr+         <*> peek amaxPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgees.f>+gees ::+   Char {- ^ jobvs -} ->+   Char {- ^ sort -} ->+   FunPtr (Ptr (Complex Double) -> IO Bool) {- ^ select -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Int {- ^ ldvs -} ->+   Int {- ^ lwork -} ->+   IO (Int, Array ZeroInt (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Int)+gees jobvs sort select a ldvs lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   w <- Call.newArray1 n+   vs <- Call.newArray2 n ldvs+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 n+   bwork <- Call.newArray1 n+   evalContT $ do+      jobvsPtr <- Call.char jobvs+      sortPtr <- Call.char sort+      selectPtr <- pure select+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      sdimPtr <- Call.alloca+      wPtr <- Call.ioarray w+      vsPtr <- Call.ioarray vs+      ldvsPtr <- Call.cint ldvs+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      bworkPtr <- Call.ioarray bwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gees jobvsPtr sortPtr selectPtr nPtr aPtr ldaPtr sdimPtr wPtr vsPtr ldvsPtr workPtr lworkPtr rworkPtr bworkPtr infoPtr+      liftIO $ pure (,,,)+         <*> fmap fromIntegral (peek sdimPtr)+         <*> Call.freezeArray w+         <*> Call.freezeArray vs+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgeesx.f>+geesx ::+   Char {- ^ jobvs -} ->+   Char {- ^ sort -} ->+   FunPtr (Ptr (Complex Double) -> IO Bool) {- ^ select -} ->+   Char {- ^ sense -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Int {- ^ ldvs -} ->+   Int {- ^ lwork -} ->+   IO (Int, Array ZeroInt (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Double, Double, Int)+geesx jobvs sort select sense a ldvs lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   w <- Call.newArray1 n+   vs <- Call.newArray2 n ldvs+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 n+   bwork <- Call.newArray1 n+   evalContT $ do+      jobvsPtr <- Call.char jobvs+      sortPtr <- Call.char sort+      selectPtr <- pure select+      sensePtr <- Call.char sense+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      sdimPtr <- Call.alloca+      wPtr <- Call.ioarray w+      vsPtr <- Call.ioarray vs+      ldvsPtr <- Call.cint ldvs+      rcondePtr <- Call.alloca+      rcondvPtr <- Call.alloca+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      bworkPtr <- Call.ioarray bwork+      infoPtr <- Call.alloca+      liftIO $ FFI.geesx jobvsPtr sortPtr selectPtr sensePtr nPtr aPtr ldaPtr sdimPtr wPtr vsPtr ldvsPtr rcondePtr rcondvPtr workPtr lworkPtr rworkPtr bworkPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> fmap fromIntegral (peek sdimPtr)+         <*> Call.freezeArray w+         <*> Call.freezeArray vs+         <*> peek rcondePtr+         <*> peek rcondvPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgeev.f>+geev ::+   Char {- ^ jobvl -} ->+   Char {- ^ jobvr -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Int {- ^ ldvl -} ->+   Int {- ^ ldvr -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Int)+geev jobvl jobvr a ldvl ldvr lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   w <- Call.newArray1 n+   vl <- Call.newArray2 n ldvl+   vr <- Call.newArray2 n ldvr+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 (2*n)+   evalContT $ do+      jobvlPtr <- Call.char jobvl+      jobvrPtr <- Call.char jobvr+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      wPtr <- Call.ioarray w+      vlPtr <- Call.ioarray vl+      ldvlPtr <- Call.cint ldvl+      vrPtr <- Call.ioarray vr+      ldvrPtr <- Call.cint ldvr+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.geev jobvlPtr jobvrPtr nPtr aPtr ldaPtr wPtr vlPtr ldvlPtr vrPtr ldvrPtr workPtr lworkPtr rworkPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray w+         <*> Call.freezeArray vl+         <*> Call.freezeArray vr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgeevx.f>+geevx ::+   Char {- ^ balanc -} ->+   Char {- ^ jobvl -} ->+   Char {- ^ jobvr -} ->+   Char {- ^ sense -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Int {- ^ ldvl -} ->+   Int {- ^ ldvr -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Int, Int, Array ZeroInt Double, Double, Array ZeroInt Double, Array ZeroInt Double, Int)+geevx balanc jobvl jobvr sense a ldvl ldvr lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   w <- Call.newArray1 n+   vl <- Call.newArray2 n ldvl+   vr <- Call.newArray2 n ldvr+   scale <- Call.newArray1 n+   rconde <- Call.newArray1 n+   rcondv <- Call.newArray1 n+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 (2*n)+   evalContT $ do+      balancPtr <- Call.char balanc+      jobvlPtr <- Call.char jobvl+      jobvrPtr <- Call.char jobvr+      sensePtr <- Call.char sense+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      wPtr <- Call.ioarray w+      vlPtr <- Call.ioarray vl+      ldvlPtr <- Call.cint ldvl+      vrPtr <- Call.ioarray vr+      ldvrPtr <- Call.cint ldvr+      iloPtr <- Call.alloca+      ihiPtr <- Call.alloca+      scalePtr <- Call.ioarray scale+      abnrmPtr <- Call.alloca+      rcondePtr <- Call.ioarray rconde+      rcondvPtr <- Call.ioarray rcondv+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.geevx balancPtr jobvlPtr jobvrPtr sensePtr nPtr aPtr ldaPtr wPtr vlPtr ldvlPtr vrPtr ldvrPtr iloPtr ihiPtr scalePtr abnrmPtr rcondePtr rcondvPtr workPtr lworkPtr rworkPtr infoPtr+      liftIO $ pure (,,,,,,,,,)+         <*> Call.freezeArray w+         <*> Call.freezeArray vl+         <*> Call.freezeArray vr+         <*> fmap fromIntegral (peek iloPtr)+         <*> fmap fromIntegral (peek ihiPtr)+         <*> Call.freezeArray scale+         <*> peek abnrmPtr+         <*> Call.freezeArray rconde+         <*> Call.freezeArray rcondv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgehd2.f>+gehd2 ::+   Int {- ^ ilo -} ->+   Int {- ^ ihi -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IO (Array ZeroInt (Complex Double), Int)+gehd2 ilo ihi a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 (n-1)+   work <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      iloPtr <- Call.cint ilo+      ihiPtr <- Call.cint ihi+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.gehd2 nPtr iloPtr ihiPtr aPtr ldaPtr tauPtr workPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgehrd.f>+gehrd ::+   Int {- ^ ilo -} ->+   Int {- ^ ihi -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt (Complex Double), Int)+gehrd ilo ihi a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 (n-1)+   work <- Call.newArray1 lwork+   evalContT $ do+      nPtr <- Call.cint n+      iloPtr <- Call.cint ilo+      ihiPtr <- Call.cint ihi+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gehrd nPtr iloPtr ihiPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgelq2.f>+gelq2 ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IO (Array ZeroInt (Complex Double), Int)+gelq2 m a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 m+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.gelq2 mPtr nPtr aPtr ldaPtr tauPtr workPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgelqf.f>+gelqf ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt (Complex Double), Int)+gelqf m a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gelqf mPtr nPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgels.f>+gels ::+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   Int {- ^ lwork -} ->+   IO (Int)+gels trans m a b lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gels transPtr mPtr nPtr nrhsPtr aPtr ldaPtr bPtr ldbPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgelsd.f>+gelsd ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   Double {- ^ rcond -} ->+   Int {- ^ lwork -} ->+   Int {- ^ lrwork -} ->+   Int {- ^ liwork -} ->+   IO (Array ZeroInt Double, Int, Int)+gelsd m a b rcond lwork lrwork liwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   s <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 (maximum[1,lrwork])+   iwork <- Call.newArray1 (maximum[1,liwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      sPtr <- Call.ioarray s+      rcondPtr <- Call.double rcond+      rankPtr <- Call.alloca+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gelsd mPtr nPtr nrhsPtr aPtr ldaPtr bPtr ldbPtr sPtr rcondPtr rankPtr workPtr lworkPtr rworkPtr iworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray s+         <*> fmap fromIntegral (peek rankPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgelss.f>+gelss ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   Double {- ^ rcond -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Double, Int, Int)+gelss m a b rcond lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   s <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 (5*minimum[m,n])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      sPtr <- Call.ioarray s+      rcondPtr <- Call.double rcond+      rankPtr <- Call.alloca+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gelss mPtr nPtr nrhsPtr aPtr ldaPtr bPtr ldbPtr sPtr rcondPtr rankPtr workPtr lworkPtr rworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray s+         <*> fmap fromIntegral (peek rankPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgelsy.f>+gelsy ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   IOArray ZeroInt CInt {- ^ jpvt -} ->+   Double {- ^ rcond -} ->+   Int {- ^ lwork -} ->+   IO (Int, Int)+gelsy m a b jpvt rcond lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let jpvtDim0 = Call.sizes1 $ MutArray.shape jpvt+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "gelsy: n == jpvtDim0" (n == jpvtDim0)+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 (2*n)+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      jpvtPtr <- Call.ioarray jpvt+      rcondPtr <- Call.double rcond+      rankPtr <- Call.alloca+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gelsy mPtr nPtr nrhsPtr aPtr ldaPtr bPtr ldbPtr jpvtPtr rcondPtr rankPtr workPtr lworkPtr rworkPtr infoPtr+      liftIO $ pure (,)+         <*> fmap fromIntegral (peek rankPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgeql2.f>+geql2 ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IO (Array ZeroInt (Complex Double), Int)+geql2 m a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 n+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.geql2 mPtr nPtr aPtr ldaPtr tauPtr workPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgeqlf.f>+geqlf ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt (Complex Double), Int)+geqlf m a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.geqlf mPtr nPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgeqp3.f>+geqp3 ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IOArray ZeroInt CInt {- ^ jpvt -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt (Complex Double), Int)+geqp3 m a jpvt lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let jpvtDim0 = Call.sizes1 $ MutArray.shape jpvt+   let n = aDim0+   let lda = aDim1+   Call.assert "geqp3: n == jpvtDim0" (n == jpvtDim0)+   tau <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 (2*n)+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      jpvtPtr <- Call.ioarray jpvt+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.geqp3 mPtr nPtr aPtr ldaPtr jpvtPtr tauPtr workPtr lworkPtr rworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgeqr2.f>+geqr2 ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IO (Array ZeroInt (Complex Double), Int)+geqr2 m a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 n+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.geqr2 mPtr nPtr aPtr ldaPtr tauPtr workPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgeqr2p.f>+geqr2p ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IO (Array ZeroInt (Complex Double), Int)+geqr2p m a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 n+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.geqr2p mPtr nPtr aPtr ldaPtr tauPtr workPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgeqrf.f>+geqrf ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt (Complex Double), Int)+geqrf m a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.geqrf mPtr nPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgeqrfp.f>+geqrfp ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt (Complex Double), Int)+geqrfp m a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.geqrfp mPtr nPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgerfs.f>+gerfs ::+   Char {- ^ trans -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ af -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ x -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Int)+gerfs trans a af ipiv b x = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (afDim0,afDim1) = Call.sizes2 $ Array.shape af+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (xDim0,xDim1) = Call.sizes2 $ MutArray.shape x+   let n = aDim0+   let lda = aDim1+   let ldaf = afDim1+   let nrhs = bDim0+   let ldb = bDim1+   let ldx = xDim1+   Call.assert "gerfs: n == afDim0" (n == afDim0)+   Call.assert "gerfs: n == ipivDim0" (n == ipivDim0)+   Call.assert "gerfs: nrhs == xDim0" (nrhs == xDim0)+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      transPtr <- Call.char trans+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      afPtr <- Call.array af+      ldafPtr <- Call.cint ldaf+      ipivPtr <- Call.array ipiv+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gerfs transPtr nPtr nrhsPtr aPtr ldaPtr afPtr ldafPtr ipivPtr bPtr ldbPtr xPtr ldxPtr ferrPtr berrPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgerq2.f>+gerq2 ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IO (Array ZeroInt (Complex Double), Int)+gerq2 m a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 m+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.gerq2 mPtr nPtr aPtr ldaPtr tauPtr workPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgerqf.f>+gerqf ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt (Complex Double), Int)+gerqf m a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gerqf mPtr nPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgesc2.f>+gesc2 ::+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IOArray ZeroInt (Complex Double) {- ^ rhs -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Array ZeroInt CInt {- ^ jpiv -} ->+   IO (Double)+gesc2 a rhs ipiv jpiv = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let rhsDim0 = Call.sizes1 $ MutArray.shape rhs+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let jpivDim0 = Call.sizes1 $ Array.shape jpiv+   let n = aDim0+   let lda = aDim1+   let _rhsSize = rhsDim0+   Call.assert "gesc2: n == ipivDim0" (n == ipivDim0)+   Call.assert "gesc2: n == jpivDim0" (n == jpivDim0)+   evalContT $ do+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      rhsPtr <- Call.ioarray rhs+      ipivPtr <- Call.array ipiv+      jpivPtr <- Call.array jpiv+      scalePtr <- Call.alloca+      liftIO $ FFI.gesc2 nPtr aPtr ldaPtr rhsPtr ipivPtr jpivPtr scalePtr+      liftIO $ peek scalePtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgesdd.f>+gesdd ::+   Char {- ^ jobz -} ->+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Int {- ^ ucol -} ->+   Int {- ^ ldu -} ->+   Int {- ^ ldvt -} ->+   Int {- ^ lwork -} ->+   Int {- ^ lrwork -} ->+   IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Int)+gesdd jobz m a ucol ldu ldvt lwork lrwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   s <- Call.newArray1 (minimum[m,n])+   u <- Call.newArray2 ucol ldu+   vt <- Call.newArray2 n ldvt+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 (maximum[1,lrwork])+   iwork <- Call.newArray1 (8*minimum[m,n])+   evalContT $ do+      jobzPtr <- Call.char jobz+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      sPtr <- Call.ioarray s+      uPtr <- Call.ioarray u+      lduPtr <- Call.cint ldu+      vtPtr <- Call.ioarray vt+      ldvtPtr <- Call.cint ldvt+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gesdd jobzPtr mPtr nPtr aPtr ldaPtr sPtr uPtr lduPtr vtPtr ldvtPtr workPtr lworkPtr rworkPtr iworkPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray s+         <*> Call.freezeArray u+         <*> Call.freezeArray vt+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgesv.f>+gesv ::+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   IO (Array ZeroInt CInt, Int)+gesv a b = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   ipiv <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.ioarray ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.gesv nPtr nrhsPtr aPtr ldaPtr ipivPtr bPtr ldbPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgesvd.f>+gesvd ::+   Char {- ^ jobu -} ->+   Char {- ^ jobvt -} ->+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Int {- ^ ucol -} ->+   Int {- ^ ldu -} ->+   Int {- ^ ldvt -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Int)+gesvd jobu jobvt m a ucol ldu ldvt lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   s <- Call.newArray1 (minimum[m,n])+   u <- Call.newArray2 ucol ldu+   vt <- Call.newArray2 n ldvt+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 (5*minimum[m,n])+   evalContT $ do+      jobuPtr <- Call.char jobu+      jobvtPtr <- Call.char jobvt+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      sPtr <- Call.ioarray s+      uPtr <- Call.ioarray u+      lduPtr <- Call.cint ldu+      vtPtr <- Call.ioarray vt+      ldvtPtr <- Call.cint ldvt+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gesvd jobuPtr jobvtPtr mPtr nPtr aPtr ldaPtr sPtr uPtr lduPtr vtPtr ldvtPtr workPtr lworkPtr rworkPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray s+         <*> Call.freezeArray u+         <*> Call.freezeArray vt+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgesvx.f>+gesvx ::+   Char {- ^ fact -} ->+   Char {- ^ trans -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ af -} ->+   IOArray ZeroInt CInt {- ^ ipiv -} ->+   Char {- ^ equed -} ->+   IOArray ZeroInt Double {- ^ r -} ->+   IOArray ZeroInt Double {- ^ c -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   Int {- ^ ldx -} ->+   IO (Char, Array (ZeroInt,ZeroInt) (Complex Double), Double, Array ZeroInt Double, Array ZeroInt Double, Int)+gesvx fact trans a af ipiv equed r c b ldx = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (afDim0,afDim1) = Call.sizes2 $ MutArray.shape af+   let ipivDim0 = Call.sizes1 $ MutArray.shape ipiv+   let rDim0 = Call.sizes1 $ MutArray.shape r+   let cDim0 = Call.sizes1 $ MutArray.shape c+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let ldaf = afDim1+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "gesvx: n == afDim0" (n == afDim0)+   Call.assert "gesvx: n == ipivDim0" (n == ipivDim0)+   Call.assert "gesvx: n == rDim0" (n == rDim0)+   Call.assert "gesvx: n == cDim0" (n == cDim0)+   x <- Call.newArray2 nrhs ldx+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 (2*n)+   evalContT $ do+      factPtr <- Call.char fact+      transPtr <- Call.char trans+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      afPtr <- Call.ioarray af+      ldafPtr <- Call.cint ldaf+      ipivPtr <- Call.ioarray ipiv+      equedPtr <- Call.char equed+      rPtr <- Call.ioarray r+      cPtr <- Call.ioarray c+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      rcondPtr <- Call.alloca+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gesvx factPtr transPtr nPtr nrhsPtr aPtr ldaPtr afPtr ldafPtr ipivPtr equedPtr rPtr cPtr bPtr ldbPtr xPtr ldxPtr rcondPtr ferrPtr berrPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> fmap castCCharToChar (peek equedPtr)+         <*> Call.freezeArray x+         <*> peek rcondPtr+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgetc2.f>+getc2 ::+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IO (Array ZeroInt CInt, Array ZeroInt CInt, Int)+getc2 a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   ipiv <- Call.newArray1 n+   jpiv <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.ioarray ipiv+      jpivPtr <- Call.ioarray jpiv+      infoPtr <- Call.alloca+      liftIO $ FFI.getc2 nPtr aPtr ldaPtr ipivPtr jpivPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ipiv+         <*> Call.freezeArray jpiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgetf2.f>+getf2 ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IO (Array ZeroInt CInt, Int)+getf2 m a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   ipiv <- Call.newArray1 (minimum[m,n])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.ioarray ipiv+      infoPtr <- Call.alloca+      liftIO $ FFI.getf2 mPtr nPtr aPtr ldaPtr ipivPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgetrf.f>+getrf ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IO (Array ZeroInt CInt, Int)+getrf m a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   ipiv <- Call.newArray1 (minimum[m,n])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.ioarray ipiv+      infoPtr <- Call.alloca+      liftIO $ FFI.getrf mPtr nPtr aPtr ldaPtr ipivPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgetri.f>+getri ::+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Int {- ^ lwork -} ->+   IO (Int)+getri a ipiv lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = aDim0+   let lda = aDim1+   Call.assert "getri: n == ipivDim0" (n == ipivDim0)+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.array ipiv+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.getri nPtr aPtr ldaPtr ipivPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgetrs.f>+getrs ::+   Char {- ^ trans -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   IO (Int)+getrs trans a ipiv b = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "getrs: n == ipivDim0" (n == ipivDim0)+   evalContT $ do+      transPtr <- Call.char trans+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.array ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.getrs transPtr nPtr nrhsPtr aPtr ldaPtr ipivPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zggbak.f>+ggbak ::+   Char {- ^ job -} ->+   Char {- ^ side -} ->+   Int {- ^ ilo -} ->+   Int {- ^ ihi -} ->+   Array ZeroInt Double {- ^ lscale -} ->+   Array ZeroInt Double {- ^ rscale -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ v -} ->+   IO (Int)+ggbak job side ilo ihi lscale rscale v = do+   let lscaleDim0 = Call.sizes1 $ Array.shape lscale+   let rscaleDim0 = Call.sizes1 $ Array.shape rscale+   let (vDim0,vDim1) = Call.sizes2 $ MutArray.shape v+   let n = lscaleDim0+   let m = vDim0+   let ldv = vDim1+   Call.assert "ggbak: n == rscaleDim0" (n == rscaleDim0)+   evalContT $ do+      jobPtr <- Call.char job+      sidePtr <- Call.char side+      nPtr <- Call.cint n+      iloPtr <- Call.cint ilo+      ihiPtr <- Call.cint ihi+      lscalePtr <- Call.array lscale+      rscalePtr <- Call.array rscale+      mPtr <- Call.cint m+      vPtr <- Call.ioarray v+      ldvPtr <- Call.cint ldv+      infoPtr <- Call.alloca+      liftIO $ FFI.ggbak jobPtr sidePtr nPtr iloPtr ihiPtr lscalePtr rscalePtr mPtr vPtr ldvPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zggbal.f>+ggbal ::+   Char {- ^ job -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   Int {- ^ lwork -} ->+   IO (Int, Int, Array ZeroInt Double, Array ZeroInt Double, Int)+ggbal job a b lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   Call.assert "ggbal: n == bDim0" (n == bDim0)+   lscale <- Call.newArray1 n+   rscale <- Call.newArray1 n+   work <- Call.newArray1 lwork+   evalContT $ do+      jobPtr <- Call.char job+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      iloPtr <- Call.alloca+      ihiPtr <- Call.alloca+      lscalePtr <- Call.ioarray lscale+      rscalePtr <- Call.ioarray rscale+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.ggbal jobPtr nPtr aPtr ldaPtr bPtr ldbPtr iloPtr ihiPtr lscalePtr rscalePtr workPtr infoPtr+      liftIO $ pure (,,,,)+         <*> fmap fromIntegral (peek iloPtr)+         <*> fmap fromIntegral (peek ihiPtr)+         <*> Call.freezeArray lscale+         <*> Call.freezeArray rscale+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgges.f>+gges ::+   Char {- ^ jobvsl -} ->+   Char {- ^ jobvsr -} ->+   Char {- ^ sort -} ->+   FunPtr (Ptr (Complex Double) -> Ptr (Complex Double) -> IO Bool) {- ^ selctg -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   Int {- ^ ldvsl -} ->+   Int {- ^ ldvsr -} ->+   Int {- ^ lwork -} ->+   IO (Int, Array ZeroInt (Complex Double), Array ZeroInt (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Int)+gges jobvsl jobvsr sort selctg a b ldvsl ldvsr lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   Call.assert "gges: n == bDim0" (n == bDim0)+   alpha <- Call.newArray1 n+   beta <- Call.newArray1 n+   vsl <- Call.newArray2 n ldvsl+   vsr <- Call.newArray2 n ldvsr+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 (8*n)+   bwork <- Call.newArray1 n+   evalContT $ do+      jobvslPtr <- Call.char jobvsl+      jobvsrPtr <- Call.char jobvsr+      sortPtr <- Call.char sort+      selctgPtr <- pure selctg+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      sdimPtr <- Call.alloca+      alphaPtr <- Call.ioarray alpha+      betaPtr <- Call.ioarray beta+      vslPtr <- Call.ioarray vsl+      ldvslPtr <- Call.cint ldvsl+      vsrPtr <- Call.ioarray vsr+      ldvsrPtr <- Call.cint ldvsr+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      bworkPtr <- Call.ioarray bwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gges jobvslPtr jobvsrPtr sortPtr selctgPtr nPtr aPtr ldaPtr bPtr ldbPtr sdimPtr alphaPtr betaPtr vslPtr ldvslPtr vsrPtr ldvsrPtr workPtr lworkPtr rworkPtr bworkPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> fmap fromIntegral (peek sdimPtr)+         <*> Call.freezeArray alpha+         <*> Call.freezeArray beta+         <*> Call.freezeArray vsl+         <*> Call.freezeArray vsr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zggesx.f>+ggesx ::+   Char {- ^ jobvsl -} ->+   Char {- ^ jobvsr -} ->+   Char {- ^ sort -} ->+   FunPtr (Ptr (Complex Double) -> Ptr (Complex Double) -> IO Bool) {- ^ selctg -} ->+   Char {- ^ sense -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   Int {- ^ ldvsl -} ->+   Int {- ^ ldvsr -} ->+   Int {- ^ lwork -} ->+   Int {- ^ liwork -} ->+   IO (Int, Array ZeroInt (Complex Double), Array ZeroInt (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Array ZeroInt Double, Array ZeroInt Double, Int)+ggesx jobvsl jobvsr sort selctg sense a b ldvsl ldvsr lwork liwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   Call.assert "ggesx: n == bDim0" (n == bDim0)+   alpha <- Call.newArray1 n+   beta <- Call.newArray1 n+   vsl <- Call.newArray2 n ldvsl+   vsr <- Call.newArray2 n ldvsr+   rconde <- Call.newArray1 2+   rcondv <- Call.newArray1 2+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 (8*n)+   iwork <- Call.newArray1 (maximum[1,liwork])+   bwork <- Call.newArray1 n+   evalContT $ do+      jobvslPtr <- Call.char jobvsl+      jobvsrPtr <- Call.char jobvsr+      sortPtr <- Call.char sort+      selctgPtr <- pure selctg+      sensePtr <- Call.char sense+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      sdimPtr <- Call.alloca+      alphaPtr <- Call.ioarray alpha+      betaPtr <- Call.ioarray beta+      vslPtr <- Call.ioarray vsl+      ldvslPtr <- Call.cint ldvsl+      vsrPtr <- Call.ioarray vsr+      ldvsrPtr <- Call.cint ldvsr+      rcondePtr <- Call.ioarray rconde+      rcondvPtr <- Call.ioarray rcondv+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      bworkPtr <- Call.ioarray bwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ggesx jobvslPtr jobvsrPtr sortPtr selctgPtr sensePtr nPtr aPtr ldaPtr bPtr ldbPtr sdimPtr alphaPtr betaPtr vslPtr ldvslPtr vsrPtr ldvsrPtr rcondePtr rcondvPtr workPtr lworkPtr rworkPtr iworkPtr liworkPtr bworkPtr infoPtr+      liftIO $ pure (,,,,,,,)+         <*> fmap fromIntegral (peek sdimPtr)+         <*> Call.freezeArray alpha+         <*> Call.freezeArray beta+         <*> Call.freezeArray vsl+         <*> Call.freezeArray vsr+         <*> Call.freezeArray rconde+         <*> Call.freezeArray rcondv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zggev.f>+ggev ::+   Char {- ^ jobvl -} ->+   Char {- ^ jobvr -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   Int {- ^ ldvl -} ->+   Int {- ^ ldvr -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Int)+ggev jobvl jobvr a b ldvl ldvr lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   Call.assert "ggev: n == bDim0" (n == bDim0)+   alpha <- Call.newArray1 n+   beta <- Call.newArray1 n+   vl <- Call.newArray2 n ldvl+   vr <- Call.newArray2 n ldvr+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 (8*n)+   evalContT $ do+      jobvlPtr <- Call.char jobvl+      jobvrPtr <- Call.char jobvr+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      alphaPtr <- Call.ioarray alpha+      betaPtr <- Call.ioarray beta+      vlPtr <- Call.ioarray vl+      ldvlPtr <- Call.cint ldvl+      vrPtr <- Call.ioarray vr+      ldvrPtr <- Call.cint ldvr+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ggev jobvlPtr jobvrPtr nPtr aPtr ldaPtr bPtr ldbPtr alphaPtr betaPtr vlPtr ldvlPtr vrPtr ldvrPtr workPtr lworkPtr rworkPtr infoPtr+      liftIO $ pure (,,,,)+         <*> Call.freezeArray alpha+         <*> Call.freezeArray beta+         <*> Call.freezeArray vl+         <*> Call.freezeArray vr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zggevx.f>+ggevx ::+   Char {- ^ balanc -} ->+   Char {- ^ jobvl -} ->+   Char {- ^ jobvr -} ->+   Char {- ^ sense -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   Int {- ^ ldvl -} ->+   Int {- ^ ldvr -} ->+   Int {- ^ lwork -} ->+   Int {- ^ lrwork -} ->+   IO (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Int, Int, Array ZeroInt Double, Array ZeroInt Double, Double, Double, Array ZeroInt Double, Array ZeroInt Double, Int)+ggevx balanc jobvl jobvr sense a b ldvl ldvr lwork lrwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   Call.assert "ggevx: n == bDim0" (n == bDim0)+   alpha <- Call.newArray1 n+   beta <- Call.newArray1 n+   vl <- Call.newArray2 n ldvl+   vr <- Call.newArray2 n ldvr+   lscale <- Call.newArray1 n+   rscale <- Call.newArray1 n+   rconde <- Call.newArray1 n+   rcondv <- Call.newArray1 n+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 lrwork+   iwork <- Call.newArray1 (n+2)+   bwork <- Call.newArray1 n+   evalContT $ do+      balancPtr <- Call.char balanc+      jobvlPtr <- Call.char jobvl+      jobvrPtr <- Call.char jobvr+      sensePtr <- Call.char sense+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      alphaPtr <- Call.ioarray alpha+      betaPtr <- Call.ioarray beta+      vlPtr <- Call.ioarray vl+      ldvlPtr <- Call.cint ldvl+      vrPtr <- Call.ioarray vr+      ldvrPtr <- Call.cint ldvr+      iloPtr <- Call.alloca+      ihiPtr <- Call.alloca+      lscalePtr <- Call.ioarray lscale+      rscalePtr <- Call.ioarray rscale+      abnrmPtr <- Call.alloca+      bbnrmPtr <- Call.alloca+      rcondePtr <- Call.ioarray rconde+      rcondvPtr <- Call.ioarray rcondv+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      iworkPtr <- Call.ioarray iwork+      bworkPtr <- Call.ioarray bwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ggevx balancPtr jobvlPtr jobvrPtr sensePtr nPtr aPtr ldaPtr bPtr ldbPtr alphaPtr betaPtr vlPtr ldvlPtr vrPtr ldvrPtr iloPtr ihiPtr lscalePtr rscalePtr abnrmPtr bbnrmPtr rcondePtr rcondvPtr workPtr lworkPtr rworkPtr iworkPtr bworkPtr infoPtr+      liftIO $ pure (,,,,,,,,,,,,)+         <*> Call.freezeArray alpha+         <*> Call.freezeArray beta+         <*> Call.freezeArray vl+         <*> Call.freezeArray vr+         <*> fmap fromIntegral (peek iloPtr)+         <*> fmap fromIntegral (peek ihiPtr)+         <*> Call.freezeArray lscale+         <*> Call.freezeArray rscale+         <*> peek abnrmPtr+         <*> peek bbnrmPtr+         <*> Call.freezeArray rconde+         <*> Call.freezeArray rcondv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zggglm.f>+ggglm ::+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   IOArray ZeroInt (Complex Double) {- ^ d -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double), Int)+ggglm a b d lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let m = aDim0+   let lda = aDim1+   let p = bDim0+   let ldb = bDim1+   let n = dDim0+   x <- Call.newArray1 m+   y <- Call.newArray1 p+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      nPtr <- Call.cint n+      mPtr <- Call.cint m+      pPtr <- Call.cint p+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      dPtr <- Call.ioarray d+      xPtr <- Call.ioarray x+      yPtr <- Call.ioarray y+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ggglm nPtr mPtr pPtr aPtr ldaPtr bPtr ldbPtr dPtr xPtr yPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray x+         <*> Call.freezeArray y+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgghrd.f>+gghrd ::+   Char {- ^ compq -} ->+   Char {- ^ compz -} ->+   Int {- ^ ilo -} ->+   Int {- ^ ihi -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ q -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ z -} ->+   IO (Int)+gghrd compq compz ilo ihi a b q z = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   let ldq = qDim1+   let ldz = zDim1+   Call.assert "gghrd: n == bDim0" (n == bDim0)+   Call.assert "gghrd: n == qDim0" (n == qDim0)+   Call.assert "gghrd: n == zDim0" (n == zDim0)+   evalContT $ do+      compqPtr <- Call.char compq+      compzPtr <- Call.char compz+      nPtr <- Call.cint n+      iloPtr <- Call.cint ilo+      ihiPtr <- Call.cint ihi+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      infoPtr <- Call.alloca+      liftIO $ FFI.gghrd compqPtr compzPtr nPtr iloPtr ihiPtr aPtr ldaPtr bPtr ldbPtr qPtr ldqPtr zPtr ldzPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgglse.f>+gglse ::+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   IOArray ZeroInt (Complex Double) {- ^ c -} ->+   IOArray ZeroInt (Complex Double) {- ^ d -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt (Complex Double), Int)+gglse a b c d lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let cDim0 = Call.sizes1 $ MutArray.shape c+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   let m = cDim0+   let p = dDim0+   Call.assert "gglse: n == bDim0" (n == bDim0)+   x <- Call.newArray1 n+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      pPtr <- Call.cint p+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      cPtr <- Call.ioarray c+      dPtr <- Call.ioarray d+      xPtr <- Call.ioarray x+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gglse mPtr nPtr pPtr aPtr ldaPtr bPtr ldbPtr cPtr dPtr xPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray x+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zggqrf.f>+ggqrf ::+   Int {- ^ n -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double), Int)+ggqrf n a b lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let m = aDim0+   let lda = aDim1+   let p = bDim0+   let ldb = bDim1+   taua <- Call.newArray1 (minimum[n,m])+   taub <- Call.newArray1 (minimum[n,p])+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      nPtr <- Call.cint n+      mPtr <- Call.cint m+      pPtr <- Call.cint p+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauaPtr <- Call.ioarray taua+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      taubPtr <- Call.ioarray taub+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ggqrf nPtr mPtr pPtr aPtr ldaPtr tauaPtr bPtr ldbPtr taubPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray taua+         <*> Call.freezeArray taub+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zggrqf.f>+ggrqf ::+   Int {- ^ m -} ->+   Int {- ^ p -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double), Int)+ggrqf m p a b lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   Call.assert "ggrqf: n == bDim0" (n == bDim0)+   taua <- Call.newArray1 (minimum[m,n])+   taub <- Call.newArray1 (minimum[p,n])+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      pPtr <- Call.cint p+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauaPtr <- Call.ioarray taua+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      taubPtr <- Call.ioarray taub+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ggrqf mPtr pPtr nPtr aPtr ldaPtr tauaPtr bPtr ldbPtr taubPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray taua+         <*> Call.freezeArray taub+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgtcon.f>+gtcon ::+   Char {- ^ norm -} ->+   Array ZeroInt (Complex Double) {- ^ dl -} ->+   Array ZeroInt (Complex Double) {- ^ d -} ->+   Array ZeroInt (Complex Double) {- ^ du -} ->+   Array ZeroInt (Complex Double) {- ^ du2 -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Double {- ^ anorm -} ->+   IO (Double, Int)+gtcon norm dl d du du2 ipiv anorm = do+   let dlDim0 = Call.sizes1 $ Array.shape dl+   let dDim0 = Call.sizes1 $ Array.shape d+   let duDim0 = Call.sizes1 $ Array.shape du+   let du2Dim0 = Call.sizes1 $ Array.shape du2+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = dDim0+   Call.assert "gtcon: n-1 == dlDim0" (n-1 == dlDim0)+   Call.assert "gtcon: n-1 == duDim0" (n-1 == duDim0)+   Call.assert "gtcon: n-2 == du2Dim0" (n-2 == du2Dim0)+   Call.assert "gtcon: n == ipivDim0" (n == ipivDim0)+   work <- Call.newArray1 (2*n)+   evalContT $ do+      normPtr <- Call.char norm+      nPtr <- Call.cint n+      dlPtr <- Call.array dl+      dPtr <- Call.array d+      duPtr <- Call.array du+      du2Ptr <- Call.array du2+      ipivPtr <- Call.array ipiv+      anormPtr <- Call.double anorm+      rcondPtr <- Call.alloca+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.gtcon normPtr nPtr dlPtr dPtr duPtr du2Ptr ipivPtr anormPtr rcondPtr workPtr infoPtr+      liftIO $ pure (,)+         <*> peek rcondPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgtrfs.f>+gtrfs ::+   Char {- ^ trans -} ->+   Array ZeroInt (Complex Double) {- ^ dl -} ->+   Array ZeroInt (Complex Double) {- ^ d -} ->+   Array ZeroInt (Complex Double) {- ^ du -} ->+   Array ZeroInt (Complex Double) {- ^ dlf -} ->+   Array ZeroInt (Complex Double) {- ^ df -} ->+   Array ZeroInt (Complex Double) {- ^ duf -} ->+   Array ZeroInt (Complex Double) {- ^ du2 -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ x -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Int)+gtrfs trans dl d du dlf df duf du2 ipiv b x = do+   let dlDim0 = Call.sizes1 $ Array.shape dl+   let dDim0 = Call.sizes1 $ Array.shape d+   let duDim0 = Call.sizes1 $ Array.shape du+   let dlfDim0 = Call.sizes1 $ Array.shape dlf+   let dfDim0 = Call.sizes1 $ Array.shape df+   let dufDim0 = Call.sizes1 $ Array.shape duf+   let du2Dim0 = Call.sizes1 $ Array.shape du2+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (xDim0,xDim1) = Call.sizes2 $ MutArray.shape x+   let n = dDim0+   let nrhs = bDim0+   let ldb = bDim1+   let ldx = xDim1+   Call.assert "gtrfs: n-1 == dlDim0" (n-1 == dlDim0)+   Call.assert "gtrfs: n-1 == duDim0" (n-1 == duDim0)+   Call.assert "gtrfs: n-1 == dlfDim0" (n-1 == dlfDim0)+   Call.assert "gtrfs: n == dfDim0" (n == dfDim0)+   Call.assert "gtrfs: n-1 == dufDim0" (n-1 == dufDim0)+   Call.assert "gtrfs: n-2 == du2Dim0" (n-2 == du2Dim0)+   Call.assert "gtrfs: n == ipivDim0" (n == ipivDim0)+   Call.assert "gtrfs: nrhs == xDim0" (nrhs == xDim0)+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      transPtr <- Call.char trans+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      dlPtr <- Call.array dl+      dPtr <- Call.array d+      duPtr <- Call.array du+      dlfPtr <- Call.array dlf+      dfPtr <- Call.array df+      dufPtr <- Call.array duf+      du2Ptr <- Call.array du2+      ipivPtr <- Call.array ipiv+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gtrfs transPtr nPtr nrhsPtr dlPtr dPtr duPtr dlfPtr dfPtr dufPtr du2Ptr ipivPtr bPtr ldbPtr xPtr ldxPtr ferrPtr berrPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgtsv.f>+gtsv ::+   IOArray ZeroInt (Complex Double) {- ^ dl -} ->+   IOArray ZeroInt (Complex Double) {- ^ d -} ->+   IOArray ZeroInt (Complex Double) {- ^ du -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   IO (Int)+gtsv dl d du b = do+   let dlDim0 = Call.sizes1 $ MutArray.shape dl+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let duDim0 = Call.sizes1 $ MutArray.shape du+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = dDim0+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "gtsv: n-1 == dlDim0" (n-1 == dlDim0)+   Call.assert "gtsv: n-1 == duDim0" (n-1 == duDim0)+   evalContT $ do+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      dlPtr <- Call.ioarray dl+      dPtr <- Call.ioarray d+      duPtr <- Call.ioarray du+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.gtsv nPtr nrhsPtr dlPtr dPtr duPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgtsvx.f>+gtsvx ::+   Char {- ^ fact -} ->+   Char {- ^ trans -} ->+   Array ZeroInt (Complex Double) {- ^ dl -} ->+   Array ZeroInt (Complex Double) {- ^ d -} ->+   Array ZeroInt (Complex Double) {- ^ du -} ->+   IOArray ZeroInt (Complex Double) {- ^ dlf -} ->+   IOArray ZeroInt (Complex Double) {- ^ df -} ->+   IOArray ZeroInt (Complex Double) {- ^ duf -} ->+   IOArray ZeroInt (Complex Double) {- ^ du2 -} ->+   IOArray ZeroInt CInt {- ^ ipiv -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   Int {- ^ ldx -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Double), Double, Array ZeroInt Double, Array ZeroInt Double, Int)+gtsvx fact trans dl d du dlf df duf du2 ipiv b ldx = do+   let dlDim0 = Call.sizes1 $ Array.shape dl+   let dDim0 = Call.sizes1 $ Array.shape d+   let duDim0 = Call.sizes1 $ Array.shape du+   let dlfDim0 = Call.sizes1 $ MutArray.shape dlf+   let dfDim0 = Call.sizes1 $ MutArray.shape df+   let dufDim0 = Call.sizes1 $ MutArray.shape duf+   let du2Dim0 = Call.sizes1 $ MutArray.shape du2+   let ipivDim0 = Call.sizes1 $ MutArray.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let n = dDim0+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "gtsvx: n-1 == dlDim0" (n-1 == dlDim0)+   Call.assert "gtsvx: n-1 == duDim0" (n-1 == duDim0)+   Call.assert "gtsvx: n-1 == dlfDim0" (n-1 == dlfDim0)+   Call.assert "gtsvx: n == dfDim0" (n == dfDim0)+   Call.assert "gtsvx: n-1 == dufDim0" (n-1 == dufDim0)+   Call.assert "gtsvx: n-2 == du2Dim0" (n-2 == du2Dim0)+   Call.assert "gtsvx: n == ipivDim0" (n == ipivDim0)+   x <- Call.newArray2 nrhs ldx+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      factPtr <- Call.char fact+      transPtr <- Call.char trans+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      dlPtr <- Call.array dl+      dPtr <- Call.array d+      duPtr <- Call.array du+      dlfPtr <- Call.ioarray dlf+      dfPtr <- Call.ioarray df+      dufPtr <- Call.ioarray duf+      du2Ptr <- Call.ioarray du2+      ipivPtr <- Call.ioarray ipiv+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      rcondPtr <- Call.alloca+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gtsvx factPtr transPtr nPtr nrhsPtr dlPtr dPtr duPtr dlfPtr dfPtr dufPtr du2Ptr ipivPtr bPtr ldbPtr xPtr ldxPtr rcondPtr ferrPtr berrPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,,,)+         <*> Call.freezeArray x+         <*> peek rcondPtr+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgttrf.f>+gttrf ::+   IOArray ZeroInt (Complex Double) {- ^ dl -} ->+   IOArray ZeroInt (Complex Double) {- ^ d -} ->+   IOArray ZeroInt (Complex Double) {- ^ du -} ->+   IO (Array ZeroInt (Complex Double), Array ZeroInt CInt, Int)+gttrf dl d du = do+   let dlDim0 = Call.sizes1 $ MutArray.shape dl+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let duDim0 = Call.sizes1 $ MutArray.shape du+   let n = dDim0+   Call.assert "gttrf: n-1 == dlDim0" (n-1 == dlDim0)+   Call.assert "gttrf: n-1 == duDim0" (n-1 == duDim0)+   du2 <- Call.newArray1 (n-2)+   ipiv <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      dlPtr <- Call.ioarray dl+      dPtr <- Call.ioarray d+      duPtr <- Call.ioarray du+      du2Ptr <- Call.ioarray du2+      ipivPtr <- Call.ioarray ipiv+      infoPtr <- Call.alloca+      liftIO $ FFI.gttrf nPtr dlPtr dPtr duPtr du2Ptr ipivPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray du2+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgttrs.f>+gttrs ::+   Char {- ^ trans -} ->+   Array ZeroInt (Complex Double) {- ^ dl -} ->+   Array ZeroInt (Complex Double) {- ^ d -} ->+   Array ZeroInt (Complex Double) {- ^ du -} ->+   Array ZeroInt (Complex Double) {- ^ du2 -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   IO (Int)+gttrs trans dl d du du2 ipiv b = do+   let dlDim0 = Call.sizes1 $ Array.shape dl+   let dDim0 = Call.sizes1 $ Array.shape d+   let duDim0 = Call.sizes1 $ Array.shape du+   let du2Dim0 = Call.sizes1 $ Array.shape du2+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = dDim0+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "gttrs: n-1 == dlDim0" (n-1 == dlDim0)+   Call.assert "gttrs: n-1 == duDim0" (n-1 == duDim0)+   Call.assert "gttrs: n-2 == du2Dim0" (n-2 == du2Dim0)+   Call.assert "gttrs: n == ipivDim0" (n == ipivDim0)+   evalContT $ do+      transPtr <- Call.char trans+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      dlPtr <- Call.array dl+      dPtr <- Call.array d+      duPtr <- Call.array du+      du2Ptr <- Call.array du2+      ipivPtr <- Call.array ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.gttrs transPtr nPtr nrhsPtr dlPtr dPtr duPtr du2Ptr ipivPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgtts2.f>+gtts2 ::+   Int {- ^ itrans -} ->+   Array ZeroInt (Complex Double) {- ^ dl -} ->+   Array ZeroInt (Complex Double) {- ^ d -} ->+   Array ZeroInt (Complex Double) {- ^ du -} ->+   Array ZeroInt (Complex Double) {- ^ du2 -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   IO ()+gtts2 itrans dl d du du2 ipiv b = do+   let dlDim0 = Call.sizes1 $ Array.shape dl+   let dDim0 = Call.sizes1 $ Array.shape d+   let duDim0 = Call.sizes1 $ Array.shape du+   let du2Dim0 = Call.sizes1 $ Array.shape du2+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = dDim0+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "gtts2: n-1 == dlDim0" (n-1 == dlDim0)+   Call.assert "gtts2: n-1 == duDim0" (n-1 == duDim0)+   Call.assert "gtts2: n-2 == du2Dim0" (n-2 == du2Dim0)+   Call.assert "gtts2: n == ipivDim0" (n == ipivDim0)+   evalContT $ do+      itransPtr <- Call.cint itrans+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      dlPtr <- Call.array dl+      dPtr <- Call.array d+      duPtr <- Call.array du+      du2Ptr <- Call.array du2+      ipivPtr <- Call.array ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      liftIO $ FFI.gtts2 itransPtr nPtr nrhsPtr dlPtr dPtr duPtr du2Ptr ipivPtr bPtr ldbPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhbev.f>+hbev ::+   Char {- ^ jobz -} ->+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ ab -} ->+   Int {- ^ ldz -} ->+   IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) (Complex Double), Int)+hbev jobz uplo kd ab ldz = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let n = abDim0+   let ldab = abDim1+   w <- Call.newArray1 n+   z <- Call.newArray2 n ldz+   work <- Call.newArray1 n+   rwork <- Call.newArray1 (maximum[1,3*n-2])+   evalContT $ do+      jobzPtr <- Call.char jobz+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.hbev jobzPtr uploPtr nPtr kdPtr abPtr ldabPtr wPtr zPtr ldzPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhbevd.f>+hbevd ::+   Char {- ^ jobz -} ->+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ ab -} ->+   Int {- ^ ldz -} ->+   Int {- ^ lwork -} ->+   Int {- ^ rworkSize -} ->+   Int {- ^ lrwork -} ->+   Int {- ^ liwork -} ->+   IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) (Complex Double), Int)+hbevd jobz uplo kd ab ldz lwork rworkSize lrwork liwork = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let n = abDim0+   let ldab = abDim1+   w <- Call.newArray1 n+   z <- Call.newArray2 n ldz+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 rworkSize+   iwork <- Call.newArray1 (maximum[1,liwork])+   evalContT $ do+      jobzPtr <- Call.char jobz+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      lrworkPtr <- Call.cint lrwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      infoPtr <- Call.alloca+      liftIO $ FFI.hbevd jobzPtr uploPtr nPtr kdPtr abPtr ldabPtr wPtr zPtr ldzPtr workPtr lworkPtr rworkPtr lrworkPtr iworkPtr liworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhbevx.f>+hbevx ::+   Char {- ^ jobz -} ->+   Char {- ^ range -} ->+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ ab -} ->+   Int {- ^ ldq -} ->+   Double {- ^ vl -} ->+   Double {- ^ vu -} ->+   Int {- ^ il -} ->+   Int {- ^ iu -} ->+   Double {- ^ abstol -} ->+   Int {- ^ m -} ->+   Int {- ^ ldz -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Double), Int, Array ZeroInt Double, Array (ZeroInt,ZeroInt) (Complex Double), Array ZeroInt CInt, Int)+hbevx jobz range uplo kd ab ldq vl vu il iu abstol m ldz = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let n = abDim0+   let ldab = abDim1+   q <- Call.newArray2 n ldq+   w <- Call.newArray1 n+   z <- Call.newArray2 (maximum[1,m]) ldz+   work <- Call.newArray1 n+   rwork <- Call.newArray1 (7*n)+   iwork <- Call.newArray1 (5*n)+   ifail <- Call.newArray1 n+   evalContT $ do+      jobzPtr <- Call.char jobz+      rangePtr <- Call.char range+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      vlPtr <- Call.double vl+      vuPtr <- Call.double vu+      ilPtr <- Call.cint il+      iuPtr <- Call.cint iu+      abstolPtr <- Call.double abstol+      mPtr <- Call.alloca+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      iworkPtr <- Call.ioarray iwork+      ifailPtr <- Call.ioarray ifail+      infoPtr <- Call.alloca+      liftIO $ FFI.hbevx jobzPtr rangePtr uploPtr nPtr kdPtr abPtr ldabPtr qPtr ldqPtr vlPtr vuPtr ilPtr iuPtr abstolPtr mPtr wPtr zPtr ldzPtr workPtr rworkPtr iworkPtr ifailPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> Call.freezeArray q+         <*> fmap fromIntegral (peek mPtr)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> Call.freezeArray ifail+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhbgst.f>+hbgst ::+   Char {- ^ vect -} ->+   Char {- ^ uplo -} ->+   Int {- ^ ka -} ->+   Int {- ^ kb -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ ab -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ bb -} ->+   Int {- ^ ldx -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Double), Int)+hbgst vect uplo ka kb ab bb ldx = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let (bbDim0,bbDim1) = Call.sizes2 $ Array.shape bb+   let n = abDim0+   let ldab = abDim1+   let ldbb = bbDim1+   Call.assert "hbgst: n == bbDim0" (n == bbDim0)+   x <- Call.newArray2 n ldx+   work <- Call.newArray1 n+   rwork <- Call.newArray1 n+   evalContT $ do+      vectPtr <- Call.char vect+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kaPtr <- Call.cint ka+      kbPtr <- Call.cint kb+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      bbPtr <- Call.array bb+      ldbbPtr <- Call.cint ldbb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.hbgst vectPtr uploPtr nPtr kaPtr kbPtr abPtr ldabPtr bbPtr ldbbPtr xPtr ldxPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray x+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhbgv.f>+hbgv ::+   Char {- ^ jobz -} ->+   Char {- ^ uplo -} ->+   Int {- ^ ka -} ->+   Int {- ^ kb -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ ab -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ bb -} ->+   Int {- ^ ldz -} ->+   IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) (Complex Double), Int)+hbgv jobz uplo ka kb ab bb ldz = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let (bbDim0,bbDim1) = Call.sizes2 $ MutArray.shape bb+   let n = abDim0+   let ldab = abDim1+   let ldbb = bbDim1+   Call.assert "hbgv: n == bbDim0" (n == bbDim0)+   w <- Call.newArray1 n+   z <- Call.newArray2 n ldz+   work <- Call.newArray1 n+   rwork <- Call.newArray1 (3*n)+   evalContT $ do+      jobzPtr <- Call.char jobz+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kaPtr <- Call.cint ka+      kbPtr <- Call.cint kb+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      bbPtr <- Call.ioarray bb+      ldbbPtr <- Call.cint ldbb+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.hbgv jobzPtr uploPtr nPtr kaPtr kbPtr abPtr ldabPtr bbPtr ldbbPtr wPtr zPtr ldzPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhbgvd.f>+hbgvd ::+   Char {- ^ jobz -} ->+   Char {- ^ uplo -} ->+   Int {- ^ ka -} ->+   Int {- ^ kb -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ ab -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ bb -} ->+   Int {- ^ ldz -} ->+   Int {- ^ lwork -} ->+   Int {- ^ lrwork -} ->+   Int {- ^ liwork -} ->+   IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) (Complex Double), Int)+hbgvd jobz uplo ka kb ab bb ldz lwork lrwork liwork = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let (bbDim0,bbDim1) = Call.sizes2 $ MutArray.shape bb+   let n = abDim0+   let ldab = abDim1+   let ldbb = bbDim1+   Call.assert "hbgvd: n == bbDim0" (n == bbDim0)+   w <- Call.newArray1 n+   z <- Call.newArray2 n ldz+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 (maximum[1,lrwork])+   iwork <- Call.newArray1 (maximum[1,liwork])+   evalContT $ do+      jobzPtr <- Call.char jobz+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kaPtr <- Call.cint ka+      kbPtr <- Call.cint kb+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      bbPtr <- Call.ioarray bb+      ldbbPtr <- Call.cint ldbb+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      lrworkPtr <- Call.cint lrwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      infoPtr <- Call.alloca+      liftIO $ FFI.hbgvd jobzPtr uploPtr nPtr kaPtr kbPtr abPtr ldabPtr bbPtr ldbbPtr wPtr zPtr ldzPtr workPtr lworkPtr rworkPtr lrworkPtr iworkPtr liworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhbgvx.f>+hbgvx ::+   Char {- ^ jobz -} ->+   Char {- ^ range -} ->+   Char {- ^ uplo -} ->+   Int {- ^ ka -} ->+   Int {- ^ kb -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ ab -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ bb -} ->+   Int {- ^ ldq -} ->+   Double {- ^ vl -} ->+   Double {- ^ vu -} ->+   Int {- ^ il -} ->+   Int {- ^ iu -} ->+   Double {- ^ abstol -} ->+   Int {- ^ ldz -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Double), Int, Array ZeroInt Double, Array (ZeroInt,ZeroInt) (Complex Double), Array ZeroInt CInt, Int)+hbgvx jobz range uplo ka kb ab bb ldq vl vu il iu abstol ldz = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let (bbDim0,bbDim1) = Call.sizes2 $ MutArray.shape bb+   let n = abDim0+   let ldab = abDim1+   let ldbb = bbDim1+   Call.assert "hbgvx: n == bbDim0" (n == bbDim0)+   q <- Call.newArray2 n ldq+   w <- Call.newArray1 n+   z <- Call.newArray2 n ldz+   work <- Call.newArray1 n+   rwork <- Call.newArray1 (7*n)+   iwork <- Call.newArray1 (5*n)+   ifail <- Call.newArray1 n+   evalContT $ do+      jobzPtr <- Call.char jobz+      rangePtr <- Call.char range+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kaPtr <- Call.cint ka+      kbPtr <- Call.cint kb+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      bbPtr <- Call.ioarray bb+      ldbbPtr <- Call.cint ldbb+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      vlPtr <- Call.double vl+      vuPtr <- Call.double vu+      ilPtr <- Call.cint il+      iuPtr <- Call.cint iu+      abstolPtr <- Call.double abstol+      mPtr <- Call.alloca+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      iworkPtr <- Call.ioarray iwork+      ifailPtr <- Call.ioarray ifail+      infoPtr <- Call.alloca+      liftIO $ FFI.hbgvx jobzPtr rangePtr uploPtr nPtr kaPtr kbPtr abPtr ldabPtr bbPtr ldbbPtr qPtr ldqPtr vlPtr vuPtr ilPtr iuPtr abstolPtr mPtr wPtr zPtr ldzPtr workPtr rworkPtr iworkPtr ifailPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> Call.freezeArray q+         <*> fmap fromIntegral (peek mPtr)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> Call.freezeArray ifail+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhbtrd.f>+hbtrd ::+   Char {- ^ vect -} ->+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ ab -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ q -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Int)+hbtrd vect uplo kd ab q = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let n = abDim0+   let ldab = abDim1+   let ldq = qDim1+   Call.assert "hbtrd: n == qDim0" (n == qDim0)+   d <- Call.newArray1 n+   e <- Call.newArray1 (n-1)+   work <- Call.newArray1 n+   evalContT $ do+      vectPtr <- Call.char vect+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.hbtrd vectPtr uploPtr nPtr kdPtr abPtr ldabPtr dPtr ePtr qPtr ldqPtr workPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray d+         <*> Call.freezeArray e+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhecon.f>+hecon ::+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Double {- ^ anorm -} ->+   IO (Double, Int)+hecon uplo a ipiv anorm = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = aDim0+   let lda = aDim1+   Call.assert "hecon: n == ipivDim0" (n == ipivDim0)+   work <- Call.newArray1 (2*n)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.array ipiv+      anormPtr <- Call.double anorm+      rcondPtr <- Call.alloca+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.hecon uploPtr nPtr aPtr ldaPtr ipivPtr anormPtr rcondPtr workPtr infoPtr+      liftIO $ pure (,)+         <*> peek rcondPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zheequb.f>+heequb ::+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IO (Array ZeroInt Double, Double, Double, Int)+heequb uplo a = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   s <- Call.newArray1 n+   work <- Call.newArray1 (2*n)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      sPtr <- Call.ioarray s+      scondPtr <- Call.alloca+      amaxPtr <- Call.alloca+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.heequb uploPtr nPtr aPtr ldaPtr sPtr scondPtr amaxPtr workPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray s+         <*> peek scondPtr+         <*> peek amaxPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zheev.f>+heev ::+   Char {- ^ jobz -} ->+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Double, Int)+heev jobz uplo a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   w <- Call.newArray1 n+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 (maximum[1,3*n-2])+   evalContT $ do+      jobzPtr <- Call.char jobz+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      wPtr <- Call.ioarray w+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.heev jobzPtr uploPtr nPtr aPtr ldaPtr wPtr workPtr lworkPtr rworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray w+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zheevd.f>+heevd ::+   Char {- ^ jobz -} ->+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Int {- ^ lwork -} ->+   Int {- ^ rworkSize -} ->+   Int {- ^ lrwork -} ->+   Int {- ^ liwork -} ->+   IO (Array ZeroInt Double, Int)+heevd jobz uplo a lwork rworkSize lrwork liwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   w <- Call.newArray1 n+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 rworkSize+   iwork <- Call.newArray1 (maximum[1,liwork])+   evalContT $ do+      jobzPtr <- Call.char jobz+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      wPtr <- Call.ioarray w+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      lrworkPtr <- Call.cint lrwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      infoPtr <- Call.alloca+      liftIO $ FFI.heevd jobzPtr uploPtr nPtr aPtr ldaPtr wPtr workPtr lworkPtr rworkPtr lrworkPtr iworkPtr liworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray w+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zheevr.f>+heevr ::+   Char {- ^ jobz -} ->+   Char {- ^ range -} ->+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Double {- ^ vl -} ->+   Double {- ^ vu -} ->+   Int {- ^ il -} ->+   Int {- ^ iu -} ->+   Double {- ^ abstol -} ->+   Int {- ^ m -} ->+   Int {- ^ ldz -} ->+   Int {- ^ lwork -} ->+   Int {- ^ lrwork -} ->+   Int {- ^ liwork -} ->+   IO (Int, Array ZeroInt Double, Array (ZeroInt,ZeroInt) (Complex Double), Array ZeroInt CInt, Int)+heevr jobz range uplo a vl vu il iu abstol m ldz lwork lrwork liwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   w <- Call.newArray1 n+   z <- Call.newArray2 (maximum[1,m]) ldz+   isuppz <- Call.newArray1 (2*maximum[1,m])+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 (maximum[1,lrwork])+   iwork <- Call.newArray1 (maximum[1,liwork])+   evalContT $ do+      jobzPtr <- Call.char jobz+      rangePtr <- Call.char range+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      vlPtr <- Call.double vl+      vuPtr <- Call.double vu+      ilPtr <- Call.cint il+      iuPtr <- Call.cint iu+      abstolPtr <- Call.double abstol+      mPtr <- Call.alloca+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      isuppzPtr <- Call.ioarray isuppz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      lrworkPtr <- Call.cint lrwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      infoPtr <- Call.alloca+      liftIO $ FFI.heevr jobzPtr rangePtr uploPtr nPtr aPtr ldaPtr vlPtr vuPtr ilPtr iuPtr abstolPtr mPtr wPtr zPtr ldzPtr isuppzPtr workPtr lworkPtr rworkPtr lrworkPtr iworkPtr liworkPtr infoPtr+      liftIO $ pure (,,,,)+         <*> fmap fromIntegral (peek mPtr)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> Call.freezeArray isuppz+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zheevx.f>+heevx ::+   Char {- ^ jobz -} ->+   Char {- ^ range -} ->+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Double {- ^ vl -} ->+   Double {- ^ vu -} ->+   Int {- ^ il -} ->+   Int {- ^ iu -} ->+   Double {- ^ abstol -} ->+   Int {- ^ m -} ->+   Int {- ^ ldz -} ->+   Int {- ^ lwork -} ->+   IO (Int, Array ZeroInt Double, Array (ZeroInt,ZeroInt) (Complex Double), Array ZeroInt CInt, Int)+heevx jobz range uplo a vl vu il iu abstol m ldz lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   w <- Call.newArray1 n+   z <- Call.newArray2 (maximum[1,m]) ldz+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 (7*n)+   iwork <- Call.newArray1 (5*n)+   ifail <- Call.newArray1 n+   evalContT $ do+      jobzPtr <- Call.char jobz+      rangePtr <- Call.char range+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      vlPtr <- Call.double vl+      vuPtr <- Call.double vu+      ilPtr <- Call.cint il+      iuPtr <- Call.cint iu+      abstolPtr <- Call.double abstol+      mPtr <- Call.alloca+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      iworkPtr <- Call.ioarray iwork+      ifailPtr <- Call.ioarray ifail+      infoPtr <- Call.alloca+      liftIO $ FFI.heevx jobzPtr rangePtr uploPtr nPtr aPtr ldaPtr vlPtr vuPtr ilPtr iuPtr abstolPtr mPtr wPtr zPtr ldzPtr workPtr lworkPtr rworkPtr iworkPtr ifailPtr infoPtr+      liftIO $ pure (,,,,)+         <*> fmap fromIntegral (peek mPtr)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> Call.freezeArray ifail+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhegs2.f>+hegs2 ::+   Int {- ^ itype -} ->+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   IO (Int)+hegs2 itype uplo a b = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   Call.assert "hegs2: n == bDim0" (n == bDim0)+   evalContT $ do+      itypePtr <- Call.cint itype+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.hegs2 itypePtr uploPtr nPtr aPtr ldaPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhegst.f>+hegst ::+   Int {- ^ itype -} ->+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   IO (Int)+hegst itype uplo a b = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   Call.assert "hegst: n == bDim0" (n == bDim0)+   evalContT $ do+      itypePtr <- Call.cint itype+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.hegst itypePtr uploPtr nPtr aPtr ldaPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhegv.f>+hegv ::+   Int {- ^ itype -} ->+   Char {- ^ jobz -} ->+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Double, Int)+hegv itype jobz uplo a b lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   Call.assert "hegv: n == bDim0" (n == bDim0)+   w <- Call.newArray1 n+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 (maximum[1,3*n-2])+   evalContT $ do+      itypePtr <- Call.cint itype+      jobzPtr <- Call.char jobz+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      wPtr <- Call.ioarray w+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.hegv itypePtr jobzPtr uploPtr nPtr aPtr ldaPtr bPtr ldbPtr wPtr workPtr lworkPtr rworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray w+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhegvd.f>+hegvd ::+   Int {- ^ itype -} ->+   Char {- ^ jobz -} ->+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   Int {- ^ lwork -} ->+   Int {- ^ lrwork -} ->+   Int {- ^ liwork -} ->+   IO (Array ZeroInt Double, Int)+hegvd itype jobz uplo a b lwork lrwork liwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   Call.assert "hegvd: n == bDim0" (n == bDim0)+   w <- Call.newArray1 n+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 (maximum[1,lrwork])+   iwork <- Call.newArray1 (maximum[1,liwork])+   evalContT $ do+      itypePtr <- Call.cint itype+      jobzPtr <- Call.char jobz+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      wPtr <- Call.ioarray w+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      lrworkPtr <- Call.cint lrwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      infoPtr <- Call.alloca+      liftIO $ FFI.hegvd itypePtr jobzPtr uploPtr nPtr aPtr ldaPtr bPtr ldbPtr wPtr workPtr lworkPtr rworkPtr lrworkPtr iworkPtr liworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray w+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhegvx.f>+hegvx ::+   Int {- ^ itype -} ->+   Char {- ^ jobz -} ->+   Char {- ^ range -} ->+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   Double {- ^ vl -} ->+   Double {- ^ vu -} ->+   Int {- ^ il -} ->+   Int {- ^ iu -} ->+   Double {- ^ abstol -} ->+   Int {- ^ m -} ->+   Int {- ^ ldz -} ->+   Int {- ^ lwork -} ->+   IO (Int, Array ZeroInt Double, Array (ZeroInt,ZeroInt) (Complex Double), Array ZeroInt CInt, Int)+hegvx itype jobz range uplo a b vl vu il iu abstol m ldz lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   Call.assert "hegvx: n == bDim0" (n == bDim0)+   w <- Call.newArray1 n+   z <- Call.newArray2 (maximum[1,m]) ldz+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 (7*n)+   iwork <- Call.newArray1 (5*n)+   ifail <- Call.newArray1 n+   evalContT $ do+      itypePtr <- Call.cint itype+      jobzPtr <- Call.char jobz+      rangePtr <- Call.char range+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      vlPtr <- Call.double vl+      vuPtr <- Call.double vu+      ilPtr <- Call.cint il+      iuPtr <- Call.cint iu+      abstolPtr <- Call.double abstol+      mPtr <- Call.alloca+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      iworkPtr <- Call.ioarray iwork+      ifailPtr <- Call.ioarray ifail+      infoPtr <- Call.alloca+      liftIO $ FFI.hegvx itypePtr jobzPtr rangePtr uploPtr nPtr aPtr ldaPtr bPtr ldbPtr vlPtr vuPtr ilPtr iuPtr abstolPtr mPtr wPtr zPtr ldzPtr workPtr lworkPtr rworkPtr iworkPtr ifailPtr infoPtr+      liftIO $ pure (,,,,)+         <*> fmap fromIntegral (peek mPtr)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> Call.freezeArray ifail+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zherfs.f>+herfs ::+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ af -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ x -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Int)+herfs uplo a af ipiv b x = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (afDim0,afDim1) = Call.sizes2 $ Array.shape af+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (xDim0,xDim1) = Call.sizes2 $ MutArray.shape x+   let n = aDim0+   let lda = aDim1+   let ldaf = afDim1+   let nrhs = bDim0+   let ldb = bDim1+   let ldx = xDim1+   Call.assert "herfs: n == afDim0" (n == afDim0)+   Call.assert "herfs: n == ipivDim0" (n == ipivDim0)+   Call.assert "herfs: nrhs == xDim0" (nrhs == xDim0)+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      afPtr <- Call.array af+      ldafPtr <- Call.cint ldaf+      ipivPtr <- Call.array ipiv+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.herfs uploPtr nPtr nrhsPtr aPtr ldaPtr afPtr ldafPtr ipivPtr bPtr ldbPtr xPtr ldxPtr ferrPtr berrPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhesv.f>+hesv ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt CInt, Int)+hesv uplo a b lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   ipiv <- Call.newArray1 n+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.ioarray ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.hesv uploPtr nPtr nrhsPtr aPtr ldaPtr ipivPtr bPtr ldbPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhesvx.f>+hesvx ::+   Char {- ^ fact -} ->+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ af -} ->+   IOArray ZeroInt CInt {- ^ ipiv -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   Int {- ^ ldx -} ->+   Int {- ^ lwork -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Double), Double, Array ZeroInt Double, Array ZeroInt Double, Int)+hesvx fact uplo a af ipiv b ldx lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (afDim0,afDim1) = Call.sizes2 $ MutArray.shape af+   let ipivDim0 = Call.sizes1 $ MutArray.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let n = aDim0+   let lda = aDim1+   let ldaf = afDim1+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "hesvx: n == afDim0" (n == afDim0)+   Call.assert "hesvx: n == ipivDim0" (n == ipivDim0)+   x <- Call.newArray2 nrhs ldx+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 n+   evalContT $ do+      factPtr <- Call.char fact+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      afPtr <- Call.ioarray af+      ldafPtr <- Call.cint ldaf+      ipivPtr <- Call.ioarray ipiv+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      rcondPtr <- Call.alloca+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.hesvx factPtr uploPtr nPtr nrhsPtr aPtr ldaPtr afPtr ldafPtr ipivPtr bPtr ldbPtr xPtr ldxPtr rcondPtr ferrPtr berrPtr workPtr lworkPtr rworkPtr infoPtr+      liftIO $ pure (,,,,)+         <*> Call.freezeArray x+         <*> peek rcondPtr+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zheswapr.f>+heswapr ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Int {- ^ i1 -} ->+   Int {- ^ i2 -} ->+   IO ()+heswapr uplo a i1 i2 = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      i1Ptr <- Call.cint i1+      i2Ptr <- Call.cint i2+      liftIO $ FFI.heswapr uploPtr nPtr aPtr ldaPtr i1Ptr i2Ptr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhetd2.f>+hetd2 ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt (Complex Double), Int)+hetd2 uplo a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   d <- Call.newArray1 n+   e <- Call.newArray1 (n-1)+   tau <- Call.newArray1 (n-1)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      tauPtr <- Call.ioarray tau+      infoPtr <- Call.alloca+      liftIO $ FFI.hetd2 uploPtr nPtr aPtr ldaPtr dPtr ePtr tauPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray d+         <*> Call.freezeArray e+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhetf2.f>+hetf2 ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IO (Array ZeroInt CInt, Int)+hetf2 uplo a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   ipiv <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.ioarray ipiv+      infoPtr <- Call.alloca+      liftIO $ FFI.hetf2 uploPtr nPtr aPtr ldaPtr ipivPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhetrd.f>+hetrd ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt (Complex Double), Int)+hetrd uplo a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   d <- Call.newArray1 n+   e <- Call.newArray1 (n-1)+   tau <- Call.newArray1 (n-1)+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.hetrd uploPtr nPtr aPtr ldaPtr dPtr ePtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray d+         <*> Call.freezeArray e+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhetrf.f>+hetrf ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt CInt, Int)+hetrf uplo a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   ipiv <- Call.newArray1 n+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.ioarray ipiv+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.hetrf uploPtr nPtr aPtr ldaPtr ipivPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhetri.f>+hetri ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   IO (Int)+hetri uplo a ipiv = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = aDim0+   let lda = aDim1+   Call.assert "hetri: n == ipivDim0" (n == ipivDim0)+   work <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.array ipiv+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.hetri uploPtr nPtr aPtr ldaPtr ipivPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhetri2.f>+hetri2 ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Int {- ^ nb -} ->+   Int {- ^ lwork -} ->+   IO (Int)+hetri2 uplo a ipiv nb lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = aDim0+   let lda = aDim1+   Call.assert "hetri2: n == ipivDim0" (n == ipivDim0)+   work <- Call.newArray1 (n+nb+1)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.array ipiv+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.hetri2 uploPtr nPtr aPtr ldaPtr ipivPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhetri2x.f>+hetri2x ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Int {- ^ nb -} ->+   IO (Int)+hetri2x uplo a ipiv nb = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = aDim0+   let lda = aDim1+   Call.assert "hetri2x: n == ipivDim0" (n == ipivDim0)+   work <- Call.newArray2 (nb+3) (n+nb+1)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.array ipiv+      workPtr <- Call.ioarray work+      nbPtr <- Call.cint nb+      infoPtr <- Call.alloca+      liftIO $ FFI.hetri2x uploPtr nPtr aPtr ldaPtr ipivPtr workPtr nbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhetrs.f>+hetrs ::+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   IO (Int)+hetrs uplo a ipiv b = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "hetrs: n == ipivDim0" (n == ipivDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.array ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.hetrs uploPtr nPtr nrhsPtr aPtr ldaPtr ipivPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhetrs2.f>+hetrs2 ::+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   IO (Int)+hetrs2 uplo a ipiv b = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "hetrs2: n == ipivDim0" (n == ipivDim0)+   work <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.array ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.hetrs2 uploPtr nPtr nrhsPtr aPtr ldaPtr ipivPtr bPtr ldbPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhfrk.f>+hfrk ::+   Char {- ^ transr -} ->+   Char {- ^ uplo -} ->+   Char {- ^ trans -} ->+   Int {- ^ n -} ->+   Int {- ^ k -} ->+   Double {- ^ alpha -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Double {- ^ beta -} ->+   IOArray ZeroInt (Complex Double) {- ^ c -} ->+   IO ()+hfrk transr uplo trans n k alpha a beta c = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let cDim0 = Call.sizes1 $ MutArray.shape c+   let _ka = aDim0+   let lda = aDim1+   Call.assert "hfrk: n*(n+1)`div`2 == cDim0" (n*(n+1)`div`2 == cDim0)+   evalContT $ do+      transrPtr <- Call.char transr+      uploPtr <- Call.char uplo+      transPtr <- Call.char trans+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      alphaPtr <- Call.double alpha+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      betaPtr <- Call.double beta+      cPtr <- Call.ioarray c+      liftIO $ FFI.hfrk transrPtr uploPtr transPtr nPtr kPtr alphaPtr aPtr ldaPtr betaPtr cPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhgeqz.f>+hgeqz ::+   Char {- ^ job -} ->+   Char {- ^ compq -} ->+   Char {- ^ compz -} ->+   Int {- ^ ilo -} ->+   Int {- ^ ihi -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ h -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ t -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ q -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ z -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double), Int)+hgeqz job compq compz ilo ihi h t q z lwork = do+   let (hDim0,hDim1) = Call.sizes2 $ MutArray.shape h+   let (tDim0,tDim1) = Call.sizes2 $ MutArray.shape t+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = hDim0+   let ldh = hDim1+   let ldt = tDim1+   let ldq = qDim1+   let ldz = zDim1+   Call.assert "hgeqz: n == tDim0" (n == tDim0)+   Call.assert "hgeqz: n == qDim0" (n == qDim0)+   Call.assert "hgeqz: n == zDim0" (n == zDim0)+   alpha <- Call.newArray1 n+   beta <- Call.newArray1 n+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 n+   evalContT $ do+      jobPtr <- Call.char job+      compqPtr <- Call.char compq+      compzPtr <- Call.char compz+      nPtr <- Call.cint n+      iloPtr <- Call.cint ilo+      ihiPtr <- Call.cint ihi+      hPtr <- Call.ioarray h+      ldhPtr <- Call.cint ldh+      tPtr <- Call.ioarray t+      ldtPtr <- Call.cint ldt+      alphaPtr <- Call.ioarray alpha+      betaPtr <- Call.ioarray beta+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.hgeqz jobPtr compqPtr compzPtr nPtr iloPtr ihiPtr hPtr ldhPtr tPtr ldtPtr alphaPtr betaPtr qPtr ldqPtr zPtr ldzPtr workPtr lworkPtr rworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray alpha+         <*> Call.freezeArray beta+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhpcon.f>+hpcon ::+   Char {- ^ uplo -} ->+   Array ZeroInt (Complex Double) {- ^ ap -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Double {- ^ anorm -} ->+   IO (Double, Int)+hpcon uplo ap ipiv anorm = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = ipivDim0+   Call.assert "hpcon: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   work <- Call.newArray1 (2*n)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.array ap+      ipivPtr <- Call.array ipiv+      anormPtr <- Call.double anorm+      rcondPtr <- Call.alloca+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.hpcon uploPtr nPtr apPtr ipivPtr anormPtr rcondPtr workPtr infoPtr+      liftIO $ pure (,)+         <*> peek rcondPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhpev.f>+hpev ::+   Char {- ^ jobz -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt (Complex Double) {- ^ ap -} ->+   Int {- ^ ldz -} ->+   IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) (Complex Double), Int)+hpev jobz uplo n ap ldz = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   Call.assert "hpev: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   w <- Call.newArray1 n+   z <- Call.newArray2 n ldz+   work <- Call.newArray1 (maximum[1,2*n-1])+   rwork <- Call.newArray1 (maximum[1,3*n-2])+   evalContT $ do+      jobzPtr <- Call.char jobz+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.hpev jobzPtr uploPtr nPtr apPtr wPtr zPtr ldzPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhpevd.f>+hpevd ::+   Char {- ^ jobz -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt (Complex Double) {- ^ ap -} ->+   Int {- ^ ldz -} ->+   Int {- ^ lwork -} ->+   Int {- ^ lrwork -} ->+   Int {- ^ liwork -} ->+   IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) (Complex Double), Int)+hpevd jobz uplo n ap ldz lwork lrwork liwork = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   Call.assert "hpevd: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   w <- Call.newArray1 n+   z <- Call.newArray2 n ldz+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 (maximum[1,lrwork])+   iwork <- Call.newArray1 (maximum[1,liwork])+   evalContT $ do+      jobzPtr <- Call.char jobz+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      lrworkPtr <- Call.cint lrwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      infoPtr <- Call.alloca+      liftIO $ FFI.hpevd jobzPtr uploPtr nPtr apPtr wPtr zPtr ldzPtr workPtr lworkPtr rworkPtr lrworkPtr iworkPtr liworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhpevx.f>+hpevx ::+   Char {- ^ jobz -} ->+   Char {- ^ range -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt (Complex Double) {- ^ ap -} ->+   Double {- ^ vl -} ->+   Double {- ^ vu -} ->+   Int {- ^ il -} ->+   Int {- ^ iu -} ->+   Double {- ^ abstol -} ->+   Int {- ^ m -} ->+   Int {- ^ ldz -} ->+   IO (Int, Array ZeroInt Double, Array (ZeroInt,ZeroInt) (Complex Double), Array ZeroInt CInt, Int)+hpevx jobz range uplo n ap vl vu il iu abstol m ldz = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   Call.assert "hpevx: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   w <- Call.newArray1 n+   z <- Call.newArray2 (maximum[1,m]) ldz+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 (7*n)+   iwork <- Call.newArray1 (5*n)+   ifail <- Call.newArray1 n+   evalContT $ do+      jobzPtr <- Call.char jobz+      rangePtr <- Call.char range+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      vlPtr <- Call.double vl+      vuPtr <- Call.double vu+      ilPtr <- Call.cint il+      iuPtr <- Call.cint iu+      abstolPtr <- Call.double abstol+      mPtr <- Call.alloca+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      iworkPtr <- Call.ioarray iwork+      ifailPtr <- Call.ioarray ifail+      infoPtr <- Call.alloca+      liftIO $ FFI.hpevx jobzPtr rangePtr uploPtr nPtr apPtr vlPtr vuPtr ilPtr iuPtr abstolPtr mPtr wPtr zPtr ldzPtr workPtr rworkPtr iworkPtr ifailPtr infoPtr+      liftIO $ pure (,,,,)+         <*> fmap fromIntegral (peek mPtr)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> Call.freezeArray ifail+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhpgst.f>+hpgst ::+   Int {- ^ itype -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt (Complex Double) {- ^ ap -} ->+   Array ZeroInt (Complex Double) {- ^ bp -} ->+   IO (Int)+hpgst itype uplo n ap bp = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   let bpDim0 = Call.sizes1 $ Array.shape bp+   Call.assert "hpgst: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   Call.assert "hpgst: n*(n+1)`div`2 == bpDim0" (n*(n+1)`div`2 == bpDim0)+   evalContT $ do+      itypePtr <- Call.cint itype+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      bpPtr <- Call.array bp+      infoPtr <- Call.alloca+      liftIO $ FFI.hpgst itypePtr uploPtr nPtr apPtr bpPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhpgv.f>+hpgv ::+   Int {- ^ itype -} ->+   Char {- ^ jobz -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt (Complex Double) {- ^ ap -} ->+   IOArray ZeroInt (Complex Double) {- ^ bp -} ->+   Int {- ^ ldz -} ->+   IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) (Complex Double), Int)+hpgv itype jobz uplo n ap bp ldz = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   let bpDim0 = Call.sizes1 $ MutArray.shape bp+   Call.assert "hpgv: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   Call.assert "hpgv: n*(n+1)`div`2 == bpDim0" (n*(n+1)`div`2 == bpDim0)+   w <- Call.newArray1 n+   z <- Call.newArray2 n ldz+   work <- Call.newArray1 (maximum[1,2*n-1])+   rwork <- Call.newArray1 (maximum[1,3*n-2])+   evalContT $ do+      itypePtr <- Call.cint itype+      jobzPtr <- Call.char jobz+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      bpPtr <- Call.ioarray bp+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.hpgv itypePtr jobzPtr uploPtr nPtr apPtr bpPtr wPtr zPtr ldzPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhpgvd.f>+hpgvd ::+   Int {- ^ itype -} ->+   Char {- ^ jobz -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt (Complex Double) {- ^ ap -} ->+   IOArray ZeroInt (Complex Double) {- ^ bp -} ->+   Int {- ^ ldz -} ->+   Int {- ^ lwork -} ->+   Int {- ^ lrwork -} ->+   Int {- ^ liwork -} ->+   IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) (Complex Double), Int)+hpgvd itype jobz uplo n ap bp ldz lwork lrwork liwork = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   let bpDim0 = Call.sizes1 $ MutArray.shape bp+   Call.assert "hpgvd: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   Call.assert "hpgvd: n*(n+1)`div`2 == bpDim0" (n*(n+1)`div`2 == bpDim0)+   w <- Call.newArray1 n+   z <- Call.newArray2 n ldz+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 (maximum[1,lrwork])+   iwork <- Call.newArray1 (maximum[1,liwork])+   evalContT $ do+      itypePtr <- Call.cint itype+      jobzPtr <- Call.char jobz+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      bpPtr <- Call.ioarray bp+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      lrworkPtr <- Call.cint lrwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      infoPtr <- Call.alloca+      liftIO $ FFI.hpgvd itypePtr jobzPtr uploPtr nPtr apPtr bpPtr wPtr zPtr ldzPtr workPtr lworkPtr rworkPtr lrworkPtr iworkPtr liworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhpgvx.f>+hpgvx ::+   Int {- ^ itype -} ->+   Char {- ^ jobz -} ->+   Char {- ^ range -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt (Complex Double) {- ^ ap -} ->+   IOArray ZeroInt (Complex Double) {- ^ bp -} ->+   Double {- ^ vl -} ->+   Double {- ^ vu -} ->+   Int {- ^ il -} ->+   Int {- ^ iu -} ->+   Double {- ^ abstol -} ->+   Int {- ^ ldz -} ->+   IO (Int, Array ZeroInt Double, Array (ZeroInt,ZeroInt) (Complex Double), Array ZeroInt CInt, Int)+hpgvx itype jobz range uplo n ap bp vl vu il iu abstol ldz = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   let bpDim0 = Call.sizes1 $ MutArray.shape bp+   Call.assert "hpgvx: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   Call.assert "hpgvx: n*(n+1)`div`2 == bpDim0" (n*(n+1)`div`2 == bpDim0)+   w <- Call.newArray1 n+   z <- Call.newArray2 n ldz+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 (7*n)+   iwork <- Call.newArray1 (5*n)+   ifail <- Call.newArray1 n+   evalContT $ do+      itypePtr <- Call.cint itype+      jobzPtr <- Call.char jobz+      rangePtr <- Call.char range+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      bpPtr <- Call.ioarray bp+      vlPtr <- Call.double vl+      vuPtr <- Call.double vu+      ilPtr <- Call.cint il+      iuPtr <- Call.cint iu+      abstolPtr <- Call.double abstol+      mPtr <- Call.alloca+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      iworkPtr <- Call.ioarray iwork+      ifailPtr <- Call.ioarray ifail+      infoPtr <- Call.alloca+      liftIO $ FFI.hpgvx itypePtr jobzPtr rangePtr uploPtr nPtr apPtr bpPtr vlPtr vuPtr ilPtr iuPtr abstolPtr mPtr wPtr zPtr ldzPtr workPtr rworkPtr iworkPtr ifailPtr infoPtr+      liftIO $ pure (,,,,)+         <*> fmap fromIntegral (peek mPtr)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> Call.freezeArray ifail+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhprfs.f>+hprfs ::+   Char {- ^ uplo -} ->+   Array ZeroInt (Complex Double) {- ^ ap -} ->+   Array ZeroInt (Complex Double) {- ^ afp -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ x -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Int)+hprfs uplo ap afp ipiv b x = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let afpDim0 = Call.sizes1 $ Array.shape afp+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (xDim0,xDim1) = Call.sizes2 $ MutArray.shape x+   let n = ipivDim0+   let nrhs = bDim0+   let ldb = bDim1+   let ldx = xDim1+   Call.assert "hprfs: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   Call.assert "hprfs: n*(n+1)`div`2 == afpDim0" (n*(n+1)`div`2 == afpDim0)+   Call.assert "hprfs: nrhs == xDim0" (nrhs == xDim0)+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      apPtr <- Call.array ap+      afpPtr <- Call.array afp+      ipivPtr <- Call.array ipiv+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.hprfs uploPtr nPtr nrhsPtr apPtr afpPtr ipivPtr bPtr ldbPtr xPtr ldxPtr ferrPtr berrPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhpsv.f>+hpsv ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt (Complex Double) {- ^ ap -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   IO (Array ZeroInt CInt, Int)+hpsv uplo n ap b = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "hpsv: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   ipiv <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      apPtr <- Call.ioarray ap+      ipivPtr <- Call.ioarray ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.hpsv uploPtr nPtr nrhsPtr apPtr ipivPtr bPtr ldbPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhpsvx.f>+hpsvx ::+   Char {- ^ fact -} ->+   Char {- ^ uplo -} ->+   Array ZeroInt (Complex Double) {- ^ ap -} ->+   IOArray ZeroInt (Complex Double) {- ^ afp -} ->+   IOArray ZeroInt CInt {- ^ ipiv -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   Int {- ^ ldx -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Double), Double, Array ZeroInt Double, Array ZeroInt Double, Int)+hpsvx fact uplo ap afp ipiv b ldx = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let afpDim0 = Call.sizes1 $ MutArray.shape afp+   let ipivDim0 = Call.sizes1 $ MutArray.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let n = ipivDim0+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "hpsvx: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   Call.assert "hpsvx: n*(n+1)`div`2 == afpDim0" (n*(n+1)`div`2 == afpDim0)+   x <- Call.newArray2 nrhs ldx+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      factPtr <- Call.char fact+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      apPtr <- Call.array ap+      afpPtr <- Call.ioarray afp+      ipivPtr <- Call.ioarray ipiv+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      rcondPtr <- Call.alloca+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.hpsvx factPtr uploPtr nPtr nrhsPtr apPtr afpPtr ipivPtr bPtr ldbPtr xPtr ldxPtr rcondPtr ferrPtr berrPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,,,)+         <*> Call.freezeArray x+         <*> peek rcondPtr+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhptrd.f>+hptrd ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt (Complex Double) {- ^ ap -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt (Complex Double), Int)+hptrd uplo n ap = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   Call.assert "hptrd: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   d <- Call.newArray1 n+   e <- Call.newArray1 (n-1)+   tau <- Call.newArray1 (n-1)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      tauPtr <- Call.ioarray tau+      infoPtr <- Call.alloca+      liftIO $ FFI.hptrd uploPtr nPtr apPtr dPtr ePtr tauPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray d+         <*> Call.freezeArray e+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhptrf.f>+hptrf ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt (Complex Double) {- ^ ap -} ->+   IO (Array ZeroInt CInt, Int)+hptrf uplo n ap = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   Call.assert "hptrf: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   ipiv <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      ipivPtr <- Call.ioarray ipiv+      infoPtr <- Call.alloca+      liftIO $ FFI.hptrf uploPtr nPtr apPtr ipivPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhptri.f>+hptri ::+   Char {- ^ uplo -} ->+   IOArray ZeroInt (Complex Double) {- ^ ap -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   IO (Int)+hptri uplo ap ipiv = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = ipivDim0+   Call.assert "hptri: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   work <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      ipivPtr <- Call.array ipiv+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.hptri uploPtr nPtr apPtr ipivPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhptrs.f>+hptrs ::+   Char {- ^ uplo -} ->+   Array ZeroInt (Complex Double) {- ^ ap -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   IO (Int)+hptrs uplo ap ipiv b = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = ipivDim0+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "hptrs: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      apPtr <- Call.array ap+      ipivPtr <- Call.array ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.hptrs uploPtr nPtr nrhsPtr apPtr ipivPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhsein.f>+hsein ::+   Char {- ^ side -} ->+   Char {- ^ eigsrc -} ->+   Char {- ^ initv -} ->+   Array ZeroInt Bool {- ^ select -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ h -} ->+   IOArray ZeroInt (Complex Double) {- ^ w -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ vl -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ vr -} ->+   IO (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)+hsein side eigsrc initv select h w vl vr = do+   let selectDim0 = Call.sizes1 $ Array.shape select+   let (hDim0,hDim1) = Call.sizes2 $ Array.shape h+   let wDim0 = Call.sizes1 $ MutArray.shape w+   let (vlDim0,vlDim1) = Call.sizes2 $ MutArray.shape vl+   let (vrDim0,vrDim1) = Call.sizes2 $ MutArray.shape vr+   let n = selectDim0+   let ldh = hDim1+   let mm = vlDim0+   let ldvl = vlDim1+   let ldvr = vrDim1+   Call.assert "hsein: n == hDim0" (n == hDim0)+   Call.assert "hsein: n == wDim0" (n == wDim0)+   Call.assert "hsein: mm == vrDim0" (mm == vrDim0)+   work <- Call.newArray1 (n*n)+   rwork <- Call.newArray1 n+   ifaill <- Call.newArray1 mm+   ifailr <- Call.newArray1 mm+   evalContT $ do+      sidePtr <- Call.char side+      eigsrcPtr <- Call.char eigsrc+      initvPtr <- Call.char initv+      selectPtr <- Call.array select+      nPtr <- Call.cint n+      hPtr <- Call.array h+      ldhPtr <- Call.cint ldh+      wPtr <- Call.ioarray w+      vlPtr <- Call.ioarray vl+      ldvlPtr <- Call.cint ldvl+      vrPtr <- Call.ioarray vr+      ldvrPtr <- Call.cint ldvr+      mmPtr <- Call.cint mm+      mPtr <- Call.alloca+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      ifaillPtr <- Call.ioarray ifaill+      ifailrPtr <- Call.ioarray ifailr+      infoPtr <- Call.alloca+      liftIO $ FFI.hsein sidePtr eigsrcPtr initvPtr selectPtr nPtr hPtr ldhPtr wPtr vlPtr ldvlPtr vrPtr ldvrPtr mmPtr mPtr workPtr rworkPtr ifaillPtr ifailrPtr infoPtr+      liftIO $ pure (,,,)+         <*> fmap fromIntegral (peek mPtr)+         <*> Call.freezeArray ifaill+         <*> Call.freezeArray ifailr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhseqr.f>+hseqr ::+   Char {- ^ job -} ->+   Char {- ^ compz -} ->+   Int {- ^ ilo -} ->+   Int {- ^ ihi -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ h -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ z -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt (Complex Double), Int)+hseqr job compz ilo ihi h z lwork = do+   let (hDim0,hDim1) = Call.sizes2 $ MutArray.shape h+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = hDim0+   let ldh = hDim1+   let ldz = zDim1+   Call.assert "hseqr: n == zDim0" (n == zDim0)+   w <- Call.newArray1 n+   work <- Call.newArray1 lwork+   evalContT $ do+      jobPtr <- Call.char job+      compzPtr <- Call.char compz+      nPtr <- Call.cint n+      iloPtr <- Call.cint ilo+      ihiPtr <- Call.cint ihi+      hPtr <- Call.ioarray h+      ldhPtr <- Call.cint ldh+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.hseqr jobPtr compzPtr nPtr iloPtr ihiPtr hPtr ldhPtr wPtr zPtr ldzPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray w+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ilazlc.f>+ilalc ::+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IO CInt+ilalc m a = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      liftIO $ FFI.ilalc mPtr nPtr aPtr ldaPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ilazlr.f>+ilalr ::+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IO CInt+ilalr m a = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      liftIO $ FFI.ilalr mPtr nPtr aPtr ldaPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/izmax1.f>+imax1 ::+   Array ZeroInt (Complex Double) {- ^ zx -} ->+   Int {- ^ incx -} ->+   IO CInt+imax1 zx incx = do+   let zxDim0 = Call.sizes1 $ Array.shape zx+   let n = zxDim0+   evalContT $ do+      nPtr <- Call.cint n+      zxPtr <- Call.array zx+      incxPtr <- Call.cint incx+      liftIO $ FFI.imax1 nPtr zxPtr incxPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlabrd.f>+labrd ::+   Int {- ^ m -} ->+   Int {- ^ nb -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Int {- ^ ldx -} ->+   Int {- ^ ldy -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt (Complex Double), Array ZeroInt (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double))+labrd m nb a ldx ldy = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   d <- Call.newArray1 nb+   e <- Call.newArray1 nb+   tauq <- Call.newArray1 nb+   taup <- Call.newArray1 nb+   x <- Call.newArray2 nb ldx+   y <- Call.newArray2 nb ldy+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      nbPtr <- Call.cint nb+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      tauqPtr <- Call.ioarray tauq+      taupPtr <- Call.ioarray taup+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      yPtr <- Call.ioarray y+      ldyPtr <- Call.cint ldy+      liftIO $ FFI.labrd mPtr nPtr nbPtr aPtr ldaPtr dPtr ePtr tauqPtr taupPtr xPtr ldxPtr yPtr ldyPtr+      liftIO $ pure (,,,,,)+         <*> Call.freezeArray d+         <*> Call.freezeArray e+         <*> Call.freezeArray tauq+         <*> Call.freezeArray taup+         <*> Call.freezeArray x+         <*> Call.freezeArray y++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlacgv.f>+lacgv ::+   Int {- ^ n -} ->+   IOArray ZeroInt (Complex Double) {- ^ x -} ->+   Int {- ^ incx -} ->+   IO ()+lacgv n x incx = do+   let xDim0 = Call.sizes1 $ MutArray.shape x+   let _xSize = xDim0+   evalContT $ do+      nPtr <- Call.cint n+      xPtr <- Call.ioarray x+      incxPtr <- Call.cint incx+      liftIO $ FFI.lacgv nPtr xPtr incxPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlacn2.f>+lacn2 ::+   IOArray ZeroInt (Complex Double) {- ^ x -} ->+   Double {- ^ est -} ->+   Int {- ^ kase -} ->+   IOArray ZeroInt CInt {- ^ isave -} ->+   IO (Array ZeroInt (Complex Double), Double, Int)+lacn2 x est kase isave = do+   let xDim0 = Call.sizes1 $ MutArray.shape x+   let isaveDim0 = Call.sizes1 $ MutArray.shape isave+   let n = xDim0+   Call.assert "lacn2: 3 == isaveDim0" (3 == isaveDim0)+   v <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      vPtr <- Call.ioarray v+      xPtr <- Call.ioarray x+      estPtr <- Call.double est+      kasePtr <- Call.cint kase+      isavePtr <- Call.ioarray isave+      liftIO $ FFI.lacn2 nPtr vPtr xPtr estPtr kasePtr isavePtr+      liftIO $ pure (,,)+         <*> Call.freezeArray v+         <*> peek estPtr+         <*> fmap fromIntegral (peek kasePtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlacon.f>+lacon ::+   IOArray ZeroInt (Complex Double) {- ^ x -} ->+   Double {- ^ est -} ->+   Int {- ^ kase -} ->+   IO (Array ZeroInt (Complex Double), Double, Int)+lacon x est kase = do+   let xDim0 = Call.sizes1 $ MutArray.shape x+   let n = xDim0+   v <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      vPtr <- Call.ioarray v+      xPtr <- Call.ioarray x+      estPtr <- Call.double est+      kasePtr <- Call.cint kase+      liftIO $ FFI.lacon nPtr vPtr xPtr estPtr kasePtr+      liftIO $ pure (,,)+         <*> Call.freezeArray v+         <*> peek estPtr+         <*> fmap fromIntegral (peek kasePtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlacp2.f>+lacp2 ::+   Char {- ^ uplo -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Int {- ^ ldb -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Double))+lacp2 uplo m a ldb = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   b <- Call.newArray2 n ldb+   evalContT $ do+      uploPtr <- Call.char uplo+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      liftIO $ FFI.lacp2 uploPtr mPtr nPtr aPtr ldaPtr bPtr ldbPtr+      liftIO $ Call.freezeArray b++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlacpy.f>+lacpy ::+   Char {- ^ uplo -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Int {- ^ ldb -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Double))+lacpy uplo m a ldb = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   b <- Call.newArray2 n ldb+   evalContT $ do+      uploPtr <- Call.char uplo+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      liftIO $ FFI.lacpy uploPtr mPtr nPtr aPtr ldaPtr bPtr ldbPtr+      liftIO $ Call.freezeArray b++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlacrm.f>+lacrm ::+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->+   Int {- ^ ldc -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Double))+lacrm m a b ldc = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   Call.assert "lacrm: n == bDim0" (n == bDim0)+   c <- Call.newArray2 n ldc+   rwork <- Call.newArray1 (2*m*n)+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      rworkPtr <- Call.ioarray rwork+      liftIO $ FFI.lacrm mPtr nPtr aPtr ldaPtr bPtr ldbPtr cPtr ldcPtr rworkPtr+      liftIO $ Call.freezeArray c++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlacrt.f>+lacrt ::+   IOArray ZeroInt (Complex Double) {- ^ cx -} ->+   Int {- ^ incx -} ->+   IOArray ZeroInt (Complex Double) {- ^ cy -} ->+   Int {- ^ incy -} ->+   Complex Double {- ^ c -} ->+   Complex Double {- ^ s -} ->+   IO ()+lacrt cx incx cy incy c s = do+   let cxDim0 = Call.sizes1 $ MutArray.shape cx+   let cyDim0 = Call.sizes1 $ MutArray.shape cy+   let n = cxDim0+   Call.assert "lacrt: n == cyDim0" (n == cyDim0)+   evalContT $ do+      nPtr <- Call.cint n+      cxPtr <- Call.ioarray cx+      incxPtr <- Call.cint incx+      cyPtr <- Call.ioarray cy+      incyPtr <- Call.cint incy+      cPtr <- Call.complexDouble c+      sPtr <- Call.complexDouble s+      liftIO $ FFI.lacrt nPtr cxPtr incxPtr cyPtr incyPtr cPtr sPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlaed0.f>+laed0 ::+   Int {- ^ qsiz -} ->+   IOArray ZeroInt Double {- ^ d -} ->+   IOArray ZeroInt Double {- ^ e -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ q -} ->+   Int {- ^ ldqs -} ->+   Int {- ^ rworkSize -} ->+   Int {- ^ iworkSize -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Double), Int)+laed0 qsiz d e q ldqs rworkSize iworkSize = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let n = dDim0+   let ldq = qDim1+   Call.assert "laed0: n-1 == eDim0" (n-1 == eDim0)+   Call.assert "laed0: n == qDim0" (n == qDim0)+   qstore <- Call.newArray2 n ldqs+   rwork <- Call.newArray1 rworkSize+   iwork <- Call.newArray1 iworkSize+   evalContT $ do+      qsizPtr <- Call.cint qsiz+      nPtr <- Call.cint n+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      qstorePtr <- Call.ioarray qstore+      ldqsPtr <- Call.cint ldqs+      rworkPtr <- Call.ioarray rwork+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.laed0 qsizPtr nPtr dPtr ePtr qPtr ldqPtr qstorePtr ldqsPtr rworkPtr iworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray qstore+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlaed7.f>+laed7 ::+   Int {- ^ cutpnt -} ->+   Int {- ^ qsiz -} ->+   Int {- ^ tlvls -} ->+   Int {- ^ curlvl -} ->+   Int {- ^ curpbm -} ->+   IOArray ZeroInt Double {- ^ d -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ q -} ->+   Double {- ^ rho -} ->+   IOArray ZeroInt Double {- ^ qstore -} ->+   IOArray ZeroInt CInt {- ^ qptr -} ->+   Array ZeroInt CInt {- ^ prmptr -} ->+   Array ZeroInt CInt {- ^ perm -} ->+   Array ZeroInt CInt {- ^ givptr -} ->+   Array (ZeroInt,ZeroInt) CInt {- ^ givcol -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ givnum -} ->+   Int {- ^ rworkSize -} ->+   IO (Array ZeroInt CInt, Int)+laed7 cutpnt qsiz tlvls curlvl curpbm d q rho qstore qptr prmptr perm givptr givcol givnum rworkSize = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let qstoreDim0 = Call.sizes1 $ MutArray.shape qstore+   let qptrDim0 = Call.sizes1 $ MutArray.shape qptr+   let prmptrDim0 = Call.sizes1 $ Array.shape prmptr+   let permDim0 = Call.sizes1 $ Array.shape perm+   let givptrDim0 = Call.sizes1 $ Array.shape givptr+   let (givcolDim0,givcolDim1) = Call.sizes2 $ Array.shape givcol+   let (givnumDim0,givnumDim1) = Call.sizes2 $ Array.shape givnum+   let n = dDim0+   let ldq = qDim1+   let nlgn = prmptrDim0+   Call.assert "laed7: n == qDim0" (n == qDim0)+   Call.assert "laed7: n^!2+1 == qstoreDim0" (n^!2+1 == qstoreDim0)+   Call.assert "laed7: n+2 == qptrDim0" (n+2 == qptrDim0)+   Call.assert "laed7: nlgn == permDim0" (nlgn == permDim0)+   Call.assert "laed7: nlgn == givptrDim0" (nlgn == givptrDim0)+   Call.assert "laed7: nlgn == givcolDim0" (nlgn == givcolDim0)+   Call.assert "laed7: 2 == givcolDim1" (2 == givcolDim1)+   Call.assert "laed7: nlgn == givnumDim0" (nlgn == givnumDim0)+   Call.assert "laed7: 2 == givnumDim1" (2 == givnumDim1)+   indxq <- Call.newArray1 n+   work <- Call.newArray1 (qsiz*n)+   rwork <- Call.newArray1 rworkSize+   iwork <- Call.newArray1 (4*n)+   evalContT $ do+      nPtr <- Call.cint n+      cutpntPtr <- Call.cint cutpnt+      qsizPtr <- Call.cint qsiz+      tlvlsPtr <- Call.cint tlvls+      curlvlPtr <- Call.cint curlvl+      curpbmPtr <- Call.cint curpbm+      dPtr <- Call.ioarray d+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      rhoPtr <- Call.double rho+      indxqPtr <- Call.ioarray indxq+      qstorePtr <- Call.ioarray qstore+      qptrPtr <- Call.ioarray qptr+      prmptrPtr <- Call.array prmptr+      permPtr <- Call.array perm+      givptrPtr <- Call.array givptr+      givcolPtr <- Call.array givcol+      givnumPtr <- Call.array givnum+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.laed7 nPtr cutpntPtr qsizPtr tlvlsPtr curlvlPtr curpbmPtr dPtr qPtr ldqPtr rhoPtr indxqPtr qstorePtr qptrPtr prmptrPtr permPtr givptrPtr givcolPtr givnumPtr workPtr rworkPtr iworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray indxq+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlaed8.f>+laed8 ::+   Int {- ^ qsiz -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ q -} ->+   IOArray ZeroInt Double {- ^ d -} ->+   Double {- ^ rho -} ->+   Int {- ^ cutpnt -} ->+   Array ZeroInt Double {- ^ z -} ->+   Int {- ^ ldq2 -} ->+   Array ZeroInt CInt {- ^ indxq -} ->+   IO (Int, Double, Array ZeroInt Double, Array (ZeroInt,ZeroInt) (Complex Double), Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int, Array (ZeroInt,ZeroInt) CInt, Array (ZeroInt,ZeroInt) Double, Int)+laed8 qsiz q d rho cutpnt z ldq2 indxq = do+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let zDim0 = Call.sizes1 $ Array.shape z+   let indxqDim0 = Call.sizes1 $ Array.shape indxq+   let n = qDim0+   let ldq = qDim1+   Call.assert "laed8: n == dDim0" (n == dDim0)+   Call.assert "laed8: n == zDim0" (n == zDim0)+   Call.assert "laed8: n == indxqDim0" (n == indxqDim0)+   dlamda <- Call.newArray1 n+   q2 <- Call.newArray2 n ldq2+   w <- Call.newArray1 n+   indxp <- Call.newArray1 n+   indx <- Call.newArray1 n+   perm <- Call.newArray1 n+   givcol <- Call.newArray2 n 2+   givnum <- Call.newArray2 n 2+   evalContT $ do+      kPtr <- Call.alloca+      nPtr <- Call.cint n+      qsizPtr <- Call.cint qsiz+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      dPtr <- Call.ioarray d+      rhoPtr <- Call.double rho+      cutpntPtr <- Call.cint cutpnt+      zPtr <- Call.array z+      dlamdaPtr <- Call.ioarray dlamda+      q2Ptr <- Call.ioarray q2+      ldq2Ptr <- Call.cint ldq2+      wPtr <- Call.ioarray w+      indxpPtr <- Call.ioarray indxp+      indxPtr <- Call.ioarray indx+      indxqPtr <- Call.array indxq+      permPtr <- Call.ioarray perm+      givptrPtr <- Call.alloca+      givcolPtr <- Call.ioarray givcol+      givnumPtr <- Call.ioarray givnum+      infoPtr <- Call.alloca+      liftIO $ FFI.laed8 kPtr nPtr qsizPtr qPtr ldqPtr dPtr rhoPtr cutpntPtr zPtr dlamdaPtr q2Ptr ldq2Ptr wPtr indxpPtr indxPtr indxqPtr permPtr givptrPtr givcolPtr givnumPtr infoPtr+      liftIO $ pure (,,,,,,,,,,,)+         <*> fmap fromIntegral (peek kPtr)+         <*> peek rhoPtr+         <*> Call.freezeArray dlamda+         <*> Call.freezeArray q2+         <*> Call.freezeArray w+         <*> Call.freezeArray indxp+         <*> Call.freezeArray indx+         <*> Call.freezeArray perm+         <*> fmap fromIntegral (peek givptrPtr)+         <*> Call.freezeArray givcol+         <*> Call.freezeArray givnum+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlaein.f>+laein ::+   Bool {- ^ rightv -} ->+   Bool {- ^ noinit -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ h -} ->+   Complex Double {- ^ w -} ->+   IOArray ZeroInt (Complex Double) {- ^ v -} ->+   Int {- ^ ldb -} ->+   Double {- ^ eps3 -} ->+   Double {- ^ smlnum -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Double), Int)+laein rightv noinit h w v ldb eps3 smlnum = do+   let (hDim0,hDim1) = Call.sizes2 $ Array.shape h+   let vDim0 = Call.sizes1 $ MutArray.shape v+   let n = hDim0+   let ldh = hDim1+   Call.assert "laein: n == vDim0" (n == vDim0)+   b <- Call.newArray2 n ldb+   rwork <- Call.newArray1 n+   evalContT $ do+      rightvPtr <- Call.bool rightv+      noinitPtr <- Call.bool noinit+      nPtr <- Call.cint n+      hPtr <- Call.array h+      ldhPtr <- Call.cint ldh+      wPtr <- Call.complexDouble w+      vPtr <- Call.ioarray v+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      rworkPtr <- Call.ioarray rwork+      eps3Ptr <- Call.double eps3+      smlnumPtr <- Call.double smlnum+      infoPtr <- Call.alloca+      liftIO $ FFI.laein rightvPtr noinitPtr nPtr hPtr ldhPtr wPtr vPtr bPtr ldbPtr rworkPtr eps3Ptr smlnumPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray b+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlaesy.f>+laesy ::+   Complex Double {- ^ a -} ->+   Complex Double {- ^ b -} ->+   Complex Double {- ^ c -} ->+   IO (Complex Double, Complex Double, Complex Double, Complex Double, Complex Double)+laesy a b c = do+   evalContT $ do+      aPtr <- Call.complexDouble a+      bPtr <- Call.complexDouble b+      cPtr <- Call.complexDouble c+      rt1Ptr <- Call.alloca+      rt2Ptr <- Call.alloca+      evscalPtr <- Call.alloca+      cs1Ptr <- Call.alloca+      sn1Ptr <- Call.alloca+      liftIO $ FFI.laesy aPtr bPtr cPtr rt1Ptr rt2Ptr evscalPtr cs1Ptr sn1Ptr+      liftIO $ pure (,,,,)+         <*> peek rt1Ptr+         <*> peek rt2Ptr+         <*> peek evscalPtr+         <*> peek cs1Ptr+         <*> peek sn1Ptr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlaev2.f>+laev2 ::+   Complex Double {- ^ a -} ->+   Complex Double {- ^ b -} ->+   Complex Double {- ^ c -} ->+   IO (Double, Double, Double, Complex Double)+laev2 a b c = do+   evalContT $ do+      aPtr <- Call.complexDouble a+      bPtr <- Call.complexDouble b+      cPtr <- Call.complexDouble c+      rt1Ptr <- Call.alloca+      rt2Ptr <- Call.alloca+      cs1Ptr <- Call.alloca+      sn1Ptr <- Call.alloca+      liftIO $ FFI.laev2 aPtr bPtr cPtr rt1Ptr rt2Ptr cs1Ptr sn1Ptr+      liftIO $ pure (,,,)+         <*> peek rt1Ptr+         <*> peek rt2Ptr+         <*> peek cs1Ptr+         <*> peek sn1Ptr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlag2c.f>+lag2c ::+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Int {- ^ ldsa -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Float), Int)+lag2c m a ldsa = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   sa <- Call.newArray2 n ldsa+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      saPtr <- Call.ioarray sa+      ldsaPtr <- Call.cint ldsa+      infoPtr <- Call.alloca+      liftIO $ FFI.lag2c mPtr nPtr aPtr ldaPtr saPtr ldsaPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray sa+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlags2.f>+lags2 ::+   Bool {- ^ upper -} ->+   Double {- ^ a1 -} ->+   Complex Double {- ^ a2 -} ->+   Double {- ^ a3 -} ->+   Double {- ^ b1 -} ->+   Complex Double {- ^ b2 -} ->+   Double {- ^ b3 -} ->+   IO (Double, Complex Double, Double, Complex Double, Double, Complex Double)+lags2 upper a1 a2 a3 b1 b2 b3 = do+   evalContT $ do+      upperPtr <- Call.bool upper+      a1Ptr <- Call.double a1+      a2Ptr <- Call.complexDouble a2+      a3Ptr <- Call.double a3+      b1Ptr <- Call.double b1+      b2Ptr <- Call.complexDouble b2+      b3Ptr <- Call.double b3+      csuPtr <- Call.alloca+      snuPtr <- Call.alloca+      csvPtr <- Call.alloca+      snvPtr <- Call.alloca+      csqPtr <- Call.alloca+      snqPtr <- Call.alloca+      liftIO $ FFI.lags2 upperPtr a1Ptr a2Ptr a3Ptr b1Ptr b2Ptr b3Ptr csuPtr snuPtr csvPtr snvPtr csqPtr snqPtr+      liftIO $ pure (,,,,,)+         <*> peek csuPtr+         <*> peek snuPtr+         <*> peek csvPtr+         <*> peek snvPtr+         <*> peek csqPtr+         <*> peek snqPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlagtm.f>+lagtm ::+   Char {- ^ trans -} ->+   Double {- ^ alpha -} ->+   Array ZeroInt (Complex Double) {- ^ dl -} ->+   Array ZeroInt (Complex Double) {- ^ d -} ->+   Array ZeroInt (Complex Double) {- ^ du -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ x -} ->+   Double {- ^ beta -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   IO ()+lagtm trans alpha dl d du x beta b = do+   let dlDim0 = Call.sizes1 $ Array.shape dl+   let dDim0 = Call.sizes1 $ Array.shape d+   let duDim0 = Call.sizes1 $ Array.shape du+   let (xDim0,xDim1) = Call.sizes2 $ Array.shape x+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = dDim0+   let nrhs = xDim0+   let ldx = xDim1+   let ldb = bDim1+   Call.assert "lagtm: n-1 == dlDim0" (n-1 == dlDim0)+   Call.assert "lagtm: n-1 == duDim0" (n-1 == duDim0)+   Call.assert "lagtm: nrhs == bDim0" (nrhs == bDim0)+   evalContT $ do+      transPtr <- Call.char trans+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      alphaPtr <- Call.double alpha+      dlPtr <- Call.array dl+      dPtr <- Call.array d+      duPtr <- Call.array du+      xPtr <- Call.array x+      ldxPtr <- Call.cint ldx+      betaPtr <- Call.double beta+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      liftIO $ FFI.lagtm transPtr nPtr nrhsPtr alphaPtr dlPtr dPtr duPtr xPtr ldxPtr betaPtr bPtr ldbPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlahef.f>+lahef ::+   Char {- ^ uplo -} ->+   Int {- ^ nb -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Int {- ^ ldw -} ->+   IO (Int, Array ZeroInt CInt, Array (ZeroInt,ZeroInt) (Complex Double), Int)+lahef uplo nb a ldw = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   ipiv <- Call.newArray1 n+   w <- Call.newArray2 nb ldw+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nbPtr <- Call.cint nb+      kbPtr <- Call.alloca+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.ioarray ipiv+      wPtr <- Call.ioarray w+      ldwPtr <- Call.cint ldw+      infoPtr <- Call.alloca+      liftIO $ FFI.lahef uploPtr nPtr nbPtr kbPtr aPtr ldaPtr ipivPtr wPtr ldwPtr infoPtr+      liftIO $ pure (,,,)+         <*> fmap fromIntegral (peek kbPtr)+         <*> Call.freezeArray ipiv+         <*> Call.freezeArray w+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlahqr.f>+lahqr ::+   Bool {- ^ wantt -} ->+   Bool {- ^ wantz -} ->+   Int {- ^ ilo -} ->+   Int {- ^ ihi -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ h -} ->+   Int {- ^ iloz -} ->+   Int {- ^ ihiz -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ z -} ->+   IO (Array ZeroInt (Complex Double), Int)+lahqr wantt wantz ilo ihi h iloz ihiz z = do+   let (hDim0,hDim1) = Call.sizes2 $ MutArray.shape h+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = hDim0+   let ldh = hDim1+   let ldz = zDim1+   Call.assert "lahqr: n == zDim0" (n == zDim0)+   w <- Call.newArray1 n+   evalContT $ do+      wanttPtr <- Call.bool wantt+      wantzPtr <- Call.bool wantz+      nPtr <- Call.cint n+      iloPtr <- Call.cint ilo+      ihiPtr <- Call.cint ihi+      hPtr <- Call.ioarray h+      ldhPtr <- Call.cint ldh+      wPtr <- Call.ioarray w+      ilozPtr <- Call.cint iloz+      ihizPtr <- Call.cint ihiz+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      infoPtr <- Call.alloca+      liftIO $ FFI.lahqr wanttPtr wantzPtr nPtr iloPtr ihiPtr hPtr ldhPtr wPtr ilozPtr ihizPtr zPtr ldzPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray w+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlahr2.f>+lahr2 ::+   Int {- ^ n -} ->+   Int {- ^ k -} ->+   Int {- ^ nb -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Int {- ^ ldt -} ->+   Int {- ^ ldy -} ->+   IO (Array ZeroInt (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double))+lahr2 n k nb a ldt ldy = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let lda = aDim1+   Call.assert "lahr2: n-k+1 == aDim0" (n-k+1 == aDim0)+   tau <- Call.newArray1 nb+   t <- Call.newArray2 nb ldt+   y <- Call.newArray2 nb ldy+   evalContT $ do+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      nbPtr <- Call.cint nb+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      tPtr <- Call.ioarray t+      ldtPtr <- Call.cint ldt+      yPtr <- Call.ioarray y+      ldyPtr <- Call.cint ldy+      liftIO $ FFI.lahr2 nPtr kPtr nbPtr aPtr ldaPtr tauPtr tPtr ldtPtr yPtr ldyPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray tau+         <*> Call.freezeArray t+         <*> Call.freezeArray y++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlaic1.f>+laic1 ::+   Int {- ^ job -} ->+   Array ZeroInt (Complex Double) {- ^ x -} ->+   Double {- ^ sest -} ->+   Array ZeroInt (Complex Double) {- ^ w -} ->+   Complex Double {- ^ gamma -} ->+   IO (Double, Complex Double, Complex Double)+laic1 job x sest w gamma = do+   let xDim0 = Call.sizes1 $ Array.shape x+   let wDim0 = Call.sizes1 $ Array.shape w+   let j = xDim0+   Call.assert "laic1: j == wDim0" (j == wDim0)+   evalContT $ do+      jobPtr <- Call.cint job+      jPtr <- Call.cint j+      xPtr <- Call.array x+      sestPtr <- Call.double sest+      wPtr <- Call.array w+      gammaPtr <- Call.complexDouble gamma+      sestprPtr <- Call.alloca+      sPtr <- Call.alloca+      cPtr <- Call.alloca+      liftIO $ FFI.laic1 jobPtr jPtr xPtr sestPtr wPtr gammaPtr sestprPtr sPtr cPtr+      liftIO $ pure (,,)+         <*> peek sestprPtr+         <*> peek sPtr+         <*> peek cPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlals0.f>+lals0 ::+   Int {- ^ icompq -} ->+   Int {- ^ nl -} ->+   Int {- ^ nr -} ->+   Int {- ^ sqre -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   Int {- ^ ldbx -} ->+   Array ZeroInt CInt {- ^ perm -} ->+   Int {- ^ givptr -} ->+   Array (ZeroInt,ZeroInt) CInt {- ^ givcol -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ givnum -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ poles -} ->+   Array ZeroInt Double {- ^ difl -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ difr -} ->+   Array ZeroInt Double {- ^ z -} ->+   Double {- ^ c -} ->+   Double {- ^ s -} ->+   Int {- ^ rworkSize -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Double), Int)+lals0 icompq nl nr sqre b ldbx perm givptr givcol givnum poles difl difr z c s rworkSize = do+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let permDim0 = Call.sizes1 $ Array.shape perm+   let (givcolDim0,givcolDim1) = Call.sizes2 $ Array.shape givcol+   let (givnumDim0,givnumDim1) = Call.sizes2 $ Array.shape givnum+   let (polesDim0,polesDim1) = Call.sizes2 $ Array.shape poles+   let diflDim0 = Call.sizes1 $ Array.shape difl+   let (difrDim0,difrDim1) = Call.sizes2 $ Array.shape difr+   let zDim0 = Call.sizes1 $ Array.shape z+   let nrhs = bDim0+   let ldb = bDim1+   let _n = permDim0+   let ldgcol = givcolDim1+   let ldgnum = givnumDim1+   let k = diflDim0+   Call.assert "lals0: 2 == givcolDim0" (2 == givcolDim0)+   Call.assert "lals0: 2 == givnumDim0" (2 == givnumDim0)+   Call.assert "lals0: 2 == polesDim0" (2 == polesDim0)+   Call.assert "lals0: ldgnum == polesDim1" (ldgnum == polesDim1)+   Call.assert "lals0: 2 == difrDim0" (2 == difrDim0)+   Call.assert "lals0: ldgnum == difrDim1" (ldgnum == difrDim1)+   Call.assert "lals0: k == zDim0" (k == zDim0)+   bx <- Call.newArray2 nrhs ldbx+   rwork <- Call.newArray1 rworkSize+   evalContT $ do+      icompqPtr <- Call.cint icompq+      nlPtr <- Call.cint nl+      nrPtr <- Call.cint nr+      sqrePtr <- Call.cint sqre+      nrhsPtr <- Call.cint nrhs+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      bxPtr <- Call.ioarray bx+      ldbxPtr <- Call.cint ldbx+      permPtr <- Call.array perm+      givptrPtr <- Call.cint givptr+      givcolPtr <- Call.array givcol+      ldgcolPtr <- Call.cint ldgcol+      givnumPtr <- Call.array givnum+      ldgnumPtr <- Call.cint ldgnum+      polesPtr <- Call.array poles+      diflPtr <- Call.array difl+      difrPtr <- Call.array difr+      zPtr <- Call.array z+      kPtr <- Call.cint k+      cPtr <- Call.double c+      sPtr <- Call.double s+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.lals0 icompqPtr nlPtr nrPtr sqrePtr nrhsPtr bPtr ldbPtr bxPtr ldbxPtr permPtr givptrPtr givcolPtr ldgcolPtr givnumPtr ldgnumPtr polesPtr diflPtr difrPtr zPtr kPtr cPtr sPtr rworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray bx+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlalsa.f>+lalsa ::+   Int {- ^ icompq -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   Int {- ^ ldbx -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ u -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ vt -} ->+   Array ZeroInt CInt {- ^ k -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ difl -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ difr -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ z -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ poles -} ->+   Array ZeroInt CInt {- ^ givptr -} ->+   Array (ZeroInt,ZeroInt) CInt {- ^ givcol -} ->+   Array (ZeroInt,ZeroInt) CInt {- ^ perm -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ givnum -} ->+   Array ZeroInt Double {- ^ c -} ->+   Array ZeroInt Double {- ^ s -} ->+   Int {- ^ rworkSize -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Double), Int)+lalsa icompq b ldbx u vt k difl difr z poles givptr givcol perm givnum c s rworkSize = do+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let (uDim0,uDim1) = Call.sizes2 $ Array.shape u+   let (vtDim0,vtDim1) = Call.sizes2 $ Array.shape vt+   let kDim0 = Call.sizes1 $ Array.shape k+   let (diflDim0,diflDim1) = Call.sizes2 $ Array.shape difl+   let (difrDim0,difrDim1) = Call.sizes2 $ Array.shape difr+   let (zDim0,zDim1) = Call.sizes2 $ Array.shape z+   let (polesDim0,polesDim1) = Call.sizes2 $ Array.shape poles+   let givptrDim0 = Call.sizes1 $ Array.shape givptr+   let (givcolDim0,givcolDim1) = Call.sizes2 $ Array.shape givcol+   let (permDim0,permDim1) = Call.sizes2 $ Array.shape perm+   let (givnumDim0,givnumDim1) = Call.sizes2 $ Array.shape givnum+   let cDim0 = Call.sizes1 $ Array.shape c+   let sDim0 = Call.sizes1 $ Array.shape s+   let nrhs = bDim0+   let ldb = bDim1+   let smlsiz = uDim0+   let ldu = uDim1+   let n = kDim0+   let nlvl = diflDim0+   let ldgcol = givcolDim1+   Call.assert "lalsa: smlsiz+1 == vtDim0" (smlsiz+1 == vtDim0)+   Call.assert "lalsa: ldu == vtDim1" (ldu == vtDim1)+   Call.assert "lalsa: ldu == diflDim1" (ldu == diflDim1)+   Call.assert "lalsa: 2*nlvl == difrDim0" (2*nlvl == difrDim0)+   Call.assert "lalsa: ldu == difrDim1" (ldu == difrDim1)+   Call.assert "lalsa: nlvl == zDim0" (nlvl == zDim0)+   Call.assert "lalsa: ldu == zDim1" (ldu == zDim1)+   Call.assert "lalsa: 2*nlvl == polesDim0" (2*nlvl == polesDim0)+   Call.assert "lalsa: ldu == polesDim1" (ldu == polesDim1)+   Call.assert "lalsa: n == givptrDim0" (n == givptrDim0)+   Call.assert "lalsa: 2*nlvl == givcolDim0" (2*nlvl == givcolDim0)+   Call.assert "lalsa: nlvl == permDim0" (nlvl == permDim0)+   Call.assert "lalsa: ldgcol == permDim1" (ldgcol == permDim1)+   Call.assert "lalsa: 2*nlvl == givnumDim0" (2*nlvl == givnumDim0)+   Call.assert "lalsa: ldu == givnumDim1" (ldu == givnumDim1)+   Call.assert "lalsa: n == cDim0" (n == cDim0)+   Call.assert "lalsa: n == sDim0" (n == sDim0)+   bx <- Call.newArray2 nrhs ldbx+   rwork <- Call.newArray1 rworkSize+   iwork <- Call.newArray1 (3*n)+   evalContT $ do+      icompqPtr <- Call.cint icompq+      smlsizPtr <- Call.cint smlsiz+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      bxPtr <- Call.ioarray bx+      ldbxPtr <- Call.cint ldbx+      uPtr <- Call.array u+      lduPtr <- Call.cint ldu+      vtPtr <- Call.array vt+      kPtr <- Call.array k+      diflPtr <- Call.array difl+      difrPtr <- Call.array difr+      zPtr <- Call.array z+      polesPtr <- Call.array poles+      givptrPtr <- Call.array givptr+      givcolPtr <- Call.array givcol+      ldgcolPtr <- Call.cint ldgcol+      permPtr <- Call.array perm+      givnumPtr <- Call.array givnum+      cPtr <- Call.array c+      sPtr <- Call.array s+      rworkPtr <- Call.ioarray rwork+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.lalsa icompqPtr smlsizPtr nPtr nrhsPtr bPtr ldbPtr bxPtr ldbxPtr uPtr lduPtr vtPtr kPtr diflPtr difrPtr zPtr polesPtr givptrPtr givcolPtr ldgcolPtr permPtr givnumPtr cPtr sPtr rworkPtr iworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray bx+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlalsd.f>+lalsd ::+   Char {- ^ uplo -} ->+   Int {- ^ smlsiz -} ->+   IOArray ZeroInt Double {- ^ d -} ->+   IOArray ZeroInt Double {- ^ e -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   Double {- ^ rcond -} ->+   Int {- ^ rworkSize -} ->+   Int {- ^ iworkSize -} ->+   IO (Int, Int)+lalsd uplo smlsiz d e b rcond rworkSize iworkSize = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = dDim0+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "lalsd: n-1 == eDim0" (n-1 == eDim0)+   work <- Call.newArray1 (n*nrhs)+   rwork <- Call.newArray1 rworkSize+   iwork <- Call.newArray1 iworkSize+   evalContT $ do+      uploPtr <- Call.char uplo+      smlsizPtr <- Call.cint smlsiz+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      rcondPtr <- Call.double rcond+      rankPtr <- Call.alloca+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.lalsd uploPtr smlsizPtr nPtr nrhsPtr dPtr ePtr bPtr ldbPtr rcondPtr rankPtr workPtr rworkPtr iworkPtr infoPtr+      liftIO $ pure (,)+         <*> fmap fromIntegral (peek rankPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlangb.f>+langb ::+   Char {- ^ norm -} ->+   Int {- ^ kl -} ->+   Int {- ^ ku -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ ab -} ->+   Int {- ^ lwork -} ->+   IO Double+langb norm kl ku ab lwork = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let n = abDim0+   let ldab = abDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      normPtr <- Call.char norm+      nPtr <- Call.cint n+      klPtr <- Call.cint kl+      kuPtr <- Call.cint ku+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      workPtr <- Call.ioarray work+      liftIO $ FFI.langb normPtr nPtr klPtr kuPtr abPtr ldabPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlange.f>+lange ::+   Char {- ^ norm -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO Double+lange norm m a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      normPtr <- Call.char norm+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      workPtr <- Call.ioarray work+      liftIO $ FFI.lange normPtr mPtr nPtr aPtr ldaPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlangt.f>+langt ::+   Char {- ^ norm -} ->+   Array ZeroInt (Complex Double) {- ^ dl -} ->+   Array ZeroInt (Complex Double) {- ^ d -} ->+   Array ZeroInt (Complex Double) {- ^ du -} ->+   IO Double+langt norm dl d du = do+   let dlDim0 = Call.sizes1 $ Array.shape dl+   let dDim0 = Call.sizes1 $ Array.shape d+   let duDim0 = Call.sizes1 $ Array.shape du+   let n = dDim0+   Call.assert "langt: n-1 == dlDim0" (n-1 == dlDim0)+   Call.assert "langt: n-1 == duDim0" (n-1 == duDim0)+   evalContT $ do+      normPtr <- Call.char norm+      nPtr <- Call.cint n+      dlPtr <- Call.array dl+      dPtr <- Call.array d+      duPtr <- Call.array du+      liftIO $ FFI.langt normPtr nPtr dlPtr dPtr duPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlanhb.f>+lanhb ::+   Char {- ^ norm -} ->+   Char {- ^ uplo -} ->+   Int {- ^ k -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ ab -} ->+   Int {- ^ lwork -} ->+   IO Double+lanhb norm uplo k ab lwork = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let n = abDim0+   let ldab = abDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      normPtr <- Call.char norm+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      workPtr <- Call.ioarray work+      liftIO $ FFI.lanhb normPtr uploPtr nPtr kPtr abPtr ldabPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlanhe.f>+lanhe ::+   Char {- ^ norm -} ->+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO Double+lanhe norm uplo a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      normPtr <- Call.char norm+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      workPtr <- Call.ioarray work+      liftIO $ FFI.lanhe normPtr uploPtr nPtr aPtr ldaPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlanhf.f>+lanhf ::+   Char {- ^ norm -} ->+   Char {- ^ transr -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Array ZeroInt (Complex Double) {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO Double+lanhf norm transr uplo n a lwork = do+   let aDim0 = Call.sizes1 $ Array.shape a+   Call.assert "lanhf: n*(n+1)`div`2 == aDim0" (n*(n+1)`div`2 == aDim0)+   work <- Call.newArray1 lwork+   evalContT $ do+      normPtr <- Call.char norm+      transrPtr <- Call.char transr+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.array a+      workPtr <- Call.ioarray work+      liftIO $ FFI.lanhf normPtr transrPtr uploPtr nPtr aPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlanhp.f>+lanhp ::+   Char {- ^ norm -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Array ZeroInt (Complex Double) {- ^ ap -} ->+   Int {- ^ lwork -} ->+   IO Double+lanhp norm uplo n ap lwork = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   Call.assert "lanhp: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      normPtr <- Call.char norm+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.array ap+      workPtr <- Call.ioarray work+      liftIO $ FFI.lanhp normPtr uploPtr nPtr apPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlanhs.f>+lanhs ::+   Char {- ^ norm -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO Double+lanhs norm a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      normPtr <- Call.char norm+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      workPtr <- Call.ioarray work+      liftIO $ FFI.lanhs normPtr nPtr aPtr ldaPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlanht.f>+lanht ::+   Char {- ^ norm -} ->+   Array ZeroInt Double {- ^ d -} ->+   Array ZeroInt (Complex Double) {- ^ e -} ->+   IO Double+lanht norm d e = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let eDim0 = Call.sizes1 $ Array.shape e+   let n = dDim0+   Call.assert "lanht: n-1 == eDim0" (n-1 == eDim0)+   evalContT $ do+      normPtr <- Call.char norm+      nPtr <- Call.cint n+      dPtr <- Call.array d+      ePtr <- Call.array e+      liftIO $ FFI.lanht normPtr nPtr dPtr ePtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlansb.f>+lansb ::+   Char {- ^ norm -} ->+   Char {- ^ uplo -} ->+   Int {- ^ k -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ ab -} ->+   Int {- ^ lwork -} ->+   IO Double+lansb norm uplo k ab lwork = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let n = abDim0+   let ldab = abDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      normPtr <- Call.char norm+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      workPtr <- Call.ioarray work+      liftIO $ FFI.lansb normPtr uploPtr nPtr kPtr abPtr ldabPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlansp.f>+lansp ::+   Char {- ^ norm -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Array ZeroInt (Complex Double) {- ^ ap -} ->+   Int {- ^ lwork -} ->+   IO Double+lansp norm uplo n ap lwork = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   Call.assert "lansp: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      normPtr <- Call.char norm+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.array ap+      workPtr <- Call.ioarray work+      liftIO $ FFI.lansp normPtr uploPtr nPtr apPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlansy.f>+lansy ::+   Char {- ^ norm -} ->+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO Double+lansy norm uplo a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      normPtr <- Call.char norm+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      workPtr <- Call.ioarray work+      liftIO $ FFI.lansy normPtr uploPtr nPtr aPtr ldaPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlantb.f>+lantb ::+   Char {- ^ norm -} ->+   Char {- ^ uplo -} ->+   Char {- ^ diag -} ->+   Int {- ^ k -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ ab -} ->+   Int {- ^ lwork -} ->+   IO Double+lantb norm uplo diag k ab lwork = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let n = abDim0+   let ldab = abDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      normPtr <- Call.char norm+      uploPtr <- Call.char uplo+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      workPtr <- Call.ioarray work+      liftIO $ FFI.lantb normPtr uploPtr diagPtr nPtr kPtr abPtr ldabPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlantp.f>+lantp ::+   Char {- ^ norm -} ->+   Char {- ^ uplo -} ->+   Char {- ^ diag -} ->+   Int {- ^ n -} ->+   Array ZeroInt (Complex Double) {- ^ ap -} ->+   Int {- ^ lwork -} ->+   IO Double+lantp norm uplo diag n ap lwork = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   Call.assert "lantp: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      normPtr <- Call.char norm+      uploPtr <- Call.char uplo+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      apPtr <- Call.array ap+      workPtr <- Call.ioarray work+      liftIO $ FFI.lantp normPtr uploPtr diagPtr nPtr apPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlantr.f>+lantr ::+   Char {- ^ norm -} ->+   Char {- ^ uplo -} ->+   Char {- ^ diag -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO Double+lantr norm uplo diag m a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      normPtr <- Call.char norm+      uploPtr <- Call.char uplo+      diagPtr <- Call.char diag+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      workPtr <- Call.ioarray work+      liftIO $ FFI.lantr normPtr uploPtr diagPtr mPtr nPtr aPtr ldaPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlapll.f>+lapll ::+   Int {- ^ n -} ->+   IOArray ZeroInt (Complex Double) {- ^ x -} ->+   Int {- ^ incx -} ->+   IOArray ZeroInt (Complex Double) {- ^ y -} ->+   Int {- ^ incy -} ->+   IO (Double)+lapll n x incx y incy = do+   let xDim0 = Call.sizes1 $ MutArray.shape x+   let yDim0 = Call.sizes1 $ MutArray.shape y+   Call.assert "lapll: 1+(n-1)*incx == xDim0" (1+(n-1)*incx == xDim0)+   Call.assert "lapll: 1+(n-1)*incy == yDim0" (1+(n-1)*incy == yDim0)+   evalContT $ do+      nPtr <- Call.cint n+      xPtr <- Call.ioarray x+      incxPtr <- Call.cint incx+      yPtr <- Call.ioarray y+      incyPtr <- Call.cint incy+      ssminPtr <- Call.alloca+      liftIO $ FFI.lapll nPtr xPtr incxPtr yPtr incyPtr ssminPtr+      liftIO $ peek ssminPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlapmr.f>+lapmr ::+   Bool {- ^ forwrd -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ x -} ->+   IOArray ZeroInt CInt {- ^ k -} ->+   IO ()+lapmr forwrd x k = do+   let (xDim0,xDim1) = Call.sizes2 $ MutArray.shape x+   let kDim0 = Call.sizes1 $ MutArray.shape k+   let n = xDim0+   let ldx = xDim1+   let m = kDim0+   evalContT $ do+      forwrdPtr <- Call.bool forwrd+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      kPtr <- Call.ioarray k+      liftIO $ FFI.lapmr forwrdPtr mPtr nPtr xPtr ldxPtr kPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlapmt.f>+lapmt ::+   Bool {- ^ forwrd -} ->+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ x -} ->+   IOArray ZeroInt CInt {- ^ k -} ->+   IO ()+lapmt forwrd m x k = do+   let (xDim0,xDim1) = Call.sizes2 $ MutArray.shape x+   let kDim0 = Call.sizes1 $ MutArray.shape k+   let n = xDim0+   let ldx = xDim1+   Call.assert "lapmt: n == kDim0" (n == kDim0)+   evalContT $ do+      forwrdPtr <- Call.bool forwrd+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      kPtr <- Call.ioarray k+      liftIO $ FFI.lapmt forwrdPtr mPtr nPtr xPtr ldxPtr kPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlaqgb.f>+laqgb ::+   Int {- ^ kl -} ->+   Int {- ^ ku -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ ab -} ->+   Array ZeroInt Double {- ^ r -} ->+   Array ZeroInt Double {- ^ c -} ->+   Double {- ^ rowcnd -} ->+   Double {- ^ colcnd -} ->+   Double {- ^ amax -} ->+   IO (Char)+laqgb kl ku ab r c rowcnd colcnd amax = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let rDim0 = Call.sizes1 $ Array.shape r+   let cDim0 = Call.sizes1 $ Array.shape c+   let n = abDim0+   let ldab = abDim1+   let m = rDim0+   Call.assert "laqgb: n == cDim0" (n == cDim0)+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      klPtr <- Call.cint kl+      kuPtr <- Call.cint ku+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      rPtr <- Call.array r+      cPtr <- Call.array c+      rowcndPtr <- Call.double rowcnd+      colcndPtr <- Call.double colcnd+      amaxPtr <- Call.double amax+      equedPtr <- Call.alloca+      liftIO $ FFI.laqgb mPtr nPtr klPtr kuPtr abPtr ldabPtr rPtr cPtr rowcndPtr colcndPtr amaxPtr equedPtr+      liftIO $ fmap castCCharToChar (peek equedPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlaqge.f>+laqge ::+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array ZeroInt Double {- ^ r -} ->+   Array ZeroInt Double {- ^ c -} ->+   Double {- ^ rowcnd -} ->+   Double {- ^ colcnd -} ->+   Double {- ^ amax -} ->+   IO (Char)+laqge a r c rowcnd colcnd amax = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let rDim0 = Call.sizes1 $ Array.shape r+   let cDim0 = Call.sizes1 $ Array.shape c+   let n = aDim0+   let lda = aDim1+   let m = rDim0+   Call.assert "laqge: n == cDim0" (n == cDim0)+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      rPtr <- Call.array r+      cPtr <- Call.array c+      rowcndPtr <- Call.double rowcnd+      colcndPtr <- Call.double colcnd+      amaxPtr <- Call.double amax+      equedPtr <- Call.alloca+      liftIO $ FFI.laqge mPtr nPtr aPtr ldaPtr rPtr cPtr rowcndPtr colcndPtr amaxPtr equedPtr+      liftIO $ fmap castCCharToChar (peek equedPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlaqhb.f>+laqhb ::+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ ab -} ->+   Double {- ^ scond -} ->+   Double {- ^ amax -} ->+   IO (Array ZeroInt Double, Char)+laqhb uplo kd ab scond amax = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let n = abDim0+   let ldab = abDim1+   s <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      sPtr <- Call.ioarray s+      scondPtr <- Call.double scond+      amaxPtr <- Call.double amax+      equedPtr <- Call.alloca+      liftIO $ FFI.laqhb uploPtr nPtr kdPtr abPtr ldabPtr sPtr scondPtr amaxPtr equedPtr+      liftIO $ pure (,)+         <*> Call.freezeArray s+         <*> fmap castCCharToChar (peek equedPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlaqhe.f>+laqhe ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array ZeroInt Double {- ^ s -} ->+   Double {- ^ scond -} ->+   Double {- ^ amax -} ->+   IO (Char)+laqhe uplo a s scond amax = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let sDim0 = Call.sizes1 $ Array.shape s+   let n = aDim0+   let lda = aDim1+   Call.assert "laqhe: n == sDim0" (n == sDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      sPtr <- Call.array s+      scondPtr <- Call.double scond+      amaxPtr <- Call.double amax+      equedPtr <- Call.alloca+      liftIO $ FFI.laqhe uploPtr nPtr aPtr ldaPtr sPtr scondPtr amaxPtr equedPtr+      liftIO $ fmap castCCharToChar (peek equedPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlaqhp.f>+laqhp ::+   Char {- ^ uplo -} ->+   IOArray ZeroInt (Complex Double) {- ^ ap -} ->+   Array ZeroInt Double {- ^ s -} ->+   Double {- ^ scond -} ->+   Double {- ^ amax -} ->+   IO (Char)+laqhp uplo ap s scond amax = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   let sDim0 = Call.sizes1 $ Array.shape s+   let n = sDim0+   Call.assert "laqhp: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      sPtr <- Call.array s+      scondPtr <- Call.double scond+      amaxPtr <- Call.double amax+      equedPtr <- Call.alloca+      liftIO $ FFI.laqhp uploPtr nPtr apPtr sPtr scondPtr amaxPtr equedPtr+      liftIO $ fmap castCCharToChar (peek equedPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlaqp2.f>+laqp2 ::+   Int {- ^ m -} ->+   Int {- ^ offset -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IOArray ZeroInt CInt {- ^ jpvt -} ->+   IOArray ZeroInt Double {- ^ vn1 -} ->+   IOArray ZeroInt Double {- ^ vn2 -} ->+   IO (Array ZeroInt (Complex Double))+laqp2 m offset a jpvt vn1 vn2 = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let jpvtDim0 = Call.sizes1 $ MutArray.shape jpvt+   let vn1Dim0 = Call.sizes1 $ MutArray.shape vn1+   let vn2Dim0 = Call.sizes1 $ MutArray.shape vn2+   let n = aDim0+   let lda = aDim1+   Call.assert "laqp2: n == jpvtDim0" (n == jpvtDim0)+   Call.assert "laqp2: n == vn1Dim0" (n == vn1Dim0)+   Call.assert "laqp2: n == vn2Dim0" (n == vn2Dim0)+   tau <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 n+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      offsetPtr <- Call.cint offset+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      jpvtPtr <- Call.ioarray jpvt+      tauPtr <- Call.ioarray tau+      vn1Ptr <- Call.ioarray vn1+      vn2Ptr <- Call.ioarray vn2+      workPtr <- Call.ioarray work+      liftIO $ FFI.laqp2 mPtr nPtr offsetPtr aPtr ldaPtr jpvtPtr tauPtr vn1Ptr vn2Ptr workPtr+      liftIO $ Call.freezeArray tau++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlaqps.f>+laqps ::+   Int {- ^ m -} ->+   Int {- ^ offset -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IOArray ZeroInt CInt {- ^ jpvt -} ->+   Int {- ^ kb -} ->+   IOArray ZeroInt Double {- ^ vn1 -} ->+   IOArray ZeroInt Double {- ^ vn2 -} ->+   IOArray ZeroInt (Complex Double) {- ^ auxv -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ f -} ->+   IO (Int, Array ZeroInt (Complex Double))+laqps m offset a jpvt kb vn1 vn2 auxv f = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let jpvtDim0 = Call.sizes1 $ MutArray.shape jpvt+   let vn1Dim0 = Call.sizes1 $ MutArray.shape vn1+   let vn2Dim0 = Call.sizes1 $ MutArray.shape vn2+   let auxvDim0 = Call.sizes1 $ MutArray.shape auxv+   let (fDim0,fDim1) = Call.sizes2 $ MutArray.shape f+   let n = aDim0+   let lda = aDim1+   let nb = auxvDim0+   let ldf = fDim1+   Call.assert "laqps: n == jpvtDim0" (n == jpvtDim0)+   Call.assert "laqps: n == vn1Dim0" (n == vn1Dim0)+   Call.assert "laqps: n == vn2Dim0" (n == vn2Dim0)+   Call.assert "laqps: nb == fDim0" (nb == fDim0)+   tau <- Call.newArray1 kb+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      offsetPtr <- Call.cint offset+      nbPtr <- Call.cint nb+      kbPtr <- Call.alloca+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      jpvtPtr <- Call.ioarray jpvt+      tauPtr <- Call.ioarray tau+      vn1Ptr <- Call.ioarray vn1+      vn2Ptr <- Call.ioarray vn2+      auxvPtr <- Call.ioarray auxv+      fPtr <- Call.ioarray f+      ldfPtr <- Call.cint ldf+      liftIO $ FFI.laqps mPtr nPtr offsetPtr nbPtr kbPtr aPtr ldaPtr jpvtPtr tauPtr vn1Ptr vn2Ptr auxvPtr fPtr ldfPtr+      liftIO $ pure (,)+         <*> fmap fromIntegral (peek kbPtr)+         <*> Call.freezeArray tau++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlaqr0.f>+laqr0 ::+   Bool {- ^ wantt -} ->+   Bool {- ^ wantz -} ->+   Int {- ^ ilo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ h -} ->+   Int {- ^ iloz -} ->+   Int {- ^ ihiz -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ z -} ->+   Int {- ^ workSize -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt (Complex Double), Int)+laqr0 wantt wantz ilo h iloz ihiz z workSize lwork = do+   let (hDim0,hDim1) = Call.sizes2 $ MutArray.shape h+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = hDim0+   let ldh = hDim1+   let ihi = zDim0+   let ldz = zDim1+   w <- Call.newArray1 n+   work <- Call.newArray1 workSize+   evalContT $ do+      wanttPtr <- Call.bool wantt+      wantzPtr <- Call.bool wantz+      nPtr <- Call.cint n+      iloPtr <- Call.cint ilo+      ihiPtr <- Call.cint ihi+      hPtr <- Call.ioarray h+      ldhPtr <- Call.cint ldh+      wPtr <- Call.ioarray w+      ilozPtr <- Call.cint iloz+      ihizPtr <- Call.cint ihiz+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.laqr0 wanttPtr wantzPtr nPtr iloPtr ihiPtr hPtr ldhPtr wPtr ilozPtr ihizPtr zPtr ldzPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray w+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlaqr1.f>+laqr1 ::+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ h -} ->+   Complex Double {- ^ s1 -} ->+   Complex Double {- ^ s2 -} ->+   IO (Array ZeroInt (Complex Double))+laqr1 h s1 s2 = do+   let (hDim0,hDim1) = Call.sizes2 $ Array.shape h+   let n = hDim0+   let ldh = hDim1+   v <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      hPtr <- Call.array h+      ldhPtr <- Call.cint ldh+      s1Ptr <- Call.complexDouble s1+      s2Ptr <- Call.complexDouble s2+      vPtr <- Call.ioarray v+      liftIO $ FFI.laqr1 nPtr hPtr ldhPtr s1Ptr s2Ptr vPtr+      liftIO $ Call.freezeArray v++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlaqr2.f>+laqr2 ::+   Bool {- ^ wantt -} ->+   Bool {- ^ wantz -} ->+   Int {- ^ ktop -} ->+   Int {- ^ kbot -} ->+   Int {- ^ nw -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ h -} ->+   Int {- ^ iloz -} ->+   Int {- ^ ihiz -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ z -} ->+   Int {- ^ ldv -} ->+   Int {- ^ nh -} ->+   Int {- ^ ldt -} ->+   Int {- ^ nv -} ->+   Int {- ^ ldwv -} ->+   Int {- ^ lwork -} ->+   IO (Int, Int, Array ZeroInt (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double))+laqr2 wantt wantz ktop kbot nw h iloz ihiz z ldv nh ldt nv ldwv lwork = do+   let (hDim0,hDim1) = Call.sizes2 $ MutArray.shape h+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = hDim0+   let ldh = hDim1+   let ldz = zDim1+   Call.assert "laqr2: n == zDim0" (n == zDim0)+   sh <- Call.newArray1 kbot+   v <- Call.newArray2 nw ldv+   t <- Call.newArray2 nw ldt+   wv <- Call.newArray2 nw ldwv+   work <- Call.newArray1 lwork+   evalContT $ do+      wanttPtr <- Call.bool wantt+      wantzPtr <- Call.bool wantz+      nPtr <- Call.cint n+      ktopPtr <- Call.cint ktop+      kbotPtr <- Call.cint kbot+      nwPtr <- Call.cint nw+      hPtr <- Call.ioarray h+      ldhPtr <- Call.cint ldh+      ilozPtr <- Call.cint iloz+      ihizPtr <- Call.cint ihiz+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      nsPtr <- Call.alloca+      ndPtr <- Call.alloca+      shPtr <- Call.ioarray sh+      vPtr <- Call.ioarray v+      ldvPtr <- Call.cint ldv+      nhPtr <- Call.cint nh+      tPtr <- Call.ioarray t+      ldtPtr <- Call.cint ldt+      nvPtr <- Call.cint nv+      wvPtr <- Call.ioarray wv+      ldwvPtr <- Call.cint ldwv+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      liftIO $ FFI.laqr2 wanttPtr wantzPtr nPtr ktopPtr kbotPtr nwPtr hPtr ldhPtr ilozPtr ihizPtr zPtr ldzPtr nsPtr ndPtr shPtr vPtr ldvPtr nhPtr tPtr ldtPtr nvPtr wvPtr ldwvPtr workPtr lworkPtr+      liftIO $ pure (,,,,,)+         <*> fmap fromIntegral (peek nsPtr)+         <*> fmap fromIntegral (peek ndPtr)+         <*> Call.freezeArray sh+         <*> Call.freezeArray v+         <*> Call.freezeArray t+         <*> Call.freezeArray wv++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlaqr3.f>+laqr3 ::+   Bool {- ^ wantt -} ->+   Bool {- ^ wantz -} ->+   Int {- ^ ktop -} ->+   Int {- ^ kbot -} ->+   Int {- ^ nw -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ h -} ->+   Int {- ^ iloz -} ->+   Int {- ^ ihiz -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ z -} ->+   Int {- ^ ldv -} ->+   Int {- ^ nh -} ->+   Int {- ^ ldt -} ->+   Int {- ^ nv -} ->+   Int {- ^ ldwv -} ->+   Int {- ^ lwork -} ->+   IO (Int, Int, Array ZeroInt (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double))+laqr3 wantt wantz ktop kbot nw h iloz ihiz z ldv nh ldt nv ldwv lwork = do+   let (hDim0,hDim1) = Call.sizes2 $ MutArray.shape h+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = hDim0+   let ldh = hDim1+   let ldz = zDim1+   Call.assert "laqr3: n == zDim0" (n == zDim0)+   sh <- Call.newArray1 kbot+   v <- Call.newArray2 nw ldv+   t <- Call.newArray2 nw ldt+   wv <- Call.newArray2 nw ldwv+   work <- Call.newArray1 lwork+   evalContT $ do+      wanttPtr <- Call.bool wantt+      wantzPtr <- Call.bool wantz+      nPtr <- Call.cint n+      ktopPtr <- Call.cint ktop+      kbotPtr <- Call.cint kbot+      nwPtr <- Call.cint nw+      hPtr <- Call.ioarray h+      ldhPtr <- Call.cint ldh+      ilozPtr <- Call.cint iloz+      ihizPtr <- Call.cint ihiz+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      nsPtr <- Call.alloca+      ndPtr <- Call.alloca+      shPtr <- Call.ioarray sh+      vPtr <- Call.ioarray v+      ldvPtr <- Call.cint ldv+      nhPtr <- Call.cint nh+      tPtr <- Call.ioarray t+      ldtPtr <- Call.cint ldt+      nvPtr <- Call.cint nv+      wvPtr <- Call.ioarray wv+      ldwvPtr <- Call.cint ldwv+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      liftIO $ FFI.laqr3 wanttPtr wantzPtr nPtr ktopPtr kbotPtr nwPtr hPtr ldhPtr ilozPtr ihizPtr zPtr ldzPtr nsPtr ndPtr shPtr vPtr ldvPtr nhPtr tPtr ldtPtr nvPtr wvPtr ldwvPtr workPtr lworkPtr+      liftIO $ pure (,,,,,)+         <*> fmap fromIntegral (peek nsPtr)+         <*> fmap fromIntegral (peek ndPtr)+         <*> Call.freezeArray sh+         <*> Call.freezeArray v+         <*> Call.freezeArray t+         <*> Call.freezeArray wv++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlaqr4.f>+laqr4 ::+   Bool {- ^ wantt -} ->+   Bool {- ^ wantz -} ->+   Int {- ^ ilo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ h -} ->+   Int {- ^ iloz -} ->+   Int {- ^ ihiz -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ z -} ->+   Int {- ^ workSize -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt (Complex Double), Int)+laqr4 wantt wantz ilo h iloz ihiz z workSize lwork = do+   let (hDim0,hDim1) = Call.sizes2 $ MutArray.shape h+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = hDim0+   let ldh = hDim1+   let ihi = zDim0+   let ldz = zDim1+   w <- Call.newArray1 n+   work <- Call.newArray1 workSize+   evalContT $ do+      wanttPtr <- Call.bool wantt+      wantzPtr <- Call.bool wantz+      nPtr <- Call.cint n+      iloPtr <- Call.cint ilo+      ihiPtr <- Call.cint ihi+      hPtr <- Call.ioarray h+      ldhPtr <- Call.cint ldh+      wPtr <- Call.ioarray w+      ilozPtr <- Call.cint iloz+      ihizPtr <- Call.cint ihiz+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.laqr4 wanttPtr wantzPtr nPtr iloPtr ihiPtr hPtr ldhPtr wPtr ilozPtr ihizPtr zPtr ldzPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray w+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlaqr5.f>+laqr5 ::+   Bool {- ^ wantt -} ->+   Bool {- ^ wantz -} ->+   Int {- ^ kacc22 -} ->+   Int {- ^ ktop -} ->+   Int {- ^ kbot -} ->+   IOArray ZeroInt (Complex Double) {- ^ s -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ h -} ->+   Int {- ^ iloz -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ z -} ->+   Int {- ^ ldv -} ->+   Int {- ^ ldu -} ->+   Int {- ^ nv -} ->+   Int {- ^ ldwv -} ->+   Int {- ^ nh -} ->+   Int {- ^ ldwh -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double))+laqr5 wantt wantz kacc22 ktop kbot s h iloz z ldv ldu nv ldwv nh ldwh = do+   let sDim0 = Call.sizes1 $ MutArray.shape s+   let (hDim0,hDim1) = Call.sizes2 $ MutArray.shape h+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let nshfts = sDim0+   let n = hDim0+   let ldh = hDim1+   let ihiz = zDim0+   let ldz = zDim1+   v <- Call.newArray2 (nshfts`div`2) ldv+   u <- Call.newArray2 (3*nshfts-3) ldu+   wv <- Call.newArray2 (3*nshfts-3) ldwv+   wh <- Call.newArray2 nh ldwh+   evalContT $ do+      wanttPtr <- Call.bool wantt+      wantzPtr <- Call.bool wantz+      kacc22Ptr <- Call.cint kacc22+      nPtr <- Call.cint n+      ktopPtr <- Call.cint ktop+      kbotPtr <- Call.cint kbot+      nshftsPtr <- Call.cint nshfts+      sPtr <- Call.ioarray s+      hPtr <- Call.ioarray h+      ldhPtr <- Call.cint ldh+      ilozPtr <- Call.cint iloz+      ihizPtr <- Call.cint ihiz+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      vPtr <- Call.ioarray v+      ldvPtr <- Call.cint ldv+      uPtr <- Call.ioarray u+      lduPtr <- Call.cint ldu+      nvPtr <- Call.cint nv+      wvPtr <- Call.ioarray wv+      ldwvPtr <- Call.cint ldwv+      nhPtr <- Call.cint nh+      whPtr <- Call.ioarray wh+      ldwhPtr <- Call.cint ldwh+      liftIO $ FFI.laqr5 wanttPtr wantzPtr kacc22Ptr nPtr ktopPtr kbotPtr nshftsPtr sPtr hPtr ldhPtr ilozPtr ihizPtr zPtr ldzPtr vPtr ldvPtr uPtr lduPtr nvPtr wvPtr ldwvPtr nhPtr whPtr ldwhPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray v+         <*> Call.freezeArray u+         <*> Call.freezeArray wv+         <*> Call.freezeArray wh++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlaqsb.f>+laqsb ::+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ ab -} ->+   Array ZeroInt Double {- ^ s -} ->+   Double {- ^ scond -} ->+   Double {- ^ amax -} ->+   IO (Char)+laqsb uplo kd ab s scond amax = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let sDim0 = Call.sizes1 $ Array.shape s+   let n = abDim0+   let ldab = abDim1+   Call.assert "laqsb: n == sDim0" (n == sDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      sPtr <- Call.array s+      scondPtr <- Call.double scond+      amaxPtr <- Call.double amax+      equedPtr <- Call.alloca+      liftIO $ FFI.laqsb uploPtr nPtr kdPtr abPtr ldabPtr sPtr scondPtr amaxPtr equedPtr+      liftIO $ fmap castCCharToChar (peek equedPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlaqsp.f>+laqsp ::+   Char {- ^ uplo -} ->+   IOArray ZeroInt (Complex Double) {- ^ ap -} ->+   Array ZeroInt Double {- ^ s -} ->+   Double {- ^ scond -} ->+   Double {- ^ amax -} ->+   IO (Char)+laqsp uplo ap s scond amax = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   let sDim0 = Call.sizes1 $ Array.shape s+   let n = sDim0+   Call.assert "laqsp: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      sPtr <- Call.array s+      scondPtr <- Call.double scond+      amaxPtr <- Call.double amax+      equedPtr <- Call.alloca+      liftIO $ FFI.laqsp uploPtr nPtr apPtr sPtr scondPtr amaxPtr equedPtr+      liftIO $ fmap castCCharToChar (peek equedPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlaqsy.f>+laqsy ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array ZeroInt Double {- ^ s -} ->+   Double {- ^ scond -} ->+   Double {- ^ amax -} ->+   IO (Char)+laqsy uplo a s scond amax = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let sDim0 = Call.sizes1 $ Array.shape s+   let n = aDim0+   let lda = aDim1+   Call.assert "laqsy: n == sDim0" (n == sDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      sPtr <- Call.array s+      scondPtr <- Call.double scond+      amaxPtr <- Call.double amax+      equedPtr <- Call.alloca+      liftIO $ FFI.laqsy uploPtr nPtr aPtr ldaPtr sPtr scondPtr amaxPtr equedPtr+      liftIO $ fmap castCCharToChar (peek equedPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlar1v.f>+lar1v ::+   Int {- ^ b1 -} ->+   Int {- ^ bn -} ->+   Double {- ^ lambda -} ->+   Array ZeroInt Double {- ^ d -} ->+   Array ZeroInt Double {- ^ l -} ->+   Array ZeroInt Double {- ^ ld -} ->+   Array ZeroInt Double {- ^ lld -} ->+   Double {- ^ pivmin -} ->+   Double {- ^ gaptol -} ->+   IOArray ZeroInt (Complex Double) {- ^ z -} ->+   Bool {- ^ wantnc -} ->+   Int {- ^ r -} ->+   IO (Int, Double, Double, Int, Array ZeroInt CInt, Double, Double, Double)+lar1v b1 bn lambda d l ld lld pivmin gaptol z wantnc r = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let lDim0 = Call.sizes1 $ Array.shape l+   let ldDim0 = Call.sizes1 $ Array.shape ld+   let lldDim0 = Call.sizes1 $ Array.shape lld+   let zDim0 = Call.sizes1 $ MutArray.shape z+   let n = dDim0+   Call.assert "lar1v: n-1 == lDim0" (n-1 == lDim0)+   Call.assert "lar1v: n-1 == ldDim0" (n-1 == ldDim0)+   Call.assert "lar1v: n-1 == lldDim0" (n-1 == lldDim0)+   Call.assert "lar1v: n == zDim0" (n == zDim0)+   isuppz <- Call.newArray1 2+   work <- Call.newArray1 (4*n)+   evalContT $ do+      nPtr <- Call.cint n+      b1Ptr <- Call.cint b1+      bnPtr <- Call.cint bn+      lambdaPtr <- Call.double lambda+      dPtr <- Call.array d+      lPtr <- Call.array l+      ldPtr <- Call.array ld+      lldPtr <- Call.array lld+      pivminPtr <- Call.double pivmin+      gaptolPtr <- Call.double gaptol+      zPtr <- Call.ioarray z+      wantncPtr <- Call.bool wantnc+      negcntPtr <- Call.alloca+      ztzPtr <- Call.alloca+      mingmaPtr <- Call.alloca+      rPtr <- Call.cint r+      isuppzPtr <- Call.ioarray isuppz+      nrminvPtr <- Call.alloca+      residPtr <- Call.alloca+      rqcorrPtr <- Call.alloca+      workPtr <- Call.ioarray work+      liftIO $ FFI.lar1v nPtr b1Ptr bnPtr lambdaPtr dPtr lPtr ldPtr lldPtr pivminPtr gaptolPtr zPtr wantncPtr negcntPtr ztzPtr mingmaPtr rPtr isuppzPtr nrminvPtr residPtr rqcorrPtr workPtr+      liftIO $ pure (,,,,,,,)+         <*> fmap fromIntegral (peek negcntPtr)+         <*> peek ztzPtr+         <*> peek mingmaPtr+         <*> fmap fromIntegral (peek rPtr)+         <*> Call.freezeArray isuppz+         <*> peek nrminvPtr+         <*> peek residPtr+         <*> peek rqcorrPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlar2v.f>+lar2v ::+   Int {- ^ n -} ->+   IOArray ZeroInt (Complex Double) {- ^ x -} ->+   IOArray ZeroInt (Complex Double) {- ^ y -} ->+   IOArray ZeroInt (Complex Double) {- ^ z -} ->+   Int {- ^ incx -} ->+   Array ZeroInt Double {- ^ c -} ->+   Array ZeroInt (Complex Double) {- ^ s -} ->+   Int {- ^ incc -} ->+   IO ()+lar2v n x y z incx c s incc = do+   let xDim0 = Call.sizes1 $ MutArray.shape x+   let yDim0 = Call.sizes1 $ MutArray.shape y+   let zDim0 = Call.sizes1 $ MutArray.shape z+   let cDim0 = Call.sizes1 $ Array.shape c+   let sDim0 = Call.sizes1 $ Array.shape s+   Call.assert "lar2v: 1+(n-1)*incx == xDim0" (1+(n-1)*incx == xDim0)+   Call.assert "lar2v: 1+(n-1)*incx == yDim0" (1+(n-1)*incx == yDim0)+   Call.assert "lar2v: 1+(n-1)*incx == zDim0" (1+(n-1)*incx == zDim0)+   Call.assert "lar2v: 1+(n-1)*incc == cDim0" (1+(n-1)*incc == cDim0)+   Call.assert "lar2v: 1+(n-1)*incc == sDim0" (1+(n-1)*incc == sDim0)+   evalContT $ do+      nPtr <- Call.cint n+      xPtr <- Call.ioarray x+      yPtr <- Call.ioarray y+      zPtr <- Call.ioarray z+      incxPtr <- Call.cint incx+      cPtr <- Call.array c+      sPtr <- Call.array s+      inccPtr <- Call.cint incc+      liftIO $ FFI.lar2v nPtr xPtr yPtr zPtr incxPtr cPtr sPtr inccPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlarcm.f>+larcm ::+   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   Int {- ^ ldc -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Double))+larcm a b ldc = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let m = aDim0+   let lda = aDim1+   let n = bDim0+   let ldb = bDim1+   c <- Call.newArray2 n ldc+   rwork <- Call.newArray1 (2*m*n)+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      rworkPtr <- Call.ioarray rwork+      liftIO $ FFI.larcm mPtr nPtr aPtr ldaPtr bPtr ldbPtr cPtr ldcPtr rworkPtr+      liftIO $ Call.freezeArray c++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlarf.f>+larf ::+   Char {- ^ side -} ->+   Int {- ^ m -} ->+   Array ZeroInt (Complex Double) {- ^ v -} ->+   Int {- ^ incv -} ->+   Complex Double {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ c -} ->+   Int {- ^ workSize -} ->+   IO ()+larf side m v incv tau c workSize = do+   let vDim0 = Call.sizes1 $ Array.shape v+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _vSize = vDim0+   let n = cDim0+   let ldc = cDim1+   work <- Call.newArray1 workSize+   evalContT $ do+      sidePtr <- Call.char side+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      vPtr <- Call.array v+      incvPtr <- Call.cint incv+      tauPtr <- Call.complexDouble tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      liftIO $ FFI.larf sidePtr mPtr nPtr vPtr incvPtr tauPtr cPtr ldcPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlarfb.f>+larfb ::+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Char {- ^ direct -} ->+   Char {- ^ storev -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ v -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ t -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ c -} ->+   Int {- ^ ldwork -} ->+   IO ()+larfb side trans direct storev m v t c ldwork = do+   let (vDim0,vDim1) = Call.sizes2 $ Array.shape v+   let (tDim0,tDim1) = Call.sizes2 $ Array.shape t+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _vSize = vDim0+   let ldv = vDim1+   let k = tDim0+   let ldt = tDim1+   let n = cDim0+   let ldc = cDim1+   work <- Call.newArray2 k ldwork+   evalContT $ do+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      directPtr <- Call.char direct+      storevPtr <- Call.char storev+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      vPtr <- Call.array v+      ldvPtr <- Call.cint ldv+      tPtr <- Call.array t+      ldtPtr <- Call.cint ldt+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      ldworkPtr <- Call.cint ldwork+      liftIO $ FFI.larfb sidePtr transPtr directPtr storevPtr mPtr nPtr kPtr vPtr ldvPtr tPtr ldtPtr cPtr ldcPtr workPtr ldworkPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlarfg.f>+larfg ::+   Int {- ^ n -} ->+   Complex Double {- ^ alpha -} ->+   IOArray ZeroInt (Complex Double) {- ^ x -} ->+   Int {- ^ incx -} ->+   IO (Complex Double, Complex Double)+larfg n alpha x incx = do+   let xDim0 = Call.sizes1 $ MutArray.shape x+   let _xSize = xDim0+   evalContT $ do+      nPtr <- Call.cint n+      alphaPtr <- Call.complexDouble alpha+      xPtr <- Call.ioarray x+      incxPtr <- Call.cint incx+      tauPtr <- Call.alloca+      liftIO $ FFI.larfg nPtr alphaPtr xPtr incxPtr tauPtr+      liftIO $ pure (,)+         <*> peek alphaPtr+         <*> peek tauPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlarfgp.f>+larfgp ::+   Int {- ^ n -} ->+   Complex Double {- ^ alpha -} ->+   IOArray ZeroInt (Complex Double) {- ^ x -} ->+   Int {- ^ incx -} ->+   IO (Complex Double, Complex Double)+larfgp n alpha x incx = do+   let xDim0 = Call.sizes1 $ MutArray.shape x+   let _xSize = xDim0+   evalContT $ do+      nPtr <- Call.cint n+      alphaPtr <- Call.complexDouble alpha+      xPtr <- Call.ioarray x+      incxPtr <- Call.cint incx+      tauPtr <- Call.alloca+      liftIO $ FFI.larfgp nPtr alphaPtr xPtr incxPtr tauPtr+      liftIO $ pure (,)+         <*> peek alphaPtr+         <*> peek tauPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlarft.f>+larft ::+   Char {- ^ direct -} ->+   Char {- ^ storev -} ->+   Int {- ^ n -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ v -} ->+   Array ZeroInt (Complex Double) {- ^ tau -} ->+   Int {- ^ ldt -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Double))+larft direct storev n v tau ldt = do+   let (vDim0,vDim1) = Call.sizes2 $ Array.shape v+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let _vSize = vDim0+   let ldv = vDim1+   let k = tauDim0+   t <- Call.newArray2 k ldt+   evalContT $ do+      directPtr <- Call.char direct+      storevPtr <- Call.char storev+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      vPtr <- Call.array v+      ldvPtr <- Call.cint ldv+      tauPtr <- Call.array tau+      tPtr <- Call.ioarray t+      ldtPtr <- Call.cint ldt+      liftIO $ FFI.larft directPtr storevPtr nPtr kPtr vPtr ldvPtr tauPtr tPtr ldtPtr+      liftIO $ Call.freezeArray t++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlarfx.f>+larfx ::+   Char {- ^ side -} ->+   Int {- ^ m -} ->+   Array ZeroInt (Complex Double) {- ^ v -} ->+   Complex Double {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ c -} ->+   Int {- ^ workSize -} ->+   IO ()+larfx side m v tau c workSize = do+   let vDim0 = Call.sizes1 $ Array.shape v+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _vSize = vDim0+   let n = cDim0+   let ldc = cDim1+   work <- Call.newArray1 workSize+   evalContT $ do+      sidePtr <- Call.char side+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      vPtr <- Call.array v+      tauPtr <- Call.complexDouble tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      liftIO $ FFI.larfx sidePtr mPtr nPtr vPtr tauPtr cPtr ldcPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlargv.f>+largv ::+   Int {- ^ n -} ->+   IOArray ZeroInt (Complex Double) {- ^ x -} ->+   Int {- ^ incx -} ->+   IOArray ZeroInt (Complex Double) {- ^ y -} ->+   Int {- ^ incy -} ->+   Int {- ^ incc -} ->+   IO (Array ZeroInt Double)+largv n x incx y incy incc = do+   let xDim0 = Call.sizes1 $ MutArray.shape x+   let yDim0 = Call.sizes1 $ MutArray.shape y+   Call.assert "largv: 1+(n-1)*incx == xDim0" (1+(n-1)*incx == xDim0)+   Call.assert "largv: 1+(n-1)*incy == yDim0" (1+(n-1)*incy == yDim0)+   c <- Call.newArray1 (1+(n-1)*incc)+   evalContT $ do+      nPtr <- Call.cint n+      xPtr <- Call.ioarray x+      incxPtr <- Call.cint incx+      yPtr <- Call.ioarray y+      incyPtr <- Call.cint incy+      cPtr <- Call.ioarray c+      inccPtr <- Call.cint incc+      liftIO $ FFI.largv nPtr xPtr incxPtr yPtr incyPtr cPtr inccPtr+      liftIO $ Call.freezeArray c++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlarnv.f>+larnv ::+   Int {- ^ idist -} ->+   IOArray ZeroInt CInt {- ^ iseed -} ->+   Int {- ^ n -} ->+   IO (Array ZeroInt (Complex Double))+larnv idist iseed n = do+   let iseedDim0 = Call.sizes1 $ MutArray.shape iseed+   Call.assert "larnv: 4 == iseedDim0" (4 == iseedDim0)+   x <- Call.newArray1 n+   evalContT $ do+      idistPtr <- Call.cint idist+      iseedPtr <- Call.ioarray iseed+      nPtr <- Call.cint n+      xPtr <- Call.ioarray x+      liftIO $ FFI.larnv idistPtr iseedPtr nPtr xPtr+      liftIO $ Call.freezeArray x++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlarrv.f>+larrv ::+   Double {- ^ vl -} ->+   Double {- ^ vu -} ->+   IOArray ZeroInt Double {- ^ d -} ->+   IOArray ZeroInt Double {- ^ l -} ->+   Double {- ^ pivmin -} ->+   Array ZeroInt CInt {- ^ isplit -} ->+   Int {- ^ m -} ->+   Int {- ^ dol -} ->+   Int {- ^ dou -} ->+   Double {- ^ minrgp -} ->+   Double {- ^ rtol1 -} ->+   Double {- ^ rtol2 -} ->+   IOArray ZeroInt Double {- ^ w -} ->+   IOArray ZeroInt Double {- ^ werr -} ->+   IOArray ZeroInt Double {- ^ wgap -} ->+   Array ZeroInt CInt {- ^ iblock -} ->+   Array ZeroInt CInt {- ^ indexw -} ->+   Array ZeroInt Double {- ^ gers -} ->+   Int {- ^ ldz -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Double), Array ZeroInt CInt, Int)+larrv vl vu d l pivmin isplit m dol dou minrgp rtol1 rtol2 w werr wgap iblock indexw gers ldz = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let lDim0 = Call.sizes1 $ MutArray.shape l+   let isplitDim0 = Call.sizes1 $ Array.shape isplit+   let wDim0 = Call.sizes1 $ MutArray.shape w+   let werrDim0 = Call.sizes1 $ MutArray.shape werr+   let wgapDim0 = Call.sizes1 $ MutArray.shape wgap+   let iblockDim0 = Call.sizes1 $ Array.shape iblock+   let indexwDim0 = Call.sizes1 $ Array.shape indexw+   let gersDim0 = Call.sizes1 $ Array.shape gers+   let n = dDim0+   Call.assert "larrv: n == lDim0" (n == lDim0)+   Call.assert "larrv: n == isplitDim0" (n == isplitDim0)+   Call.assert "larrv: n == wDim0" (n == wDim0)+   Call.assert "larrv: n == werrDim0" (n == werrDim0)+   Call.assert "larrv: n == wgapDim0" (n == wgapDim0)+   Call.assert "larrv: n == iblockDim0" (n == iblockDim0)+   Call.assert "larrv: n == indexwDim0" (n == indexwDim0)+   Call.assert "larrv: 2*n == gersDim0" (2*n == gersDim0)+   z <- Call.newArray2 (maximum[1,m]) ldz+   isuppz <- Call.newArray1 (2*maximum[1,m])+   work <- Call.newArray1 (12*n)+   iwork <- Call.newArray1 (7*n)+   evalContT $ do+      nPtr <- Call.cint n+      vlPtr <- Call.double vl+      vuPtr <- Call.double vu+      dPtr <- Call.ioarray d+      lPtr <- Call.ioarray l+      pivminPtr <- Call.double pivmin+      isplitPtr <- Call.array isplit+      mPtr <- Call.cint m+      dolPtr <- Call.cint dol+      douPtr <- Call.cint dou+      minrgpPtr <- Call.double minrgp+      rtol1Ptr <- Call.double rtol1+      rtol2Ptr <- Call.double rtol2+      wPtr <- Call.ioarray w+      werrPtr <- Call.ioarray werr+      wgapPtr <- Call.ioarray wgap+      iblockPtr <- Call.array iblock+      indexwPtr <- Call.array indexw+      gersPtr <- Call.array gers+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      isuppzPtr <- Call.ioarray isuppz+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.larrv nPtr vlPtr vuPtr dPtr lPtr pivminPtr isplitPtr mPtr dolPtr douPtr minrgpPtr rtol1Ptr rtol2Ptr wPtr werrPtr wgapPtr iblockPtr indexwPtr gersPtr zPtr ldzPtr isuppzPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray z+         <*> Call.freezeArray isuppz+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlartg.f>+lartg ::+   Complex Double {- ^ f -} ->+   Complex Double {- ^ g -} ->+   IO (Double, Complex Double, Complex Double)+lartg f g = do+   evalContT $ do+      fPtr <- Call.complexDouble f+      gPtr <- Call.complexDouble g+      csPtr <- Call.alloca+      snPtr <- Call.alloca+      rPtr <- Call.alloca+      liftIO $ FFI.lartg fPtr gPtr csPtr snPtr rPtr+      liftIO $ pure (,,)+         <*> peek csPtr+         <*> peek snPtr+         <*> peek rPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlartv.f>+lartv ::+   Int {- ^ n -} ->+   IOArray ZeroInt (Complex Double) {- ^ x -} ->+   Int {- ^ incx -} ->+   IOArray ZeroInt (Complex Double) {- ^ y -} ->+   Int {- ^ incy -} ->+   Array ZeroInt Double {- ^ c -} ->+   Array ZeroInt (Complex Double) {- ^ s -} ->+   Int {- ^ incc -} ->+   IO ()+lartv n x incx y incy c s incc = do+   let xDim0 = Call.sizes1 $ MutArray.shape x+   let yDim0 = Call.sizes1 $ MutArray.shape y+   let cDim0 = Call.sizes1 $ Array.shape c+   let sDim0 = Call.sizes1 $ Array.shape s+   Call.assert "lartv: 1+(n-1)*incx == xDim0" (1+(n-1)*incx == xDim0)+   Call.assert "lartv: 1+(n-1)*incy == yDim0" (1+(n-1)*incy == yDim0)+   Call.assert "lartv: 1+(n-1)*incc == cDim0" (1+(n-1)*incc == cDim0)+   Call.assert "lartv: 1+(n-1)*incc == sDim0" (1+(n-1)*incc == sDim0)+   evalContT $ do+      nPtr <- Call.cint n+      xPtr <- Call.ioarray x+      incxPtr <- Call.cint incx+      yPtr <- Call.ioarray y+      incyPtr <- Call.cint incy+      cPtr <- Call.array c+      sPtr <- Call.array s+      inccPtr <- Call.cint incc+      liftIO $ FFI.lartv nPtr xPtr incxPtr yPtr incyPtr cPtr sPtr inccPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlarz.f>+larz ::+   Char {- ^ side -} ->+   Int {- ^ m -} ->+   Int {- ^ l -} ->+   Array ZeroInt (Complex Double) {- ^ v -} ->+   Int {- ^ incv -} ->+   Complex Double {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ c -} ->+   Int {- ^ workSize -} ->+   IO ()+larz side m l v incv tau c workSize = do+   let vDim0 = Call.sizes1 $ Array.shape v+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let n = cDim0+   let ldc = cDim1+   Call.assert "larz: 1+(l-1)*abs(incv) == vDim0" (1+(l-1)*abs(incv) == vDim0)+   work <- Call.newArray1 workSize+   evalContT $ do+      sidePtr <- Call.char side+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      lPtr <- Call.cint l+      vPtr <- Call.array v+      incvPtr <- Call.cint incv+      tauPtr <- Call.complexDouble tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      liftIO $ FFI.larz sidePtr mPtr nPtr lPtr vPtr incvPtr tauPtr cPtr ldcPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlarzb.f>+larzb ::+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Char {- ^ direct -} ->+   Char {- ^ storev -} ->+   Int {- ^ m -} ->+   Int {- ^ l -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ v -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ t -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ c -} ->+   Int {- ^ ldwork -} ->+   IO ()+larzb side trans direct storev m l v t c ldwork = do+   let (vDim0,vDim1) = Call.sizes2 $ Array.shape v+   let (tDim0,tDim1) = Call.sizes2 $ Array.shape t+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _nv = vDim0+   let ldv = vDim1+   let k = tDim0+   let ldt = tDim1+   let n = cDim0+   let ldc = cDim1+   work <- Call.newArray2 k ldwork+   evalContT $ do+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      directPtr <- Call.char direct+      storevPtr <- Call.char storev+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      lPtr <- Call.cint l+      vPtr <- Call.array v+      ldvPtr <- Call.cint ldv+      tPtr <- Call.array t+      ldtPtr <- Call.cint ldt+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      ldworkPtr <- Call.cint ldwork+      liftIO $ FFI.larzb sidePtr transPtr directPtr storevPtr mPtr nPtr kPtr lPtr vPtr ldvPtr tPtr ldtPtr cPtr ldcPtr workPtr ldworkPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlarzt.f>+larzt ::+   Char {- ^ direct -} ->+   Char {- ^ storev -} ->+   Int {- ^ n -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ v -} ->+   Array ZeroInt (Complex Double) {- ^ tau -} ->+   Int {- ^ ldt -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Double))+larzt direct storev n v tau ldt = do+   let (vDim0,vDim1) = Call.sizes2 $ MutArray.shape v+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let _vSize = vDim0+   let ldv = vDim1+   let k = tauDim0+   t <- Call.newArray2 k ldt+   evalContT $ do+      directPtr <- Call.char direct+      storevPtr <- Call.char storev+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      vPtr <- Call.ioarray v+      ldvPtr <- Call.cint ldv+      tauPtr <- Call.array tau+      tPtr <- Call.ioarray t+      ldtPtr <- Call.cint ldt+      liftIO $ FFI.larzt directPtr storevPtr nPtr kPtr vPtr ldvPtr tauPtr tPtr ldtPtr+      liftIO $ Call.freezeArray t++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlascl.f>+lascl ::+   Char {- ^ type_ -} ->+   Int {- ^ kl -} ->+   Int {- ^ ku -} ->+   Double {- ^ cfrom -} ->+   Double {- ^ cto -} ->+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IO (Int)+lascl type_ kl ku cfrom cto m a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   evalContT $ do+      type_Ptr <- Call.char type_+      klPtr <- Call.cint kl+      kuPtr <- Call.cint ku+      cfromPtr <- Call.double cfrom+      ctoPtr <- Call.double cto+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      infoPtr <- Call.alloca+      liftIO $ FFI.lascl type_Ptr klPtr kuPtr cfromPtr ctoPtr mPtr nPtr aPtr ldaPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlaset.f>+laset ::+   Char {- ^ uplo -} ->+   Int {- ^ m -} ->+   Int {- ^ n -} ->+   Complex Double {- ^ alpha -} ->+   Complex Double {- ^ beta -} ->+   Int {- ^ lda -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Double))+laset uplo m n alpha beta lda = do+   a <- Call.newArray2 n lda+   evalContT $ do+      uploPtr <- Call.char uplo+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      alphaPtr <- Call.complexDouble alpha+      betaPtr <- Call.complexDouble beta+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      liftIO $ FFI.laset uploPtr mPtr nPtr alphaPtr betaPtr aPtr ldaPtr+      liftIO $ Call.freezeArray a++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlasr.f>+lasr ::+   Char {- ^ side -} ->+   Char {- ^ pivot -} ->+   Char {- ^ direct -} ->+   Int {- ^ m -} ->+   Array ZeroInt Double {- ^ c -} ->+   Array ZeroInt Double {- ^ s -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IO ()+lasr side pivot direct m c s a = do+   let cDim0 = Call.sizes1 $ Array.shape c+   let sDim0 = Call.sizes1 $ Array.shape s+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let _cSize = cDim0+   let _sSize = sDim0+   let n = aDim0+   let lda = aDim1+   evalContT $ do+      sidePtr <- Call.char side+      pivotPtr <- Call.char pivot+      directPtr <- Call.char direct+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      cPtr <- Call.array c+      sPtr <- Call.array s+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      liftIO $ FFI.lasr sidePtr pivotPtr directPtr mPtr nPtr cPtr sPtr aPtr ldaPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlassq.f>+lassq ::+   Array ZeroInt (Complex Double) {- ^ x -} ->+   Int {- ^ incx -} ->+   Double {- ^ scale -} ->+   Double {- ^ sumsq -} ->+   IO (Double, Double)+lassq x incx scale sumsq = do+   let xDim0 = Call.sizes1 $ Array.shape x+   let n = xDim0+   evalContT $ do+      nPtr <- Call.cint n+      xPtr <- Call.array x+      incxPtr <- Call.cint incx+      scalePtr <- Call.double scale+      sumsqPtr <- Call.double sumsq+      liftIO $ FFI.lassq nPtr xPtr incxPtr scalePtr sumsqPtr+      liftIO $ pure (,)+         <*> peek scalePtr+         <*> peek sumsqPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlaswp.f>+laswp ::+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Int {- ^ k1 -} ->+   Int {- ^ k2 -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Int {- ^ incx -} ->+   IO ()+laswp a k1 k2 ipiv incx = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = aDim0+   let lda = aDim1+   Call.assert "laswp: k1+(k2-k1)*abs(incx) == ipivDim0" (k1+(k2-k1)*abs(incx) == ipivDim0)+   evalContT $ do+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      k1Ptr <- Call.cint k1+      k2Ptr <- Call.cint k2+      ipivPtr <- Call.array ipiv+      incxPtr <- Call.cint incx+      liftIO $ FFI.laswp nPtr aPtr ldaPtr k1Ptr k2Ptr ipivPtr incxPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlasyf.f>+lasyf ::+   Char {- ^ uplo -} ->+   Int {- ^ nb -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Int {- ^ ldw -} ->+   IO (Int, Array ZeroInt CInt, Array (ZeroInt,ZeroInt) (Complex Double), Int)+lasyf uplo nb a ldw = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   ipiv <- Call.newArray1 n+   w <- Call.newArray2 nb ldw+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nbPtr <- Call.cint nb+      kbPtr <- Call.alloca+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.ioarray ipiv+      wPtr <- Call.ioarray w+      ldwPtr <- Call.cint ldw+      infoPtr <- Call.alloca+      liftIO $ FFI.lasyf uploPtr nPtr nbPtr kbPtr aPtr ldaPtr ipivPtr wPtr ldwPtr infoPtr+      liftIO $ pure (,,,)+         <*> fmap fromIntegral (peek kbPtr)+         <*> Call.freezeArray ipiv+         <*> Call.freezeArray w+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlat2c.f>+lat2c ::+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Int {- ^ ldsa -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Float), Int)+lat2c uplo a ldsa = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   sa <- Call.newArray2 n ldsa+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      saPtr <- Call.ioarray sa+      ldsaPtr <- Call.cint ldsa+      infoPtr <- Call.alloca+      liftIO $ FFI.lat2c uploPtr nPtr aPtr ldaPtr saPtr ldsaPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray sa+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlatbs.f>+latbs ::+   Char {- ^ uplo -} ->+   Char {- ^ trans -} ->+   Char {- ^ diag -} ->+   Char {- ^ normin -} ->+   Int {- ^ kd -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ ab -} ->+   IOArray ZeroInt (Complex Double) {- ^ x -} ->+   IOArray ZeroInt Double {- ^ cnorm -} ->+   IO (Double, Int)+latbs uplo trans diag normin kd ab x cnorm = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let xDim0 = Call.sizes1 $ MutArray.shape x+   let cnormDim0 = Call.sizes1 $ MutArray.shape cnorm+   let n = abDim0+   let ldab = abDim1+   Call.assert "latbs: n == xDim0" (n == xDim0)+   Call.assert "latbs: n == cnormDim0" (n == cnormDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      transPtr <- Call.char trans+      diagPtr <- Call.char diag+      norminPtr <- Call.char normin+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      xPtr <- Call.ioarray x+      scalePtr <- Call.alloca+      cnormPtr <- Call.ioarray cnorm+      infoPtr <- Call.alloca+      liftIO $ FFI.latbs uploPtr transPtr diagPtr norminPtr nPtr kdPtr abPtr ldabPtr xPtr scalePtr cnormPtr infoPtr+      liftIO $ pure (,)+         <*> peek scalePtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlatdf.f>+latdf ::+   Int {- ^ ijob -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ z -} ->+   IOArray ZeroInt (Complex Double) {- ^ rhs -} ->+   Double {- ^ rdsum -} ->+   Double {- ^ rdscal -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Array ZeroInt CInt {- ^ jpiv -} ->+   IO (Double, Double)+latdf ijob z rhs rdsum rdscal ipiv jpiv = do+   let (zDim0,zDim1) = Call.sizes2 $ Array.shape z+   let rhsDim0 = Call.sizes1 $ MutArray.shape rhs+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let jpivDim0 = Call.sizes1 $ Array.shape jpiv+   let n = zDim0+   let ldz = zDim1+   Call.assert "latdf: n == rhsDim0" (n == rhsDim0)+   Call.assert "latdf: n == ipivDim0" (n == ipivDim0)+   Call.assert "latdf: n == jpivDim0" (n == jpivDim0)+   evalContT $ do+      ijobPtr <- Call.cint ijob+      nPtr <- Call.cint n+      zPtr <- Call.array z+      ldzPtr <- Call.cint ldz+      rhsPtr <- Call.ioarray rhs+      rdsumPtr <- Call.double rdsum+      rdscalPtr <- Call.double rdscal+      ipivPtr <- Call.array ipiv+      jpivPtr <- Call.array jpiv+      liftIO $ FFI.latdf ijobPtr nPtr zPtr ldzPtr rhsPtr rdsumPtr rdscalPtr ipivPtr jpivPtr+      liftIO $ pure (,)+         <*> peek rdsumPtr+         <*> peek rdscalPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlatps.f>+latps ::+   Char {- ^ uplo -} ->+   Char {- ^ trans -} ->+   Char {- ^ diag -} ->+   Char {- ^ normin -} ->+   Array ZeroInt (Complex Double) {- ^ ap -} ->+   IOArray ZeroInt (Complex Double) {- ^ x -} ->+   IOArray ZeroInt Double {- ^ cnorm -} ->+   IO (Double, Int)+latps uplo trans diag normin ap x cnorm = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let xDim0 = Call.sizes1 $ MutArray.shape x+   let cnormDim0 = Call.sizes1 $ MutArray.shape cnorm+   let n = xDim0+   Call.assert "latps: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   Call.assert "latps: n == cnormDim0" (n == cnormDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      transPtr <- Call.char trans+      diagPtr <- Call.char diag+      norminPtr <- Call.char normin+      nPtr <- Call.cint n+      apPtr <- Call.array ap+      xPtr <- Call.ioarray x+      scalePtr <- Call.alloca+      cnormPtr <- Call.ioarray cnorm+      infoPtr <- Call.alloca+      liftIO $ FFI.latps uploPtr transPtr diagPtr norminPtr nPtr apPtr xPtr scalePtr cnormPtr infoPtr+      liftIO $ pure (,)+         <*> peek scalePtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlatrd.f>+latrd ::+   Char {- ^ uplo -} ->+   Int {- ^ nb -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Int {- ^ ldw -} ->+   IO (Array ZeroInt Double, Array ZeroInt (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double))+latrd uplo nb a ldw = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   e <- Call.newArray1 (n-1)+   tau <- Call.newArray1 (n-1)+   w <- Call.newArray2 nb ldw+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nbPtr <- Call.cint nb+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ePtr <- Call.ioarray e+      tauPtr <- Call.ioarray tau+      wPtr <- Call.ioarray w+      ldwPtr <- Call.cint ldw+      liftIO $ FFI.latrd uploPtr nPtr nbPtr aPtr ldaPtr ePtr tauPtr wPtr ldwPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray e+         <*> Call.freezeArray tau+         <*> Call.freezeArray w++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlatrs.f>+latrs ::+   Char {- ^ uplo -} ->+   Char {- ^ trans -} ->+   Char {- ^ diag -} ->+   Char {- ^ normin -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IOArray ZeroInt (Complex Double) {- ^ x -} ->+   IOArray ZeroInt Double {- ^ cnorm -} ->+   IO (Double, Int)+latrs uplo trans diag normin a x cnorm = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let xDim0 = Call.sizes1 $ MutArray.shape x+   let cnormDim0 = Call.sizes1 $ MutArray.shape cnorm+   let n = aDim0+   let lda = aDim1+   Call.assert "latrs: n == xDim0" (n == xDim0)+   Call.assert "latrs: n == cnormDim0" (n == cnormDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      transPtr <- Call.char trans+      diagPtr <- Call.char diag+      norminPtr <- Call.char normin+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      xPtr <- Call.ioarray x+      scalePtr <- Call.alloca+      cnormPtr <- Call.ioarray cnorm+      infoPtr <- Call.alloca+      liftIO $ FFI.latrs uploPtr transPtr diagPtr norminPtr nPtr aPtr ldaPtr xPtr scalePtr cnormPtr infoPtr+      liftIO $ pure (,)+         <*> peek scalePtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlatrz.f>+latrz ::+   Int {- ^ m -} ->+   Int {- ^ l -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IO (Array ZeroInt (Complex Double))+latrz m l a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 m+   work <- Call.newArray1 m+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      lPtr <- Call.cint l+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      liftIO $ FFI.latrz mPtr nPtr lPtr aPtr ldaPtr tauPtr workPtr+      liftIO $ Call.freezeArray tau++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlauu2.f>+lauu2 ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IO (Int)+lauu2 uplo a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      infoPtr <- Call.alloca+      liftIO $ FFI.lauu2 uploPtr nPtr aPtr ldaPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlauum.f>+lauum ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IO (Int)+lauum uplo a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      infoPtr <- Call.alloca+      liftIO $ FFI.lauum uploPtr nPtr aPtr ldaPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpbcon.f>+pbcon ::+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ ab -} ->+   Double {- ^ anorm -} ->+   IO (Double, Int)+pbcon uplo kd ab anorm = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let n = abDim0+   let ldab = abDim1+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      anormPtr <- Call.double anorm+      rcondPtr <- Call.alloca+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.pbcon uploPtr nPtr kdPtr abPtr ldabPtr anormPtr rcondPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,)+         <*> peek rcondPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpbequ.f>+pbequ ::+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ ab -} ->+   IO (Array ZeroInt Double, Double, Double, Int)+pbequ uplo kd ab = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let n = abDim0+   let ldab = abDim1+   s <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      sPtr <- Call.ioarray s+      scondPtr <- Call.alloca+      amaxPtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.pbequ uploPtr nPtr kdPtr abPtr ldabPtr sPtr scondPtr amaxPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray s+         <*> peek scondPtr+         <*> peek amaxPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpbrfs.f>+pbrfs ::+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ ab -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ afb -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ x -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Int)+pbrfs uplo kd ab afb b x = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let (afbDim0,afbDim1) = Call.sizes2 $ Array.shape afb+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (xDim0,xDim1) = Call.sizes2 $ MutArray.shape x+   let n = abDim0+   let ldab = abDim1+   let ldafb = afbDim1+   let nrhs = bDim0+   let ldb = bDim1+   let ldx = xDim1+   Call.assert "pbrfs: n == afbDim0" (n == afbDim0)+   Call.assert "pbrfs: nrhs == xDim0" (nrhs == xDim0)+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      nrhsPtr <- Call.cint nrhs+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      afbPtr <- Call.array afb+      ldafbPtr <- Call.cint ldafb+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.pbrfs uploPtr nPtr kdPtr nrhsPtr abPtr ldabPtr afbPtr ldafbPtr bPtr ldbPtr xPtr ldxPtr ferrPtr berrPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpbstf.f>+pbstf ::+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ ab -} ->+   IO (Int)+pbstf uplo kd ab = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let n = abDim0+   let ldab = abDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      infoPtr <- Call.alloca+      liftIO $ FFI.pbstf uploPtr nPtr kdPtr abPtr ldabPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpbsv.f>+pbsv ::+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ ab -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   IO (Int)+pbsv uplo kd ab b = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = abDim0+   let ldab = abDim1+   let nrhs = bDim0+   let ldb = bDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      nrhsPtr <- Call.cint nrhs+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.pbsv uploPtr nPtr kdPtr nrhsPtr abPtr ldabPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpbsvx.f>+pbsvx ::+   Char {- ^ fact -} ->+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ ab -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ afb -} ->+   Char {- ^ equed -} ->+   IOArray ZeroInt Double {- ^ s -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   Int {- ^ ldx -} ->+   IO (Char, Array (ZeroInt,ZeroInt) (Complex Double), Double, Array ZeroInt Double, Array ZeroInt Double, Int)+pbsvx fact uplo kd ab afb equed s b ldx = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let (afbDim0,afbDim1) = Call.sizes2 $ MutArray.shape afb+   let sDim0 = Call.sizes1 $ MutArray.shape s+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = abDim0+   let ldab = abDim1+   let ldafb = afbDim1+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "pbsvx: n == afbDim0" (n == afbDim0)+   Call.assert "pbsvx: n == sDim0" (n == sDim0)+   x <- Call.newArray2 nrhs ldx+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      factPtr <- Call.char fact+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      nrhsPtr <- Call.cint nrhs+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      afbPtr <- Call.ioarray afb+      ldafbPtr <- Call.cint ldafb+      equedPtr <- Call.char equed+      sPtr <- Call.ioarray s+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      rcondPtr <- Call.alloca+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.pbsvx factPtr uploPtr nPtr kdPtr nrhsPtr abPtr ldabPtr afbPtr ldafbPtr equedPtr sPtr bPtr ldbPtr xPtr ldxPtr rcondPtr ferrPtr berrPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> fmap castCCharToChar (peek equedPtr)+         <*> Call.freezeArray x+         <*> peek rcondPtr+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpbtf2.f>+pbtf2 ::+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ ab -} ->+   IO (Int)+pbtf2 uplo kd ab = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let n = abDim0+   let ldab = abDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      infoPtr <- Call.alloca+      liftIO $ FFI.pbtf2 uploPtr nPtr kdPtr abPtr ldabPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpbtrf.f>+pbtrf ::+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ ab -} ->+   IO (Int)+pbtrf uplo kd ab = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let n = abDim0+   let ldab = abDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      infoPtr <- Call.alloca+      liftIO $ FFI.pbtrf uploPtr nPtr kdPtr abPtr ldabPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpbtrs.f>+pbtrs ::+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ ab -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   IO (Int)+pbtrs uplo kd ab b = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = abDim0+   let ldab = abDim1+   let nrhs = bDim0+   let ldb = bDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      nrhsPtr <- Call.cint nrhs+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.pbtrs uploPtr nPtr kdPtr nrhsPtr abPtr ldabPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpftrf.f>+pftrf ::+   Char {- ^ transr -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt (Complex Double) {- ^ a -} ->+   IO (Int)+pftrf transr uplo n a = do+   let aDim0 = Call.sizes1 $ MutArray.shape a+   Call.assert "pftrf: n*(n+1)`div`2 == aDim0" (n*(n+1)`div`2 == aDim0)+   evalContT $ do+      transrPtr <- Call.char transr+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      infoPtr <- Call.alloca+      liftIO $ FFI.pftrf transrPtr uploPtr nPtr aPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpftri.f>+pftri ::+   Char {- ^ transr -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt (Complex Double) {- ^ a -} ->+   IO (Int)+pftri transr uplo n a = do+   let aDim0 = Call.sizes1 $ MutArray.shape a+   Call.assert "pftri: n*(n+1)`div`2 == aDim0" (n*(n+1)`div`2 == aDim0)+   evalContT $ do+      transrPtr <- Call.char transr+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      infoPtr <- Call.alloca+      liftIO $ FFI.pftri transrPtr uploPtr nPtr aPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpftrs.f>+pftrs ::+   Char {- ^ transr -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Array ZeroInt (Complex Double) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   IO (Int)+pftrs transr uplo n a b = do+   let aDim0 = Call.sizes1 $ Array.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "pftrs: n*(n+1)`div`2 == aDim0" (n*(n+1)`div`2 == aDim0)+   evalContT $ do+      transrPtr <- Call.char transr+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.array a+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.pftrs transrPtr uploPtr nPtr nrhsPtr aPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpocon.f>+pocon ::+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Double {- ^ anorm -} ->+   IO (Double, Int)+pocon uplo a anorm = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      anormPtr <- Call.double anorm+      rcondPtr <- Call.alloca+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.pocon uploPtr nPtr aPtr ldaPtr anormPtr rcondPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,)+         <*> peek rcondPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpoequ.f>+poequ ::+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IO (Array ZeroInt Double, Double, Double, Int)+poequ a = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   s <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      sPtr <- Call.ioarray s+      scondPtr <- Call.alloca+      amaxPtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.poequ nPtr aPtr ldaPtr sPtr scondPtr amaxPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray s+         <*> peek scondPtr+         <*> peek amaxPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpoequb.f>+poequb ::+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IO (Array ZeroInt Double, Double, Double, Int)+poequb a = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   s <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      sPtr <- Call.ioarray s+      scondPtr <- Call.alloca+      amaxPtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.poequb nPtr aPtr ldaPtr sPtr scondPtr amaxPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray s+         <*> peek scondPtr+         <*> peek amaxPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zporfs.f>+porfs ::+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ af -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ x -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Int)+porfs uplo a af b x = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (afDim0,afDim1) = Call.sizes2 $ Array.shape af+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (xDim0,xDim1) = Call.sizes2 $ MutArray.shape x+   let n = aDim0+   let lda = aDim1+   let ldaf = afDim1+   let nrhs = bDim0+   let ldb = bDim1+   let ldx = xDim1+   Call.assert "porfs: n == afDim0" (n == afDim0)+   Call.assert "porfs: nrhs == xDim0" (nrhs == xDim0)+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      afPtr <- Call.array af+      ldafPtr <- Call.cint ldaf+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.porfs uploPtr nPtr nrhsPtr aPtr ldaPtr afPtr ldafPtr bPtr ldbPtr xPtr ldxPtr ferrPtr berrPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zposv.f>+posv ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   IO (Int)+posv uplo a b = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.posv uploPtr nPtr nrhsPtr aPtr ldaPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zposvx.f>+posvx ::+   Char {- ^ fact -} ->+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ af -} ->+   Char {- ^ equed -} ->+   IOArray ZeroInt Double {- ^ s -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   Int {- ^ ldx -} ->+   IO (Char, Array (ZeroInt,ZeroInt) (Complex Double), Double, Array ZeroInt Double, Array ZeroInt Double, Int)+posvx fact uplo a af equed s b ldx = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (afDim0,afDim1) = Call.sizes2 $ MutArray.shape af+   let sDim0 = Call.sizes1 $ MutArray.shape s+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let ldaf = afDim1+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "posvx: n == afDim0" (n == afDim0)+   Call.assert "posvx: n == sDim0" (n == sDim0)+   x <- Call.newArray2 nrhs ldx+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      factPtr <- Call.char fact+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      afPtr <- Call.ioarray af+      ldafPtr <- Call.cint ldaf+      equedPtr <- Call.char equed+      sPtr <- Call.ioarray s+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      rcondPtr <- Call.alloca+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.posvx factPtr uploPtr nPtr nrhsPtr aPtr ldaPtr afPtr ldafPtr equedPtr sPtr bPtr ldbPtr xPtr ldxPtr rcondPtr ferrPtr berrPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> fmap castCCharToChar (peek equedPtr)+         <*> Call.freezeArray x+         <*> peek rcondPtr+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpotf2.f>+potf2 ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IO (Int)+potf2 uplo a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      infoPtr <- Call.alloca+      liftIO $ FFI.potf2 uploPtr nPtr aPtr ldaPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpotrf.f>+potrf ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IO (Int)+potrf uplo a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      infoPtr <- Call.alloca+      liftIO $ FFI.potrf uploPtr nPtr aPtr ldaPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpotri.f>+potri ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IO (Int)+potri uplo a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      infoPtr <- Call.alloca+      liftIO $ FFI.potri uploPtr nPtr aPtr ldaPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpotrs.f>+potrs ::+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   IO (Int)+potrs uplo a b = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.potrs uploPtr nPtr nrhsPtr aPtr ldaPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zppcon.f>+ppcon ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Array ZeroInt (Complex Double) {- ^ ap -} ->+   Double {- ^ anorm -} ->+   IO (Double, Int)+ppcon uplo n ap anorm = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   Call.assert "ppcon: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.array ap+      anormPtr <- Call.double anorm+      rcondPtr <- Call.alloca+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ppcon uploPtr nPtr apPtr anormPtr rcondPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,)+         <*> peek rcondPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zppequ.f>+ppequ ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Array ZeroInt (Complex Double) {- ^ ap -} ->+   IO (Array ZeroInt Double, Double, Double, Int)+ppequ uplo n ap = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   Call.assert "ppequ: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   s <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.array ap+      sPtr <- Call.ioarray s+      scondPtr <- Call.alloca+      amaxPtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.ppequ uploPtr nPtr apPtr sPtr scondPtr amaxPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray s+         <*> peek scondPtr+         <*> peek amaxPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpprfs.f>+pprfs ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Array ZeroInt (Complex Double) {- ^ ap -} ->+   Array ZeroInt (Complex Double) {- ^ afp -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ x -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Int)+pprfs uplo n ap afp b x = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let afpDim0 = Call.sizes1 $ Array.shape afp+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (xDim0,xDim1) = Call.sizes2 $ MutArray.shape x+   let nrhs = bDim0+   let ldb = bDim1+   let ldx = xDim1+   Call.assert "pprfs: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   Call.assert "pprfs: n*(n+1)`div`2 == afpDim0" (n*(n+1)`div`2 == afpDim0)+   Call.assert "pprfs: nrhs == xDim0" (nrhs == xDim0)+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      apPtr <- Call.array ap+      afpPtr <- Call.array afp+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.pprfs uploPtr nPtr nrhsPtr apPtr afpPtr bPtr ldbPtr xPtr ldxPtr ferrPtr berrPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zppsv.f>+ppsv ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt (Complex Double) {- ^ ap -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   IO (Int)+ppsv uplo n ap b = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "ppsv: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      apPtr <- Call.ioarray ap+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.ppsv uploPtr nPtr nrhsPtr apPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zppsvx.f>+ppsvx ::+   Char {- ^ fact -} ->+   Char {- ^ uplo -} ->+   IOArray ZeroInt (Complex Double) {- ^ ap -} ->+   IOArray ZeroInt (Complex Double) {- ^ afp -} ->+   Char {- ^ equed -} ->+   IOArray ZeroInt Double {- ^ s -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   Int {- ^ ldx -} ->+   IO (Char, Array (ZeroInt,ZeroInt) (Complex Double), Double, Array ZeroInt Double, Array ZeroInt Double, Int)+ppsvx fact uplo ap afp equed s b ldx = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   let afpDim0 = Call.sizes1 $ MutArray.shape afp+   let sDim0 = Call.sizes1 $ MutArray.shape s+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = sDim0+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "ppsvx: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   Call.assert "ppsvx: n*(n+1)`div`2 == afpDim0" (n*(n+1)`div`2 == afpDim0)+   x <- Call.newArray2 nrhs ldx+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      factPtr <- Call.char fact+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      apPtr <- Call.ioarray ap+      afpPtr <- Call.ioarray afp+      equedPtr <- Call.char equed+      sPtr <- Call.ioarray s+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      rcondPtr <- Call.alloca+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ppsvx factPtr uploPtr nPtr nrhsPtr apPtr afpPtr equedPtr sPtr bPtr ldbPtr xPtr ldxPtr rcondPtr ferrPtr berrPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> fmap castCCharToChar (peek equedPtr)+         <*> Call.freezeArray x+         <*> peek rcondPtr+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpptrf.f>+pptrf ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt (Complex Double) {- ^ ap -} ->+   IO (Int)+pptrf uplo n ap = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   Call.assert "pptrf: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      infoPtr <- Call.alloca+      liftIO $ FFI.pptrf uploPtr nPtr apPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpptri.f>+pptri ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt (Complex Double) {- ^ ap -} ->+   IO (Int)+pptri uplo n ap = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   Call.assert "pptri: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      infoPtr <- Call.alloca+      liftIO $ FFI.pptri uploPtr nPtr apPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpptrs.f>+pptrs ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Array ZeroInt (Complex Double) {- ^ ap -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   IO (Int)+pptrs uplo n ap b = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "pptrs: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      apPtr <- Call.array ap+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.pptrs uploPtr nPtr nrhsPtr apPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpstf2.f>+pstf2 ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Double {- ^ tol -} ->+   IO (Array ZeroInt CInt, Int, Int)+pstf2 uplo a tol = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   piv <- Call.newArray1 n+   work <- Call.newArray1 (2*n)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      pivPtr <- Call.ioarray piv+      rankPtr <- Call.alloca+      tolPtr <- Call.double tol+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.pstf2 uploPtr nPtr aPtr ldaPtr pivPtr rankPtr tolPtr workPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray piv+         <*> fmap fromIntegral (peek rankPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpstrf.f>+pstrf ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Double {- ^ tol -} ->+   IO (Array ZeroInt CInt, Int, Int)+pstrf uplo a tol = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   piv <- Call.newArray1 n+   work <- Call.newArray1 (2*n)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      pivPtr <- Call.ioarray piv+      rankPtr <- Call.alloca+      tolPtr <- Call.double tol+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.pstrf uploPtr nPtr aPtr ldaPtr pivPtr rankPtr tolPtr workPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray piv+         <*> fmap fromIntegral (peek rankPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zptcon.f>+ptcon ::+   Array ZeroInt Double {- ^ d -} ->+   Array ZeroInt (Complex Double) {- ^ e -} ->+   Double {- ^ anorm -} ->+   IO (Double, Int)+ptcon d e anorm = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let eDim0 = Call.sizes1 $ Array.shape e+   let n = dDim0+   Call.assert "ptcon: n-1 == eDim0" (n-1 == eDim0)+   rwork <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      dPtr <- Call.array d+      ePtr <- Call.array e+      anormPtr <- Call.double anorm+      rcondPtr <- Call.alloca+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ptcon nPtr dPtr ePtr anormPtr rcondPtr rworkPtr infoPtr+      liftIO $ pure (,)+         <*> peek rcondPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpteqr.f>+pteqr ::+   Char {- ^ compz -} ->+   IOArray ZeroInt Double {- ^ d -} ->+   IOArray ZeroInt Double {- ^ e -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ z -} ->+   IO (Int)+pteqr compz d e z = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = dDim0+   let ldz = zDim1+   Call.assert "pteqr: n-1 == eDim0" (n-1 == eDim0)+   Call.assert "pteqr: n == zDim0" (n == zDim0)+   work <- Call.newArray1 (4*n)+   evalContT $ do+      compzPtr <- Call.char compz+      nPtr <- Call.cint n+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.pteqr compzPtr nPtr dPtr ePtr zPtr ldzPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zptrfs.f>+ptrfs ::+   Char {- ^ uplo -} ->+   Array ZeroInt Double {- ^ d -} ->+   Array ZeroInt (Complex Double) {- ^ e -} ->+   Array ZeroInt Double {- ^ df -} ->+   Array ZeroInt (Complex Double) {- ^ ef -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ x -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Int)+ptrfs uplo d e df ef b x = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let eDim0 = Call.sizes1 $ Array.shape e+   let dfDim0 = Call.sizes1 $ Array.shape df+   let efDim0 = Call.sizes1 $ Array.shape ef+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (xDim0,xDim1) = Call.sizes2 $ MutArray.shape x+   let n = dDim0+   let nrhs = bDim0+   let ldb = bDim1+   let ldx = xDim1+   Call.assert "ptrfs: n-1 == eDim0" (n-1 == eDim0)+   Call.assert "ptrfs: n == dfDim0" (n == dfDim0)+   Call.assert "ptrfs: n-1 == efDim0" (n-1 == efDim0)+   Call.assert "ptrfs: nrhs == xDim0" (nrhs == xDim0)+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 n+   rwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      dPtr <- Call.array d+      ePtr <- Call.array e+      dfPtr <- Call.array df+      efPtr <- Call.array ef+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ptrfs uploPtr nPtr nrhsPtr dPtr ePtr dfPtr efPtr bPtr ldbPtr xPtr ldxPtr ferrPtr berrPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zptsv.f>+ptsv ::+   IOArray ZeroInt Double {- ^ d -} ->+   IOArray ZeroInt (Complex Double) {- ^ e -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   IO (Int)+ptsv d e b = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = dDim0+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "ptsv: n-1 == eDim0" (n-1 == eDim0)+   evalContT $ do+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.ptsv nPtr nrhsPtr dPtr ePtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zptsvx.f>+ptsvx ::+   Char {- ^ fact -} ->+   Array ZeroInt Double {- ^ d -} ->+   Array ZeroInt (Complex Double) {- ^ e -} ->+   IOArray ZeroInt Double {- ^ df -} ->+   IOArray ZeroInt (Complex Double) {- ^ ef -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   Int {- ^ ldx -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Double), Double, Array ZeroInt Double, Array ZeroInt Double, Int)+ptsvx fact d e df ef b ldx = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let eDim0 = Call.sizes1 $ Array.shape e+   let dfDim0 = Call.sizes1 $ MutArray.shape df+   let efDim0 = Call.sizes1 $ MutArray.shape ef+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let n = dDim0+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "ptsvx: n-1 == eDim0" (n-1 == eDim0)+   Call.assert "ptsvx: n == dfDim0" (n == dfDim0)+   Call.assert "ptsvx: n-1 == efDim0" (n-1 == efDim0)+   x <- Call.newArray2 nrhs ldx+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 n+   rwork <- Call.newArray1 n+   evalContT $ do+      factPtr <- Call.char fact+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      dPtr <- Call.array d+      ePtr <- Call.array e+      dfPtr <- Call.ioarray df+      efPtr <- Call.ioarray ef+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      rcondPtr <- Call.alloca+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ptsvx factPtr nPtr nrhsPtr dPtr ePtr dfPtr efPtr bPtr ldbPtr xPtr ldxPtr rcondPtr ferrPtr berrPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,,,)+         <*> Call.freezeArray x+         <*> peek rcondPtr+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpttrf.f>+pttrf ::+   IOArray ZeroInt Double {- ^ d -} ->+   IOArray ZeroInt (Complex Double) {- ^ e -} ->+   IO (Int)+pttrf d e = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let n = dDim0+   Call.assert "pttrf: n-1 == eDim0" (n-1 == eDim0)+   evalContT $ do+      nPtr <- Call.cint n+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      infoPtr <- Call.alloca+      liftIO $ FFI.pttrf nPtr dPtr ePtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpttrs.f>+pttrs ::+   Char {- ^ uplo -} ->+   Array ZeroInt Double {- ^ d -} ->+   Array ZeroInt (Complex Double) {- ^ e -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   IO (Int)+pttrs uplo d e b = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let eDim0 = Call.sizes1 $ Array.shape e+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = dDim0+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "pttrs: n-1 == eDim0" (n-1 == eDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      dPtr <- Call.array d+      ePtr <- Call.array e+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.pttrs uploPtr nPtr nrhsPtr dPtr ePtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zptts2.f>+ptts2 ::+   Int {- ^ iuplo -} ->+   Array ZeroInt Double {- ^ d -} ->+   Array ZeroInt (Complex Double) {- ^ e -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   IO ()+ptts2 iuplo d e b = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let eDim0 = Call.sizes1 $ Array.shape e+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = dDim0+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "ptts2: n-1 == eDim0" (n-1 == eDim0)+   evalContT $ do+      iuploPtr <- Call.cint iuplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      dPtr <- Call.array d+      ePtr <- Call.array e+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      liftIO $ FFI.ptts2 iuploPtr nPtr nrhsPtr dPtr ePtr bPtr ldbPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zrot.f>+rot ::+   IOArray ZeroInt (Complex Double) {- ^ cx -} ->+   Int {- ^ incx -} ->+   IOArray ZeroInt (Complex Double) {- ^ cy -} ->+   Int {- ^ incy -} ->+   Double {- ^ c -} ->+   Complex Double {- ^ s -} ->+   IO ()+rot cx incx cy incy c s = do+   let cxDim0 = Call.sizes1 $ MutArray.shape cx+   let cyDim0 = Call.sizes1 $ MutArray.shape cy+   let n = cxDim0+   Call.assert "rot: n == cyDim0" (n == cyDim0)+   evalContT $ do+      nPtr <- Call.cint n+      cxPtr <- Call.ioarray cx+      incxPtr <- Call.cint incx+      cyPtr <- Call.ioarray cy+      incyPtr <- Call.cint incy+      cPtr <- Call.double c+      sPtr <- Call.complexDouble s+      liftIO $ FFI.rot nPtr cxPtr incxPtr cyPtr incyPtr cPtr sPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zdrscl.f>+rscl ::+   Int {- ^ n -} ->+   Double {- ^ sa -} ->+   IOArray ZeroInt (Complex Double) {- ^ sx -} ->+   Int {- ^ incx -} ->+   IO ()+rscl n sa sx incx = do+   let sxDim0 = Call.sizes1 $ MutArray.shape sx+   let _sxSize = sxDim0+   evalContT $ do+      nPtr <- Call.cint n+      saPtr <- Call.double sa+      sxPtr <- Call.ioarray sx+      incxPtr <- Call.cint incx+      liftIO $ FFI.rscl nPtr saPtr sxPtr incxPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zspcon.f>+spcon ::+   Char {- ^ uplo -} ->+   Array ZeroInt (Complex Double) {- ^ ap -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Double {- ^ anorm -} ->+   IO (Double, Int)+spcon uplo ap ipiv anorm = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = ipivDim0+   Call.assert "spcon: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   work <- Call.newArray1 (2*n)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.array ap+      ipivPtr <- Call.array ipiv+      anormPtr <- Call.double anorm+      rcondPtr <- Call.alloca+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.spcon uploPtr nPtr apPtr ipivPtr anormPtr rcondPtr workPtr infoPtr+      liftIO $ pure (,)+         <*> peek rcondPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zspmv.f>+spmv ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Complex Double {- ^ alpha -} ->+   Array ZeroInt (Complex Double) {- ^ ap -} ->+   Array ZeroInt (Complex Double) {- ^ x -} ->+   Int {- ^ incx -} ->+   Complex Double {- ^ beta -} ->+   IOArray ZeroInt (Complex Double) {- ^ y -} ->+   Int {- ^ incy -} ->+   IO ()+spmv uplo n alpha ap x incx beta y incy = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let xDim0 = Call.sizes1 $ Array.shape x+   let yDim0 = Call.sizes1 $ MutArray.shape y+   let _apSize = apDim0+   let _xSize = xDim0+   let _ySize = yDim0+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      alphaPtr <- Call.complexDouble alpha+      apPtr <- Call.array ap+      xPtr <- Call.array x+      incxPtr <- Call.cint incx+      betaPtr <- Call.complexDouble beta+      yPtr <- Call.ioarray y+      incyPtr <- Call.cint incy+      liftIO $ FFI.spmv uploPtr nPtr alphaPtr apPtr xPtr incxPtr betaPtr yPtr incyPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zspr.f>+spr ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Complex Double {- ^ alpha -} ->+   Array ZeroInt (Complex Double) {- ^ x -} ->+   Int {- ^ incx -} ->+   IOArray ZeroInt (Complex Double) {- ^ ap -} ->+   IO ()+spr uplo n alpha x incx ap = do+   let xDim0 = Call.sizes1 $ Array.shape x+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   let _xSize = xDim0+   let _apSize = apDim0+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      alphaPtr <- Call.complexDouble alpha+      xPtr <- Call.array x+      incxPtr <- Call.cint incx+      apPtr <- Call.ioarray ap+      liftIO $ FFI.spr uploPtr nPtr alphaPtr xPtr incxPtr apPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zsprfs.f>+sprfs ::+   Char {- ^ uplo -} ->+   Array ZeroInt (Complex Double) {- ^ ap -} ->+   Array ZeroInt (Complex Double) {- ^ afp -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ x -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Int)+sprfs uplo ap afp ipiv b x = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let afpDim0 = Call.sizes1 $ Array.shape afp+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (xDim0,xDim1) = Call.sizes2 $ MutArray.shape x+   let n = ipivDim0+   let nrhs = bDim0+   let ldb = bDim1+   let ldx = xDim1+   Call.assert "sprfs: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   Call.assert "sprfs: n*(n+1)`div`2 == afpDim0" (n*(n+1)`div`2 == afpDim0)+   Call.assert "sprfs: nrhs == xDim0" (nrhs == xDim0)+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      apPtr <- Call.array ap+      afpPtr <- Call.array afp+      ipivPtr <- Call.array ipiv+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.sprfs uploPtr nPtr nrhsPtr apPtr afpPtr ipivPtr bPtr ldbPtr xPtr ldxPtr ferrPtr berrPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zspsv.f>+spsv ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt (Complex Double) {- ^ ap -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   IO (Array ZeroInt CInt, Int)+spsv uplo n ap b = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "spsv: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   ipiv <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      apPtr <- Call.ioarray ap+      ipivPtr <- Call.ioarray ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.spsv uploPtr nPtr nrhsPtr apPtr ipivPtr bPtr ldbPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zspsvx.f>+spsvx ::+   Char {- ^ fact -} ->+   Char {- ^ uplo -} ->+   Array ZeroInt (Complex Double) {- ^ ap -} ->+   IOArray ZeroInt (Complex Double) {- ^ afp -} ->+   IOArray ZeroInt CInt {- ^ ipiv -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   Int {- ^ ldx -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Double), Double, Array ZeroInt Double, Array ZeroInt Double, Int)+spsvx fact uplo ap afp ipiv b ldx = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let afpDim0 = Call.sizes1 $ MutArray.shape afp+   let ipivDim0 = Call.sizes1 $ MutArray.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let n = ipivDim0+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "spsvx: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   Call.assert "spsvx: n*(n+1)`div`2 == afpDim0" (n*(n+1)`div`2 == afpDim0)+   x <- Call.newArray2 nrhs ldx+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      factPtr <- Call.char fact+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      apPtr <- Call.array ap+      afpPtr <- Call.ioarray afp+      ipivPtr <- Call.ioarray ipiv+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      rcondPtr <- Call.alloca+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.spsvx factPtr uploPtr nPtr nrhsPtr apPtr afpPtr ipivPtr bPtr ldbPtr xPtr ldxPtr rcondPtr ferrPtr berrPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,,,)+         <*> Call.freezeArray x+         <*> peek rcondPtr+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zsptrf.f>+sptrf ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt (Complex Double) {- ^ ap -} ->+   IO (Array ZeroInt CInt, Int)+sptrf uplo n ap = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   Call.assert "sptrf: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   ipiv <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      ipivPtr <- Call.ioarray ipiv+      infoPtr <- Call.alloca+      liftIO $ FFI.sptrf uploPtr nPtr apPtr ipivPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zsptri.f>+sptri ::+   Char {- ^ uplo -} ->+   IOArray ZeroInt (Complex Double) {- ^ ap -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   IO (Int)+sptri uplo ap ipiv = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = ipivDim0+   Call.assert "sptri: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   work <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      ipivPtr <- Call.array ipiv+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.sptri uploPtr nPtr apPtr ipivPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zsptrs.f>+sptrs ::+   Char {- ^ uplo -} ->+   Array ZeroInt (Complex Double) {- ^ ap -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   IO (Int)+sptrs uplo ap ipiv b = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = ipivDim0+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "sptrs: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      apPtr <- Call.array ap+      ipivPtr <- Call.array ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.sptrs uploPtr nPtr nrhsPtr apPtr ipivPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zstedc.f>+stedc ::+   Char {- ^ compz -} ->+   IOArray ZeroInt Double {- ^ d -} ->+   IOArray ZeroInt Double {- ^ e -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ z -} ->+   Int {- ^ lwork -} ->+   Int {- ^ lrwork -} ->+   Int {- ^ liwork -} ->+   IO (Int)+stedc compz d e z lwork lrwork liwork = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = dDim0+   let ldz = zDim1+   Call.assert "stedc: n-1 == eDim0" (n-1 == eDim0)+   Call.assert "stedc: n == zDim0" (n == zDim0)+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 (maximum[1,lrwork])+   iwork <- Call.newArray1 (maximum[1,liwork])+   evalContT $ do+      compzPtr <- Call.char compz+      nPtr <- Call.cint n+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      lrworkPtr <- Call.cint lrwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      infoPtr <- Call.alloca+      liftIO $ FFI.stedc compzPtr nPtr dPtr ePtr zPtr ldzPtr workPtr lworkPtr rworkPtr lrworkPtr iworkPtr liworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zstegr.f>+stegr ::+   Char {- ^ jobz -} ->+   Char {- ^ range -} ->+   IOArray ZeroInt Double {- ^ d -} ->+   IOArray ZeroInt Double {- ^ e -} ->+   Double {- ^ vl -} ->+   Double {- ^ vu -} ->+   Int {- ^ il -} ->+   Int {- ^ iu -} ->+   Double {- ^ abstol -} ->+   Int {- ^ m -} ->+   Int {- ^ ldz -} ->+   Int {- ^ lwork -} ->+   Int {- ^ liwork -} ->+   IO (Int, Array ZeroInt Double, Array (ZeroInt,ZeroInt) (Complex Double), Array ZeroInt CInt, Int)+stegr jobz range d e vl vu il iu abstol m ldz lwork liwork = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let n = dDim0+   Call.assert "stegr: n == eDim0" (n == eDim0)+   w <- Call.newArray1 n+   z <- Call.newArray2 (maximum[1,m]) ldz+   isuppz <- Call.newArray1 (2*maximum[1,m])+   work <- Call.newArray1 lwork+   iwork <- Call.newArray1 liwork+   evalContT $ do+      jobzPtr <- Call.char jobz+      rangePtr <- Call.char range+      nPtr <- Call.cint n+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      vlPtr <- Call.double vl+      vuPtr <- Call.double vu+      ilPtr <- Call.cint il+      iuPtr <- Call.cint iu+      abstolPtr <- Call.double abstol+      mPtr <- Call.alloca+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      isuppzPtr <- Call.ioarray isuppz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      infoPtr <- Call.alloca+      liftIO $ FFI.stegr jobzPtr rangePtr nPtr dPtr ePtr vlPtr vuPtr ilPtr iuPtr abstolPtr mPtr wPtr zPtr ldzPtr isuppzPtr workPtr lworkPtr iworkPtr liworkPtr infoPtr+      liftIO $ pure (,,,,)+         <*> fmap fromIntegral (peek mPtr)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> Call.freezeArray isuppz+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zstein.f>+stein ::+   Array ZeroInt Double {- ^ d -} ->+   Array ZeroInt Double {- ^ e -} ->+   Int {- ^ m -} ->+   Array ZeroInt Double {- ^ w -} ->+   Array ZeroInt CInt {- ^ iblock -} ->+   Array ZeroInt CInt {- ^ isplit -} ->+   Int {- ^ ldz -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Double), Array ZeroInt CInt, Int)+stein d e m w iblock isplit ldz = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let eDim0 = Call.sizes1 $ Array.shape e+   let wDim0 = Call.sizes1 $ Array.shape w+   let iblockDim0 = Call.sizes1 $ Array.shape iblock+   let isplitDim0 = Call.sizes1 $ Array.shape isplit+   let n = dDim0+   Call.assert "stein: n-1 == eDim0" (n-1 == eDim0)+   Call.assert "stein: n == wDim0" (n == wDim0)+   Call.assert "stein: n == iblockDim0" (n == iblockDim0)+   Call.assert "stein: n == isplitDim0" (n == isplitDim0)+   z <- Call.newArray2 m ldz+   work <- Call.newArray1 (5*n)+   iwork <- Call.newArray1 n+   ifail <- Call.newArray1 m+   evalContT $ do+      nPtr <- Call.cint n+      dPtr <- Call.array d+      ePtr <- Call.array e+      mPtr <- Call.cint m+      wPtr <- Call.array w+      iblockPtr <- Call.array iblock+      isplitPtr <- Call.array isplit+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      ifailPtr <- Call.ioarray ifail+      infoPtr <- Call.alloca+      liftIO $ FFI.stein nPtr dPtr ePtr mPtr wPtr iblockPtr isplitPtr zPtr ldzPtr workPtr iworkPtr ifailPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray z+         <*> Call.freezeArray ifail+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zstemr.f>+stemr ::+   Char {- ^ jobz -} ->+   Char {- ^ range -} ->+   IOArray ZeroInt Double {- ^ d -} ->+   IOArray ZeroInt Double {- ^ e -} ->+   Double {- ^ vl -} ->+   Double {- ^ vu -} ->+   Int {- ^ il -} ->+   Int {- ^ iu -} ->+   Int {- ^ m -} ->+   Int {- ^ ldz -} ->+   Int {- ^ nzc -} ->+   Bool {- ^ tryrac -} ->+   Int {- ^ lwork -} ->+   Int {- ^ liwork -} ->+   IO (Int, Array ZeroInt Double, Array (ZeroInt,ZeroInt) (Complex Double), Array ZeroInt CInt, Bool, Int)+stemr jobz range d e vl vu il iu m ldz nzc tryrac lwork liwork = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let n = dDim0+   Call.assert "stemr: n == eDim0" (n == eDim0)+   w <- Call.newArray1 n+   z <- Call.newArray2 (maximum[1,m]) ldz+   isuppz <- Call.newArray1 (2*maximum[1,m])+   work <- Call.newArray1 lwork+   iwork <- Call.newArray1 liwork+   evalContT $ do+      jobzPtr <- Call.char jobz+      rangePtr <- Call.char range+      nPtr <- Call.cint n+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      vlPtr <- Call.double vl+      vuPtr <- Call.double vu+      ilPtr <- Call.cint il+      iuPtr <- Call.cint iu+      mPtr <- Call.alloca+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      nzcPtr <- Call.cint nzc+      isuppzPtr <- Call.ioarray isuppz+      tryracPtr <- Call.bool tryrac+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      infoPtr <- Call.alloca+      liftIO $ FFI.stemr jobzPtr rangePtr nPtr dPtr ePtr vlPtr vuPtr ilPtr iuPtr mPtr wPtr zPtr ldzPtr nzcPtr isuppzPtr tryracPtr workPtr lworkPtr iworkPtr liworkPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> fmap fromIntegral (peek mPtr)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> Call.freezeArray isuppz+         <*> peek tryracPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zsteqr.f>+steqr ::+   Char {- ^ compz -} ->+   IOArray ZeroInt Double {- ^ d -} ->+   IOArray ZeroInt Double {- ^ e -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ z -} ->+   IO (Int)+steqr compz d e z = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = dDim0+   let ldz = zDim1+   Call.assert "steqr: n-1 == eDim0" (n-1 == eDim0)+   Call.assert "steqr: n == zDim0" (n == zDim0)+   work <- Call.newArray1 (maximum[1,2*n-2])+   evalContT $ do+      compzPtr <- Call.char compz+      nPtr <- Call.cint n+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.steqr compzPtr nPtr dPtr ePtr zPtr ldzPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dzsum1.f>+sum1 ::+   Array ZeroInt (Complex Double) {- ^ cx -} ->+   Int {- ^ incx -} ->+   IO Double+sum1 cx incx = do+   let cxDim0 = Call.sizes1 $ Array.shape cx+   let n = cxDim0+   evalContT $ do+      nPtr <- Call.cint n+      cxPtr <- Call.array cx+      incxPtr <- Call.cint incx+      liftIO $ FFI.sum1 nPtr cxPtr incxPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zsycon.f>+sycon ::+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Double {- ^ anorm -} ->+   IO (Double, Int)+sycon uplo a ipiv anorm = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = aDim0+   let lda = aDim1+   Call.assert "sycon: n == ipivDim0" (n == ipivDim0)+   work <- Call.newArray1 (2*n)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.array ipiv+      anormPtr <- Call.double anorm+      rcondPtr <- Call.alloca+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.sycon uploPtr nPtr aPtr ldaPtr ipivPtr anormPtr rcondPtr workPtr infoPtr+      liftIO $ pure (,)+         <*> peek rcondPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zsyconv.f>+syconv ::+   Char {- ^ uplo -} ->+   Char {- ^ way -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   IO (Array ZeroInt (Complex Double), Int)+syconv uplo way a ipiv = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = aDim0+   let lda = aDim1+   Call.assert "syconv: n == ipivDim0" (n == ipivDim0)+   e <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      wayPtr <- Call.char way+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.array ipiv+      ePtr <- Call.ioarray e+      infoPtr <- Call.alloca+      liftIO $ FFI.syconv uploPtr wayPtr nPtr aPtr ldaPtr ipivPtr ePtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray e+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zsyequb.f>+syequb ::+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IO (Array ZeroInt Double, Double, Double, Int)+syequb uplo a = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   s <- Call.newArray1 n+   work <- Call.newArray1 (2*n)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      sPtr <- Call.ioarray s+      scondPtr <- Call.alloca+      amaxPtr <- Call.alloca+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.syequb uploPtr nPtr aPtr ldaPtr sPtr scondPtr amaxPtr workPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray s+         <*> peek scondPtr+         <*> peek amaxPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zsymv.f>+symv ::+   Char {- ^ uplo -} ->+   Complex Double {- ^ alpha -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array ZeroInt (Complex Double) {- ^ x -} ->+   Int {- ^ incx -} ->+   Complex Double {- ^ beta -} ->+   IOArray ZeroInt (Complex Double) {- ^ y -} ->+   Int {- ^ incy -} ->+   IO ()+symv uplo alpha a x incx beta y incy = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let xDim0 = Call.sizes1 $ Array.shape x+   let yDim0 = Call.sizes1 $ MutArray.shape y+   let n = aDim0+   let lda = aDim1+   let _xSize = xDim0+   let _ySize = yDim0+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      alphaPtr <- Call.complexDouble alpha+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      xPtr <- Call.array x+      incxPtr <- Call.cint incx+      betaPtr <- Call.complexDouble beta+      yPtr <- Call.ioarray y+      incyPtr <- Call.cint incy+      liftIO $ FFI.symv uploPtr nPtr alphaPtr aPtr ldaPtr xPtr incxPtr betaPtr yPtr incyPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zsyr.f>+syr ::+   Char {- ^ uplo -} ->+   Complex Double {- ^ alpha -} ->+   Array ZeroInt (Complex Double) {- ^ x -} ->+   Int {- ^ incx -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IO ()+syr uplo alpha x incx a = do+   let xDim0 = Call.sizes1 $ Array.shape x+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let _xSize = xDim0+   let n = aDim0+   let lda = aDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      alphaPtr <- Call.complexDouble alpha+      xPtr <- Call.array x+      incxPtr <- Call.cint incx+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      liftIO $ FFI.syr uploPtr nPtr alphaPtr xPtr incxPtr aPtr ldaPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zsyrfs.f>+syrfs ::+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ af -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ x -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Int)+syrfs uplo a af ipiv b x = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (afDim0,afDim1) = Call.sizes2 $ Array.shape af+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (xDim0,xDim1) = Call.sizes2 $ MutArray.shape x+   let n = aDim0+   let lda = aDim1+   let ldaf = afDim1+   let nrhs = bDim0+   let ldb = bDim1+   let ldx = xDim1+   Call.assert "syrfs: n == afDim0" (n == afDim0)+   Call.assert "syrfs: n == ipivDim0" (n == ipivDim0)+   Call.assert "syrfs: nrhs == xDim0" (nrhs == xDim0)+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      afPtr <- Call.array af+      ldafPtr <- Call.cint ldaf+      ipivPtr <- Call.array ipiv+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.syrfs uploPtr nPtr nrhsPtr aPtr ldaPtr afPtr ldafPtr ipivPtr bPtr ldbPtr xPtr ldxPtr ferrPtr berrPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zsysv.f>+sysv ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt CInt, Int)+sysv uplo a b lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   ipiv <- Call.newArray1 n+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.ioarray ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.sysv uploPtr nPtr nrhsPtr aPtr ldaPtr ipivPtr bPtr ldbPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zsysvx.f>+sysvx ::+   Char {- ^ fact -} ->+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ af -} ->+   IOArray ZeroInt CInt {- ^ ipiv -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   Int {- ^ ldx -} ->+   Int {- ^ lwork -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Double), Double, Array ZeroInt Double, Array ZeroInt Double, Int)+sysvx fact uplo a af ipiv b ldx lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (afDim0,afDim1) = Call.sizes2 $ MutArray.shape af+   let ipivDim0 = Call.sizes1 $ MutArray.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let n = aDim0+   let lda = aDim1+   let ldaf = afDim1+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "sysvx: n == afDim0" (n == afDim0)+   Call.assert "sysvx: n == ipivDim0" (n == ipivDim0)+   x <- Call.newArray2 nrhs ldx+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 n+   evalContT $ do+      factPtr <- Call.char fact+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      afPtr <- Call.ioarray af+      ldafPtr <- Call.cint ldaf+      ipivPtr <- Call.ioarray ipiv+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      rcondPtr <- Call.alloca+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.sysvx factPtr uploPtr nPtr nrhsPtr aPtr ldaPtr afPtr ldafPtr ipivPtr bPtr ldbPtr xPtr ldxPtr rcondPtr ferrPtr berrPtr workPtr lworkPtr rworkPtr infoPtr+      liftIO $ pure (,,,,)+         <*> Call.freezeArray x+         <*> peek rcondPtr+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zsyswapr.f>+syswapr ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Int {- ^ i1 -} ->+   Int {- ^ i2 -} ->+   IO ()+syswapr uplo a i1 i2 = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      i1Ptr <- Call.cint i1+      i2Ptr <- Call.cint i2+      liftIO $ FFI.syswapr uploPtr nPtr aPtr ldaPtr i1Ptr i2Ptr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zsytf2.f>+sytf2 ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IO (Array ZeroInt CInt, Int)+sytf2 uplo a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   ipiv <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.ioarray ipiv+      infoPtr <- Call.alloca+      liftIO $ FFI.sytf2 uploPtr nPtr aPtr ldaPtr ipivPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zsytrf.f>+sytrf ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt CInt, Int)+sytrf uplo a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   ipiv <- Call.newArray1 n+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.ioarray ipiv+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.sytrf uploPtr nPtr aPtr ldaPtr ipivPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zsytri.f>+sytri ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   IO (Int)+sytri uplo a ipiv = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = aDim0+   let lda = aDim1+   Call.assert "sytri: n == ipivDim0" (n == ipivDim0)+   work <- Call.newArray1 (2*n)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.array ipiv+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.sytri uploPtr nPtr aPtr ldaPtr ipivPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zsytri2.f>+sytri2 ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Int {- ^ nb -} ->+   Int {- ^ lwork -} ->+   IO (Int)+sytri2 uplo a ipiv nb lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = aDim0+   let lda = aDim1+   Call.assert "sytri2: n == ipivDim0" (n == ipivDim0)+   work <- Call.newArray1 (n+nb+1)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.array ipiv+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.sytri2 uploPtr nPtr aPtr ldaPtr ipivPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zsytri2x.f>+sytri2x ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Int {- ^ nb -} ->+   IO (Int)+sytri2x uplo a ipiv nb = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = aDim0+   let lda = aDim1+   Call.assert "sytri2x: n == ipivDim0" (n == ipivDim0)+   work <- Call.newArray2 (nb+3) (n+nb+1)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.array ipiv+      workPtr <- Call.ioarray work+      nbPtr <- Call.cint nb+      infoPtr <- Call.alloca+      liftIO $ FFI.sytri2x uploPtr nPtr aPtr ldaPtr ipivPtr workPtr nbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zsytrs.f>+sytrs ::+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   IO (Int)+sytrs uplo a ipiv b = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "sytrs: n == ipivDim0" (n == ipivDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.array ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.sytrs uploPtr nPtr nrhsPtr aPtr ldaPtr ipivPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zsytrs2.f>+sytrs2 ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   IO (Int)+sytrs2 uplo a ipiv b = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "sytrs2: n == ipivDim0" (n == ipivDim0)+   work <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.array ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.sytrs2 uploPtr nPtr nrhsPtr aPtr ldaPtr ipivPtr bPtr ldbPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztbcon.f>+tbcon ::+   Char {- ^ norm -} ->+   Char {- ^ uplo -} ->+   Char {- ^ diag -} ->+   Int {- ^ kd -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ ab -} ->+   IO (Double, Int)+tbcon norm uplo diag kd ab = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let n = abDim0+   let ldab = abDim1+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      normPtr <- Call.char norm+      uploPtr <- Call.char uplo+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      rcondPtr <- Call.alloca+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.tbcon normPtr uploPtr diagPtr nPtr kdPtr abPtr ldabPtr rcondPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,)+         <*> peek rcondPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztbrfs.f>+tbrfs ::+   Char {- ^ uplo -} ->+   Char {- ^ trans -} ->+   Char {- ^ diag -} ->+   Int {- ^ kd -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ ab -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ x -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Int)+tbrfs uplo trans diag kd ab b x = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (xDim0,xDim1) = Call.sizes2 $ Array.shape x+   let n = abDim0+   let ldab = abDim1+   let nrhs = bDim0+   let ldb = bDim1+   let ldx = xDim1+   Call.assert "tbrfs: nrhs == xDim0" (nrhs == xDim0)+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      transPtr <- Call.char trans+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      nrhsPtr <- Call.cint nrhs+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.array x+      ldxPtr <- Call.cint ldx+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.tbrfs uploPtr transPtr diagPtr nPtr kdPtr nrhsPtr abPtr ldabPtr bPtr ldbPtr xPtr ldxPtr ferrPtr berrPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztbtrs.f>+tbtrs ::+   Char {- ^ uplo -} ->+   Char {- ^ trans -} ->+   Char {- ^ diag -} ->+   Int {- ^ kd -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ ab -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   IO (Int)+tbtrs uplo trans diag kd ab b = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = abDim0+   let ldab = abDim1+   let nrhs = bDim0+   let ldb = bDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      transPtr <- Call.char trans+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      nrhsPtr <- Call.cint nrhs+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.tbtrs uploPtr transPtr diagPtr nPtr kdPtr nrhsPtr abPtr ldabPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztfsm.f>+tfsm ::+   Char {- ^ transr -} ->+   Char {- ^ side -} ->+   Char {- ^ uplo -} ->+   Char {- ^ trans -} ->+   Char {- ^ diag -} ->+   Int {- ^ m -} ->+   Complex Double {- ^ alpha -} ->+   Array ZeroInt (Complex Double) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   IO ()+tfsm transr side uplo trans diag m alpha a b = do+   let aDim0 = Call.sizes1 $ Array.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = bDim0+   let ldb = bDim1+   Call.assert "tfsm: n*(n+1)`div`2 == aDim0" (n*(n+1)`div`2 == aDim0)+   evalContT $ do+      transrPtr <- Call.char transr+      sidePtr <- Call.char side+      uploPtr <- Call.char uplo+      transPtr <- Call.char trans+      diagPtr <- Call.char diag+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      alphaPtr <- Call.complexDouble alpha+      aPtr <- Call.array a+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      liftIO $ FFI.tfsm transrPtr sidePtr uploPtr transPtr diagPtr mPtr nPtr alphaPtr aPtr bPtr ldbPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztftri.f>+tftri ::+   Char {- ^ transr -} ->+   Char {- ^ uplo -} ->+   Char {- ^ diag -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt (Complex Double) {- ^ a -} ->+   IO (Int)+tftri transr uplo diag n a = do+   let aDim0 = Call.sizes1 $ MutArray.shape a+   Call.assert "tftri: n*(n+1)`div`2 == aDim0" (n*(n+1)`div`2 == aDim0)+   evalContT $ do+      transrPtr <- Call.char transr+      uploPtr <- Call.char uplo+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      infoPtr <- Call.alloca+      liftIO $ FFI.tftri transrPtr uploPtr diagPtr nPtr aPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztfttp.f>+tfttp ::+   Char {- ^ transr -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Array ZeroInt (Complex Double) {- ^ arf -} ->+   IO (Array ZeroInt (Complex Double), Int)+tfttp transr uplo n arf = do+   let arfDim0 = Call.sizes1 $ Array.shape arf+   Call.assert "tfttp: n*(n+1)`div`2 == arfDim0" (n*(n+1)`div`2 == arfDim0)+   ap <- Call.newArray1 (n*(n+1)`div`2)+   evalContT $ do+      transrPtr <- Call.char transr+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      arfPtr <- Call.array arf+      apPtr <- Call.ioarray ap+      infoPtr <- Call.alloca+      liftIO $ FFI.tfttp transrPtr uploPtr nPtr arfPtr apPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ap+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztfttr.f>+tfttr ::+   Char {- ^ transr -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Array ZeroInt (Complex Double) {- ^ arf -} ->+   Int {- ^ lda -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Double), Int)+tfttr transr uplo n arf lda = do+   let arfDim0 = Call.sizes1 $ Array.shape arf+   Call.assert "tfttr: n*(n+1)`div`2 == arfDim0" (n*(n+1)`div`2 == arfDim0)+   a <- Call.newArray2 n lda+   evalContT $ do+      transrPtr <- Call.char transr+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      arfPtr <- Call.array arf+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      infoPtr <- Call.alloca+      liftIO $ FFI.tfttr transrPtr uploPtr nPtr arfPtr aPtr ldaPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray a+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztgevc.f>+tgevc ::+   Char {- ^ side -} ->+   Char {- ^ howmny -} ->+   Array ZeroInt Bool {- ^ select -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ s -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ p -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ vl -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ vr -} ->+   IO (Int, Int)+tgevc side howmny select s p vl vr = do+   let selectDim0 = Call.sizes1 $ Array.shape select+   let (sDim0,sDim1) = Call.sizes2 $ Array.shape s+   let (pDim0,pDim1) = Call.sizes2 $ Array.shape p+   let (vlDim0,vlDim1) = Call.sizes2 $ MutArray.shape vl+   let (vrDim0,vrDim1) = Call.sizes2 $ MutArray.shape vr+   let n = selectDim0+   let lds = sDim1+   let ldp = pDim1+   let mm = vlDim0+   let ldvl = vlDim1+   let ldvr = vrDim1+   Call.assert "tgevc: n == sDim0" (n == sDim0)+   Call.assert "tgevc: n == pDim0" (n == pDim0)+   Call.assert "tgevc: mm == vrDim0" (mm == vrDim0)+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 (2*n)+   evalContT $ do+      sidePtr <- Call.char side+      howmnyPtr <- Call.char howmny+      selectPtr <- Call.array select+      nPtr <- Call.cint n+      sPtr <- Call.array s+      ldsPtr <- Call.cint lds+      pPtr <- Call.array p+      ldpPtr <- Call.cint ldp+      vlPtr <- Call.ioarray vl+      ldvlPtr <- Call.cint ldvl+      vrPtr <- Call.ioarray vr+      ldvrPtr <- Call.cint ldvr+      mmPtr <- Call.cint mm+      mPtr <- Call.alloca+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.tgevc sidePtr howmnyPtr selectPtr nPtr sPtr ldsPtr pPtr ldpPtr vlPtr ldvlPtr vrPtr ldvrPtr mmPtr mPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,)+         <*> fmap fromIntegral (peek mPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztgex2.f>+tgex2 ::+   Bool {- ^ wantq -} ->+   Bool {- ^ wantz -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ q -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ z -} ->+   Int {- ^ j1 -} ->+   IO (Int)+tgex2 wantq wantz a b q z j1 = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let _aSize = aDim0+   let lda = aDim1+   let _bSize = bDim0+   let ldb = bDim1+   let n = qDim0+   let ldq = qDim1+   let ldz = zDim1+   Call.assert "tgex2: n == zDim0" (n == zDim0)+   evalContT $ do+      wantqPtr <- Call.bool wantq+      wantzPtr <- Call.bool wantz+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      j1Ptr <- Call.cint j1+      infoPtr <- Call.alloca+      liftIO $ FFI.tgex2 wantqPtr wantzPtr nPtr aPtr ldaPtr bPtr ldbPtr qPtr ldqPtr zPtr ldzPtr j1Ptr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztgexc.f>+tgexc ::+   Bool {- ^ wantq -} ->+   Bool {- ^ wantz -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ q -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ z -} ->+   Int {- ^ ifst -} ->+   Int {- ^ ilst -} ->+   IO (Int, Int)+tgexc wantq wantz a b q z ifst ilst = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   let ldq = qDim1+   let ldz = zDim1+   Call.assert "tgexc: n == bDim0" (n == bDim0)+   Call.assert "tgexc: n == qDim0" (n == qDim0)+   Call.assert "tgexc: n == zDim0" (n == zDim0)+   evalContT $ do+      wantqPtr <- Call.bool wantq+      wantzPtr <- Call.bool wantz+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      ifstPtr <- Call.cint ifst+      ilstPtr <- Call.cint ilst+      infoPtr <- Call.alloca+      liftIO $ FFI.tgexc wantqPtr wantzPtr nPtr aPtr ldaPtr bPtr ldbPtr qPtr ldqPtr zPtr ldzPtr ifstPtr ilstPtr infoPtr+      liftIO $ pure (,)+         <*> fmap fromIntegral (peek ilstPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztgsen.f>+tgsen ::+   Int {- ^ ijob -} ->+   Bool {- ^ wantq -} ->+   Bool {- ^ wantz -} ->+   Array ZeroInt Bool {- ^ select -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ q -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ z -} ->+   Int {- ^ lwork -} ->+   Int {- ^ liwork -} ->+   IO (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double), Int, Double, Double, Array ZeroInt Double, Int)+tgsen ijob wantq wantz select a b q z lwork liwork = do+   let selectDim0 = Call.sizes1 $ Array.shape select+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = selectDim0+   let lda = aDim1+   let ldb = bDim1+   let ldq = qDim1+   let ldz = zDim1+   Call.assert "tgsen: n == aDim0" (n == aDim0)+   Call.assert "tgsen: n == bDim0" (n == bDim0)+   Call.assert "tgsen: n == qDim0" (n == qDim0)+   Call.assert "tgsen: n == zDim0" (n == zDim0)+   alpha <- Call.newArray1 n+   beta <- Call.newArray1 n+   dif <- Call.newArray1 2+   work <- Call.newArray1 (maximum[1,lwork])+   iwork <- Call.newArray1 (maximum[1,liwork])+   evalContT $ do+      ijobPtr <- Call.cint ijob+      wantqPtr <- Call.bool wantq+      wantzPtr <- Call.bool wantz+      selectPtr <- Call.array select+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      alphaPtr <- Call.ioarray alpha+      betaPtr <- Call.ioarray beta+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      mPtr <- Call.alloca+      plPtr <- Call.alloca+      prPtr <- Call.alloca+      difPtr <- Call.ioarray dif+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      infoPtr <- Call.alloca+      liftIO $ FFI.tgsen ijobPtr wantqPtr wantzPtr selectPtr nPtr aPtr ldaPtr bPtr ldbPtr alphaPtr betaPtr qPtr ldqPtr zPtr ldzPtr mPtr plPtr prPtr difPtr workPtr lworkPtr iworkPtr liworkPtr infoPtr+      liftIO $ pure (,,,,,,)+         <*> Call.freezeArray alpha+         <*> Call.freezeArray beta+         <*> fmap fromIntegral (peek mPtr)+         <*> peek plPtr+         <*> peek prPtr+         <*> Call.freezeArray dif+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztgsja.f>+tgsja ::+   Char {- ^ jobu -} ->+   Char {- ^ jobv -} ->+   Char {- ^ jobq -} ->+   Int {- ^ k -} ->+   Int {- ^ l -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   Double {- ^ tola -} ->+   Double {- ^ tolb -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ u -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ v -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ q -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Int, Int)+tgsja jobu jobv jobq k l a b tola tolb u v q = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let (uDim0,uDim1) = Call.sizes2 $ MutArray.shape u+   let (vDim0,vDim1) = Call.sizes2 $ MutArray.shape v+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   let m = uDim0+   let ldu = uDim1+   let p = vDim0+   let ldv = vDim1+   let ldq = qDim1+   Call.assert "tgsja: n == bDim0" (n == bDim0)+   Call.assert "tgsja: n == qDim0" (n == qDim0)+   alpha <- Call.newArray1 n+   beta <- Call.newArray1 n+   work <- Call.newArray1 (2*n)+   evalContT $ do+      jobuPtr <- Call.char jobu+      jobvPtr <- Call.char jobv+      jobqPtr <- Call.char jobq+      mPtr <- Call.cint m+      pPtr <- Call.cint p+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      lPtr <- Call.cint l+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      tolaPtr <- Call.double tola+      tolbPtr <- Call.double tolb+      alphaPtr <- Call.ioarray alpha+      betaPtr <- Call.ioarray beta+      uPtr <- Call.ioarray u+      lduPtr <- Call.cint ldu+      vPtr <- Call.ioarray v+      ldvPtr <- Call.cint ldv+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      workPtr <- Call.ioarray work+      ncyclePtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.tgsja jobuPtr jobvPtr jobqPtr mPtr pPtr nPtr kPtr lPtr aPtr ldaPtr bPtr ldbPtr tolaPtr tolbPtr alphaPtr betaPtr uPtr lduPtr vPtr ldvPtr qPtr ldqPtr workPtr ncyclePtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray alpha+         <*> Call.freezeArray beta+         <*> fmap fromIntegral (peek ncyclePtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztgsna.f>+tgsna ::+   Char {- ^ job -} ->+   Char {- ^ howmny -} ->+   Array ZeroInt Bool {- ^ select -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ vl -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ vr -} ->+   Int {- ^ mm -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Int, Int)+tgsna job howmny select a b vl vr mm lwork = do+   let selectDim0 = Call.sizes1 $ Array.shape select+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (vlDim0,vlDim1) = Call.sizes2 $ Array.shape vl+   let (vrDim0,vrDim1) = Call.sizes2 $ Array.shape vr+   let n = selectDim0+   let lda = aDim1+   let ldb = bDim1+   let m = vlDim0+   let ldvl = vlDim1+   let ldvr = vrDim1+   Call.assert "tgsna: n == aDim0" (n == aDim0)+   Call.assert "tgsna: n == bDim0" (n == bDim0)+   Call.assert "tgsna: m == vrDim0" (m == vrDim0)+   s <- Call.newArray1 mm+   dif <- Call.newArray1 mm+   work <- Call.newArray1 (maximum[1,lwork])+   iwork <- Call.newArray1 (n+2)+   evalContT $ do+      jobPtr <- Call.char job+      howmnyPtr <- Call.char howmny+      selectPtr <- Call.array select+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      vlPtr <- Call.array vl+      ldvlPtr <- Call.cint ldvl+      vrPtr <- Call.array vr+      ldvrPtr <- Call.cint ldvr+      sPtr <- Call.ioarray s+      difPtr <- Call.ioarray dif+      mmPtr <- Call.cint mm+      mPtr <- Call.alloca+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.tgsna jobPtr howmnyPtr selectPtr nPtr aPtr ldaPtr bPtr ldbPtr vlPtr ldvlPtr vrPtr ldvrPtr sPtr difPtr mmPtr mPtr workPtr lworkPtr iworkPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray s+         <*> Call.freezeArray dif+         <*> fmap fromIntegral (peek mPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztgsy2.f>+tgsy2 ::+   Char {- ^ trans -} ->+   Int {- ^ ijob -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ c -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ d -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ e -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ f -} ->+   Double {- ^ rdsum -} ->+   Double {- ^ rdscal -} ->+   IO (Double, Double, Double, Int)+tgsy2 trans ijob a b c d e f rdsum rdscal = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let (dDim0,dDim1) = Call.sizes2 $ Array.shape d+   let (eDim0,eDim1) = Call.sizes2 $ Array.shape e+   let (fDim0,fDim1) = Call.sizes2 $ MutArray.shape f+   let m = aDim0+   let lda = aDim1+   let n = bDim0+   let ldb = bDim1+   let ldc = cDim1+   let ldd = dDim1+   let lde = eDim1+   let ldf = fDim1+   Call.assert "tgsy2: n == cDim0" (n == cDim0)+   Call.assert "tgsy2: m == dDim0" (m == dDim0)+   Call.assert "tgsy2: n == eDim0" (n == eDim0)+   Call.assert "tgsy2: n == fDim0" (n == fDim0)+   evalContT $ do+      transPtr <- Call.char trans+      ijobPtr <- Call.cint ijob+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      dPtr <- Call.array d+      lddPtr <- Call.cint ldd+      ePtr <- Call.array e+      ldePtr <- Call.cint lde+      fPtr <- Call.ioarray f+      ldfPtr <- Call.cint ldf+      scalePtr <- Call.alloca+      rdsumPtr <- Call.double rdsum+      rdscalPtr <- Call.double rdscal+      infoPtr <- Call.alloca+      liftIO $ FFI.tgsy2 transPtr ijobPtr mPtr nPtr aPtr ldaPtr bPtr ldbPtr cPtr ldcPtr dPtr lddPtr ePtr ldePtr fPtr ldfPtr scalePtr rdsumPtr rdscalPtr infoPtr+      liftIO $ pure (,,,)+         <*> peek scalePtr+         <*> peek rdsumPtr+         <*> peek rdscalPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztgsyl.f>+tgsyl ::+   Char {- ^ trans -} ->+   Int {- ^ ijob -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ c -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ d -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ e -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ f -} ->+   Int {- ^ lwork -} ->+   IO (Double, Double, Int)+tgsyl trans ijob a b c d e f lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let (dDim0,dDim1) = Call.sizes2 $ Array.shape d+   let (eDim0,eDim1) = Call.sizes2 $ Array.shape e+   let (fDim0,fDim1) = Call.sizes2 $ MutArray.shape f+   let m = aDim0+   let lda = aDim1+   let n = bDim0+   let ldb = bDim1+   let ldc = cDim1+   let ldd = dDim1+   let lde = eDim1+   let ldf = fDim1+   Call.assert "tgsyl: n == cDim0" (n == cDim0)+   Call.assert "tgsyl: m == dDim0" (m == dDim0)+   Call.assert "tgsyl: n == eDim0" (n == eDim0)+   Call.assert "tgsyl: n == fDim0" (n == fDim0)+   work <- Call.newArray1 (maximum[1,lwork])+   iwork <- Call.newArray1 (m+n+2)+   evalContT $ do+      transPtr <- Call.char trans+      ijobPtr <- Call.cint ijob+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      dPtr <- Call.array d+      lddPtr <- Call.cint ldd+      ePtr <- Call.array e+      ldePtr <- Call.cint lde+      fPtr <- Call.ioarray f+      ldfPtr <- Call.cint ldf+      scalePtr <- Call.alloca+      difPtr <- Call.alloca+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.tgsyl transPtr ijobPtr mPtr nPtr aPtr ldaPtr bPtr ldbPtr cPtr ldcPtr dPtr lddPtr ePtr ldePtr fPtr ldfPtr scalePtr difPtr workPtr lworkPtr iworkPtr infoPtr+      liftIO $ pure (,,)+         <*> peek scalePtr+         <*> peek difPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztpcon.f>+tpcon ::+   Char {- ^ norm -} ->+   Char {- ^ uplo -} ->+   Char {- ^ diag -} ->+   Int {- ^ n -} ->+   Array ZeroInt (Complex Double) {- ^ ap -} ->+   IO (Double, Int)+tpcon norm uplo diag n ap = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   Call.assert "tpcon: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      normPtr <- Call.char norm+      uploPtr <- Call.char uplo+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      apPtr <- Call.array ap+      rcondPtr <- Call.alloca+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.tpcon normPtr uploPtr diagPtr nPtr apPtr rcondPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,)+         <*> peek rcondPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztprfs.f>+tprfs ::+   Char {- ^ uplo -} ->+   Char {- ^ trans -} ->+   Char {- ^ diag -} ->+   Int {- ^ n -} ->+   Array ZeroInt (Complex Double) {- ^ ap -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ x -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Int)+tprfs uplo trans diag n ap b x = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (xDim0,xDim1) = Call.sizes2 $ Array.shape x+   let nrhs = bDim0+   let ldb = bDim1+   let ldx = xDim1+   Call.assert "tprfs: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   Call.assert "tprfs: nrhs == xDim0" (nrhs == xDim0)+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      transPtr <- Call.char trans+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      apPtr <- Call.array ap+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.array x+      ldxPtr <- Call.cint ldx+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.tprfs uploPtr transPtr diagPtr nPtr nrhsPtr apPtr bPtr ldbPtr xPtr ldxPtr ferrPtr berrPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztptri.f>+tptri ::+   Char {- ^ uplo -} ->+   Char {- ^ diag -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt (Complex Double) {- ^ ap -} ->+   IO (Int)+tptri uplo diag n ap = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   Call.assert "tptri: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      infoPtr <- Call.alloca+      liftIO $ FFI.tptri uploPtr diagPtr nPtr apPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztptrs.f>+tptrs ::+   Char {- ^ uplo -} ->+   Char {- ^ trans -} ->+   Char {- ^ diag -} ->+   Int {- ^ n -} ->+   Array ZeroInt (Complex Double) {- ^ ap -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   IO (Int)+tptrs uplo trans diag n ap b = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "tptrs: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      transPtr <- Call.char trans+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      apPtr <- Call.array ap+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.tptrs uploPtr transPtr diagPtr nPtr nrhsPtr apPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztpttf.f>+tpttf ::+   Char {- ^ transr -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Array ZeroInt (Complex Double) {- ^ ap -} ->+   IO (Array ZeroInt (Complex Double), Int)+tpttf transr uplo n ap = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   Call.assert "tpttf: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   arf <- Call.newArray1 (n*(n+1)`div`2)+   evalContT $ do+      transrPtr <- Call.char transr+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.array ap+      arfPtr <- Call.ioarray arf+      infoPtr <- Call.alloca+      liftIO $ FFI.tpttf transrPtr uploPtr nPtr apPtr arfPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray arf+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztpttr.f>+tpttr ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Array ZeroInt (Complex Double) {- ^ ap -} ->+   Int {- ^ lda -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Double), Int)+tpttr uplo n ap lda = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   Call.assert "tpttr: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   a <- Call.newArray2 n lda+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.array ap+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      infoPtr <- Call.alloca+      liftIO $ FFI.tpttr uploPtr nPtr apPtr aPtr ldaPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray a+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztrcon.f>+trcon ::+   Char {- ^ norm -} ->+   Char {- ^ uplo -} ->+   Char {- ^ diag -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IO (Double, Int)+trcon norm uplo diag a = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      normPtr <- Call.char norm+      uploPtr <- Call.char uplo+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      rcondPtr <- Call.alloca+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.trcon normPtr uploPtr diagPtr nPtr aPtr ldaPtr rcondPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,)+         <*> peek rcondPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztrevc.f>+trevc ::+   Char {- ^ side -} ->+   Char {- ^ howmny -} ->+   Array ZeroInt Bool {- ^ select -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ t -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ vl -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ vr -} ->+   IO (Int, Int)+trevc side howmny select t vl vr = do+   let selectDim0 = Call.sizes1 $ Array.shape select+   let (tDim0,tDim1) = Call.sizes2 $ MutArray.shape t+   let (vlDim0,vlDim1) = Call.sizes2 $ MutArray.shape vl+   let (vrDim0,vrDim1) = Call.sizes2 $ MutArray.shape vr+   let n = selectDim0+   let ldt = tDim1+   let mm = vlDim0+   let ldvl = vlDim1+   let ldvr = vrDim1+   Call.assert "trevc: n == tDim0" (n == tDim0)+   Call.assert "trevc: mm == vrDim0" (mm == vrDim0)+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      sidePtr <- Call.char side+      howmnyPtr <- Call.char howmny+      selectPtr <- Call.array select+      nPtr <- Call.cint n+      tPtr <- Call.ioarray t+      ldtPtr <- Call.cint ldt+      vlPtr <- Call.ioarray vl+      ldvlPtr <- Call.cint ldvl+      vrPtr <- Call.ioarray vr+      ldvrPtr <- Call.cint ldvr+      mmPtr <- Call.cint mm+      mPtr <- Call.alloca+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.trevc sidePtr howmnyPtr selectPtr nPtr tPtr ldtPtr vlPtr ldvlPtr vrPtr ldvrPtr mmPtr mPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,)+         <*> fmap fromIntegral (peek mPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztrexc.f>+trexc ::+   Char {- ^ compq -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ t -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ q -} ->+   Int {- ^ ifst -} ->+   Int {- ^ ilst -} ->+   IO (Int)+trexc compq t q ifst ilst = do+   let (tDim0,tDim1) = Call.sizes2 $ MutArray.shape t+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let n = tDim0+   let ldt = tDim1+   let ldq = qDim1+   Call.assert "trexc: n == qDim0" (n == qDim0)+   evalContT $ do+      compqPtr <- Call.char compq+      nPtr <- Call.cint n+      tPtr <- Call.ioarray t+      ldtPtr <- Call.cint ldt+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      ifstPtr <- Call.cint ifst+      ilstPtr <- Call.cint ilst+      infoPtr <- Call.alloca+      liftIO $ FFI.trexc compqPtr nPtr tPtr ldtPtr qPtr ldqPtr ifstPtr ilstPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztrrfs.f>+trrfs ::+   Char {- ^ uplo -} ->+   Char {- ^ trans -} ->+   Char {- ^ diag -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ x -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Int)+trrfs uplo trans diag a b x = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (xDim0,xDim1) = Call.sizes2 $ Array.shape x+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   let ldx = xDim1+   Call.assert "trrfs: nrhs == xDim0" (nrhs == xDim0)+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      transPtr <- Call.char trans+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.array x+      ldxPtr <- Call.cint ldx+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.trrfs uploPtr transPtr diagPtr nPtr nrhsPtr aPtr ldaPtr bPtr ldbPtr xPtr ldxPtr ferrPtr berrPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztrsen.f>+trsen ::+   Char {- ^ job -} ->+   Char {- ^ compq -} ->+   Array ZeroInt Bool {- ^ select -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ t -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ q -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt (Complex Double), Int, Double, Double, Int)+trsen job compq select t q lwork = do+   let selectDim0 = Call.sizes1 $ Array.shape select+   let (tDim0,tDim1) = Call.sizes2 $ MutArray.shape t+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let n = selectDim0+   let ldt = tDim1+   let ldq = qDim1+   Call.assert "trsen: n == tDim0" (n == tDim0)+   Call.assert "trsen: n == qDim0" (n == qDim0)+   w <- Call.newArray1 n+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      jobPtr <- Call.char job+      compqPtr <- Call.char compq+      selectPtr <- Call.array select+      nPtr <- Call.cint n+      tPtr <- Call.ioarray t+      ldtPtr <- Call.cint ldt+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      wPtr <- Call.ioarray w+      mPtr <- Call.alloca+      sPtr <- Call.alloca+      sepPtr <- Call.alloca+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.trsen jobPtr compqPtr selectPtr nPtr tPtr ldtPtr qPtr ldqPtr wPtr mPtr sPtr sepPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,,,,)+         <*> Call.freezeArray w+         <*> fmap fromIntegral (peek mPtr)+         <*> peek sPtr+         <*> peek sepPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztrsna.f>+trsna ::+   Char {- ^ job -} ->+   Char {- ^ howmny -} ->+   Array ZeroInt Bool {- ^ select -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ t -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ vl -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ vr -} ->+   Int {- ^ mm -} ->+   Int {- ^ ldwork -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Int, Int)+trsna job howmny select t vl vr mm ldwork = do+   let selectDim0 = Call.sizes1 $ Array.shape select+   let (tDim0,tDim1) = Call.sizes2 $ Array.shape t+   let (vlDim0,vlDim1) = Call.sizes2 $ Array.shape vl+   let (vrDim0,vrDim1) = Call.sizes2 $ Array.shape vr+   let n = selectDim0+   let ldt = tDim1+   let m = vlDim0+   let ldvl = vlDim1+   let ldvr = vrDim1+   Call.assert "trsna: n == tDim0" (n == tDim0)+   Call.assert "trsna: m == vrDim0" (m == vrDim0)+   s <- Call.newArray1 mm+   sep <- Call.newArray1 mm+   work <- Call.newArray2 (n+6) ldwork+   rwork <- Call.newArray1 n+   evalContT $ do+      jobPtr <- Call.char job+      howmnyPtr <- Call.char howmny+      selectPtr <- Call.array select+      nPtr <- Call.cint n+      tPtr <- Call.array t+      ldtPtr <- Call.cint ldt+      vlPtr <- Call.array vl+      ldvlPtr <- Call.cint ldvl+      vrPtr <- Call.array vr+      ldvrPtr <- Call.cint ldvr+      sPtr <- Call.ioarray s+      sepPtr <- Call.ioarray sep+      mmPtr <- Call.cint mm+      mPtr <- Call.alloca+      workPtr <- Call.ioarray work+      ldworkPtr <- Call.cint ldwork+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.trsna jobPtr howmnyPtr selectPtr nPtr tPtr ldtPtr vlPtr ldvlPtr vrPtr ldvrPtr sPtr sepPtr mmPtr mPtr workPtr ldworkPtr rworkPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray s+         <*> Call.freezeArray sep+         <*> fmap fromIntegral (peek mPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztrsyl.f>+trsyl ::+   Char {- ^ trana -} ->+   Char {- ^ tranb -} ->+   Int {- ^ isgn -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ c -} ->+   IO (Double, Int)+trsyl trana tranb isgn a b c = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let m = aDim0+   let lda = aDim1+   let n = bDim0+   let ldb = bDim1+   let ldc = cDim1+   Call.assert "trsyl: n == cDim0" (n == cDim0)+   evalContT $ do+      tranaPtr <- Call.char trana+      tranbPtr <- Call.char tranb+      isgnPtr <- Call.cint isgn+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      scalePtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.trsyl tranaPtr tranbPtr isgnPtr mPtr nPtr aPtr ldaPtr bPtr ldbPtr cPtr ldcPtr scalePtr infoPtr+      liftIO $ pure (,)+         <*> peek scalePtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztrti2.f>+trti2 ::+   Char {- ^ uplo -} ->+   Char {- ^ diag -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IO (Int)+trti2 uplo diag a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      infoPtr <- Call.alloca+      liftIO $ FFI.trti2 uploPtr diagPtr nPtr aPtr ldaPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztrtri.f>+trtri ::+   Char {- ^ uplo -} ->+   Char {- ^ diag -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IO (Int)+trtri uplo diag a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      infoPtr <- Call.alloca+      liftIO $ FFI.trtri uploPtr diagPtr nPtr aPtr ldaPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztrtrs.f>+trtrs ::+   Char {- ^ uplo -} ->+   Char {- ^ trans -} ->+   Char {- ^ diag -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ b -} ->+   IO (Int)+trtrs uplo trans diag a b = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      transPtr <- Call.char trans+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.trtrs uploPtr transPtr diagPtr nPtr nrhsPtr aPtr ldaPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztrttf.f>+trttf ::+   Char {- ^ transr -} ->+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IO (Array ZeroInt (Complex Double), Int)+trttf transr uplo a = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   arf <- Call.newArray1 (n*(n+1)`div`2)+   evalContT $ do+      transrPtr <- Call.char transr+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      arfPtr <- Call.ioarray arf+      infoPtr <- Call.alloca+      liftIO $ FFI.trttf transrPtr uploPtr nPtr aPtr ldaPtr arfPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray arf+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztrttp.f>+trttp ::+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   IO (Array ZeroInt (Complex Double), Int)+trttp uplo a = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   ap <- Call.newArray1 (n*(n+1)`div`2)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      apPtr <- Call.ioarray ap+      infoPtr <- Call.alloca+      liftIO $ FFI.trttp uploPtr nPtr aPtr ldaPtr apPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ap+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztzrzf.f>+tzrzf ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt (Complex Double), Int)+tzrzf m a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 m+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.tzrzf mPtr nPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zunbdb.f>+unbdb ::+   Char {- ^ trans -} ->+   Char {- ^ signs -} ->+   Int {- ^ m -} ->+   Int {- ^ p -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ x11 -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ x12 -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ x21 -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ x22 -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt (Complex Double), Array ZeroInt (Complex Double), Array ZeroInt (Complex Double), Array ZeroInt (Complex Double), Int)+unbdb trans signs m p x11 x12 x21 x22 lwork = do+   let (x11Dim0,x11Dim1) = Call.sizes2 $ MutArray.shape x11+   let (x12Dim0,x12Dim1) = Call.sizes2 $ MutArray.shape x12+   let (x21Dim0,x21Dim1) = Call.sizes2 $ MutArray.shape x21+   let (x22Dim0,x22Dim1) = Call.sizes2 $ MutArray.shape x22+   let q = x11Dim0+   let ldx11 = x11Dim1+   let ldx12 = x12Dim1+   let ldx21 = x21Dim1+   let ldx22 = x22Dim1+   Call.assert "unbdb: m-q == x12Dim0" (m-q == x12Dim0)+   Call.assert "unbdb: q == x21Dim0" (q == x21Dim0)+   Call.assert "unbdb: m-q == x22Dim0" (m-q == x22Dim0)+   theta <- Call.newArray1 q+   phi <- Call.newArray1 (q-1)+   taup1 <- Call.newArray1 p+   taup2 <- Call.newArray1 (m-p)+   tauq1 <- Call.newArray1 q+   tauq2 <- Call.newArray1 (m-q)+   work <- Call.newArray1 lwork+   evalContT $ do+      transPtr <- Call.char trans+      signsPtr <- Call.char signs+      mPtr <- Call.cint m+      pPtr <- Call.cint p+      qPtr <- Call.cint q+      x11Ptr <- Call.ioarray x11+      ldx11Ptr <- Call.cint ldx11+      x12Ptr <- Call.ioarray x12+      ldx12Ptr <- Call.cint ldx12+      x21Ptr <- Call.ioarray x21+      ldx21Ptr <- Call.cint ldx21+      x22Ptr <- Call.ioarray x22+      ldx22Ptr <- Call.cint ldx22+      thetaPtr <- Call.ioarray theta+      phiPtr <- Call.ioarray phi+      taup1Ptr <- Call.ioarray taup1+      taup2Ptr <- Call.ioarray taup2+      tauq1Ptr <- Call.ioarray tauq1+      tauq2Ptr <- Call.ioarray tauq2+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.unbdb transPtr signsPtr mPtr pPtr qPtr x11Ptr ldx11Ptr x12Ptr ldx12Ptr x21Ptr ldx21Ptr x22Ptr ldx22Ptr thetaPtr phiPtr taup1Ptr taup2Ptr tauq1Ptr tauq2Ptr workPtr lworkPtr infoPtr+      liftIO $ pure (,,,,,,)+         <*> Call.freezeArray theta+         <*> Call.freezeArray phi+         <*> Call.freezeArray taup1+         <*> Call.freezeArray taup2+         <*> Call.freezeArray tauq1+         <*> Call.freezeArray tauq2+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zuncsd.f>+uncsd ::+   Char {- ^ jobu1 -} ->+   Char {- ^ jobu2 -} ->+   Char {- ^ jobv1t -} ->+   Char {- ^ jobv2t -} ->+   Char {- ^ trans -} ->+   Char {- ^ signs -} ->+   Int {- ^ m -} ->+   Int {- ^ p -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ x11 -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ x12 -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ x21 -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ x22 -} ->+   Int {- ^ r -} ->+   Int {- ^ ldu1 -} ->+   Int {- ^ ldu2 -} ->+   Int {- ^ ldv1t -} ->+   Int {- ^ ldv2t -} ->+   Int {- ^ lwork -} ->+   Int {- ^ rworkSize -} ->+   Int {- ^ lrwork -} ->+   IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Int)+uncsd jobu1 jobu2 jobv1t jobv2t trans signs m p x11 x12 x21 x22 r ldu1 ldu2 ldv1t ldv2t lwork rworkSize lrwork = do+   let (x11Dim0,x11Dim1) = Call.sizes2 $ MutArray.shape x11+   let (x12Dim0,x12Dim1) = Call.sizes2 $ MutArray.shape x12+   let (x21Dim0,x21Dim1) = Call.sizes2 $ MutArray.shape x21+   let (x22Dim0,x22Dim1) = Call.sizes2 $ MutArray.shape x22+   let q = x11Dim0+   let ldx11 = x11Dim1+   let ldx12 = x12Dim1+   let ldx21 = x21Dim1+   let ldx22 = x22Dim1+   Call.assert "uncsd: m-q == x12Dim0" (m-q == x12Dim0)+   Call.assert "uncsd: q == x21Dim0" (q == x21Dim0)+   Call.assert "uncsd: m-q == x22Dim0" (m-q == x22Dim0)+   theta <- Call.newArray1 r+   u1 <- Call.newArray2 p ldu1+   u2 <- Call.newArray2 (m-p) ldu2+   v1t <- Call.newArray2 q ldv1t+   v2t <- Call.newArray2 (m-q) ldv2t+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 rworkSize+   iwork <- Call.newArray1 (m-minimum[p,m-p,q,m-q])+   evalContT $ do+      jobu1Ptr <- Call.char jobu1+      jobu2Ptr <- Call.char jobu2+      jobv1tPtr <- Call.char jobv1t+      jobv2tPtr <- Call.char jobv2t+      transPtr <- Call.char trans+      signsPtr <- Call.char signs+      mPtr <- Call.cint m+      pPtr <- Call.cint p+      qPtr <- Call.cint q+      x11Ptr <- Call.ioarray x11+      ldx11Ptr <- Call.cint ldx11+      x12Ptr <- Call.ioarray x12+      ldx12Ptr <- Call.cint ldx12+      x21Ptr <- Call.ioarray x21+      ldx21Ptr <- Call.cint ldx21+      x22Ptr <- Call.ioarray x22+      ldx22Ptr <- Call.cint ldx22+      thetaPtr <- Call.ioarray theta+      u1Ptr <- Call.ioarray u1+      ldu1Ptr <- Call.cint ldu1+      u2Ptr <- Call.ioarray u2+      ldu2Ptr <- Call.cint ldu2+      v1tPtr <- Call.ioarray v1t+      ldv1tPtr <- Call.cint ldv1t+      v2tPtr <- Call.ioarray v2t+      ldv2tPtr <- Call.cint ldv2t+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      lrworkPtr <- Call.cint lrwork+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.uncsd jobu1Ptr jobu2Ptr jobv1tPtr jobv2tPtr transPtr signsPtr mPtr pPtr qPtr x11Ptr ldx11Ptr x12Ptr ldx12Ptr x21Ptr ldx21Ptr x22Ptr ldx22Ptr thetaPtr u1Ptr ldu1Ptr u2Ptr ldu2Ptr v1tPtr ldv1tPtr v2tPtr ldv2tPtr workPtr lworkPtr rworkPtr lrworkPtr iworkPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> Call.freezeArray theta+         <*> Call.freezeArray u1+         <*> Call.freezeArray u2+         <*> Call.freezeArray v1t+         <*> Call.freezeArray v2t+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zung2l.f>+ung2l ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array ZeroInt (Complex Double) {- ^ tau -} ->+   IO (Int)+ung2l m a tau = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let n = aDim0+   let lda = aDim1+   let k = tauDim0+   work <- Call.newArray1 n+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.ung2l mPtr nPtr kPtr aPtr ldaPtr tauPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zung2r.f>+ung2r ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array ZeroInt (Complex Double) {- ^ tau -} ->+   IO (Int)+ung2r m a tau = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let n = aDim0+   let lda = aDim1+   let k = tauDim0+   work <- Call.newArray1 n+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.ung2r mPtr nPtr kPtr aPtr ldaPtr tauPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zungbr.f>+ungbr ::+   Char {- ^ vect -} ->+   Int {- ^ m -} ->+   Int {- ^ k -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array ZeroInt (Complex Double) {- ^ tau -} ->+   Int {- ^ lwork -} ->+   IO (Int)+ungbr vect m k a tau lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let n = aDim0+   let lda = aDim1+   let _tauSize = tauDim0+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      vectPtr <- Call.char vect+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ungbr vectPtr mPtr nPtr kPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zunghr.f>+unghr ::+   Int {- ^ ilo -} ->+   Int {- ^ ihi -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array ZeroInt (Complex Double) {- ^ tau -} ->+   Int {- ^ lwork -} ->+   IO (Int)+unghr ilo ihi a tau lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let n = aDim0+   let lda = aDim1+   Call.assert "unghr: n-1 == tauDim0" (n-1 == tauDim0)+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      nPtr <- Call.cint n+      iloPtr <- Call.cint ilo+      ihiPtr <- Call.cint ihi+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.unghr nPtr iloPtr ihiPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zungl2.f>+ungl2 ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array ZeroInt (Complex Double) {- ^ tau -} ->+   IO (Int)+ungl2 m a tau = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let n = aDim0+   let lda = aDim1+   let k = tauDim0+   work <- Call.newArray1 m+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.ungl2 mPtr nPtr kPtr aPtr ldaPtr tauPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zunglq.f>+unglq ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array ZeroInt (Complex Double) {- ^ tau -} ->+   Int {- ^ lwork -} ->+   IO (Int)+unglq m a tau lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let n = aDim0+   let lda = aDim1+   let k = tauDim0+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.unglq mPtr nPtr kPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zungql.f>+ungql ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array ZeroInt (Complex Double) {- ^ tau -} ->+   Int {- ^ lwork -} ->+   IO (Int)+ungql m a tau lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let n = aDim0+   let lda = aDim1+   let k = tauDim0+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ungql mPtr nPtr kPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zungqr.f>+ungqr ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array ZeroInt (Complex Double) {- ^ tau -} ->+   Int {- ^ lwork -} ->+   IO (Int)+ungqr m a tau lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let n = aDim0+   let lda = aDim1+   let k = tauDim0+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ungqr mPtr nPtr kPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zungr2.f>+ungr2 ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array ZeroInt (Complex Double) {- ^ tau -} ->+   IO (Int)+ungr2 m a tau = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let n = aDim0+   let lda = aDim1+   let k = tauDim0+   work <- Call.newArray1 m+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.ungr2 mPtr nPtr kPtr aPtr ldaPtr tauPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zungrq.f>+ungrq ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array ZeroInt (Complex Double) {- ^ tau -} ->+   Int {- ^ lwork -} ->+   IO (Int)+ungrq m a tau lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let n = aDim0+   let lda = aDim1+   let k = tauDim0+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ungrq mPtr nPtr kPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zungtr.f>+ungtr ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array ZeroInt (Complex Double) {- ^ tau -} ->+   Int {- ^ lwork -} ->+   IO (Int)+ungtr uplo a tau lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let n = aDim0+   let lda = aDim1+   Call.assert "ungtr: n-1 == tauDim0" (n-1 == tauDim0)+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ungtr uploPtr nPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zunm2l.f>+unm2l ::+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array ZeroInt (Complex Double) {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ c -} ->+   Int {- ^ workSize -} ->+   IO (Int)+unm2l side trans m a tau c workSize = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let k = aDim0+   let lda = aDim1+   let n = cDim0+   let ldc = cDim1+   Call.assert "unm2l: k == tauDim0" (k == tauDim0)+   work <- Call.newArray1 workSize+   evalContT $ do+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.unm2l sidePtr transPtr mPtr nPtr kPtr aPtr ldaPtr tauPtr cPtr ldcPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zunm2r.f>+unm2r ::+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array ZeroInt (Complex Double) {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ c -} ->+   Int {- ^ workSize -} ->+   IO (Int)+unm2r side trans m a tau c workSize = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let k = aDim0+   let lda = aDim1+   let n = cDim0+   let ldc = cDim1+   Call.assert "unm2r: k == tauDim0" (k == tauDim0)+   work <- Call.newArray1 workSize+   evalContT $ do+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.unm2r sidePtr transPtr mPtr nPtr kPtr aPtr ldaPtr tauPtr cPtr ldcPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zunmbr.f>+unmbr ::+   Char {- ^ vect -} ->+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Int {- ^ k -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array ZeroInt (Complex Double) {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ c -} ->+   Int {- ^ lwork -} ->+   IO (Int)+unmbr vect side trans m k a tau c lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _aSize = aDim0+   let lda = aDim1+   let n = cDim0+   let ldc = cDim1+   Call.ignore "unmbr: minimum[nq,k] == tauDim0" tauDim0+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      vectPtr <- Call.char vect+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.unmbr vectPtr sidePtr transPtr mPtr nPtr kPtr aPtr ldaPtr tauPtr cPtr ldcPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zunmhr.f>+unmhr ::+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Int {- ^ ilo -} ->+   Int {- ^ ihi -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array ZeroInt (Complex Double) {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ c -} ->+   Int {- ^ lwork -} ->+   IO (Int)+unmhr side trans m ilo ihi a tau c lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _aSize = aDim0+   let lda = aDim1+   let _tauSize = tauDim0+   let n = cDim0+   let ldc = cDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      iloPtr <- Call.cint ilo+      ihiPtr <- Call.cint ihi+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.unmhr sidePtr transPtr mPtr nPtr iloPtr ihiPtr aPtr ldaPtr tauPtr cPtr ldcPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zunml2.f>+unml2 ::+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array ZeroInt (Complex Double) {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ c -} ->+   Int {- ^ workSize -} ->+   IO (Int)+unml2 side trans m a tau c workSize = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _aSize = aDim0+   let lda = aDim1+   let k = tauDim0+   let n = cDim0+   let ldc = cDim1+   work <- Call.newArray1 workSize+   evalContT $ do+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.unml2 sidePtr transPtr mPtr nPtr kPtr aPtr ldaPtr tauPtr cPtr ldcPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zunmlq.f>+unmlq ::+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array ZeroInt (Complex Double) {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ c -} ->+   Int {- ^ lwork -} ->+   IO (Int)+unmlq side trans m a tau c lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _aSize = aDim0+   let lda = aDim1+   let k = tauDim0+   let n = cDim0+   let ldc = cDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.unmlq sidePtr transPtr mPtr nPtr kPtr aPtr ldaPtr tauPtr cPtr ldcPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zunmql.f>+unmql ::+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array ZeroInt (Complex Double) {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ c -} ->+   Int {- ^ lwork -} ->+   IO (Int)+unmql side trans m a tau c lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let k = aDim0+   let lda = aDim1+   let n = cDim0+   let ldc = cDim1+   Call.assert "unmql: k == tauDim0" (k == tauDim0)+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.unmql sidePtr transPtr mPtr nPtr kPtr aPtr ldaPtr tauPtr cPtr ldcPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zunmqr.f>+unmqr ::+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array ZeroInt (Complex Double) {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ c -} ->+   Int {- ^ lwork -} ->+   IO (Int)+unmqr side trans m a tau c lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let k = aDim0+   let lda = aDim1+   let n = cDim0+   let ldc = cDim1+   Call.assert "unmqr: k == tauDim0" (k == tauDim0)+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.unmqr sidePtr transPtr mPtr nPtr kPtr aPtr ldaPtr tauPtr cPtr ldcPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zunmr2.f>+unmr2 ::+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array ZeroInt (Complex Double) {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ c -} ->+   Int {- ^ workSize -} ->+   IO (Int)+unmr2 side trans m a tau c workSize = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _aSize = aDim0+   let lda = aDim1+   let k = tauDim0+   let n = cDim0+   let ldc = cDim1+   work <- Call.newArray1 workSize+   evalContT $ do+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.unmr2 sidePtr transPtr mPtr nPtr kPtr aPtr ldaPtr tauPtr cPtr ldcPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zunmr3.f>+unmr3 ::+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Int {- ^ l -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array ZeroInt (Complex Double) {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ c -} ->+   Int {- ^ workSize -} ->+   IO (Int)+unmr3 side trans m l a tau c workSize = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _aSize = aDim0+   let lda = aDim1+   let k = tauDim0+   let n = cDim0+   let ldc = cDim1+   work <- Call.newArray1 workSize+   evalContT $ do+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      lPtr <- Call.cint l+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.unmr3 sidePtr transPtr mPtr nPtr kPtr lPtr aPtr ldaPtr tauPtr cPtr ldcPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zunmrq.f>+unmrq ::+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array ZeroInt (Complex Double) {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ c -} ->+   Int {- ^ lwork -} ->+   IO (Int)+unmrq side trans m a tau c lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _aSize = aDim0+   let lda = aDim1+   let k = tauDim0+   let n = cDim0+   let ldc = cDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.unmrq sidePtr transPtr mPtr nPtr kPtr aPtr ldaPtr tauPtr cPtr ldcPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zunmrz.f>+unmrz ::+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Int {- ^ l -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array ZeroInt (Complex Double) {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ c -} ->+   Int {- ^ lwork -} ->+   IO (Int)+unmrz side trans m l a tau c lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _aSize = aDim0+   let lda = aDim1+   let k = tauDim0+   let n = cDim0+   let ldc = cDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      lPtr <- Call.cint l+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.unmrz sidePtr transPtr mPtr nPtr kPtr lPtr aPtr ldaPtr tauPtr cPtr ldcPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zunmtr.f>+unmtr ::+   Char {- ^ side -} ->+   Char {- ^ uplo -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) (Complex Double) {- ^ a -} ->+   Array ZeroInt (Complex Double) {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ c -} ->+   Int {- ^ lwork -} ->+   IO (Int)+unmtr side uplo trans m a tau c lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _aSize = aDim0+   let lda = aDim1+   let _tauSize = tauDim0+   let n = cDim0+   let ldc = cDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      sidePtr <- Call.char side+      uploPtr <- Call.char uplo+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.unmtr sidePtr uploPtr transPtr mPtr nPtr aPtr ldaPtr tauPtr cPtr ldcPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zupgtr.f>+upgtr ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Array ZeroInt (Complex Double) {- ^ ap -} ->+   Array ZeroInt (Complex Double) {- ^ tau -} ->+   Int {- ^ ldq -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Double), Int)+upgtr uplo n ap tau ldq = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let tauDim0 = Call.sizes1 $ Array.shape tau+   Call.assert "upgtr: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   Call.assert "upgtr: n-1 == tauDim0" (n-1 == tauDim0)+   q <- Call.newArray2 n ldq+   work <- Call.newArray1 (n-1)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.array ap+      tauPtr <- Call.array tau+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.upgtr uploPtr nPtr apPtr tauPtr qPtr ldqPtr workPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray q+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zupmtr.f>+upmtr ::+   Char {- ^ side -} ->+   Char {- ^ uplo -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Array ZeroInt (Complex Double) {- ^ ap -} ->+   Array ZeroInt (Complex Double) {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Double) {- ^ c -} ->+   Int {- ^ workSize -} ->+   IO (Int)+upmtr side uplo trans m ap tau c workSize = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _apSize = apDim0+   let _tauSize = tauDim0+   let n = cDim0+   let ldc = cDim1+   work <- Call.newArray1 workSize+   evalContT $ do+      sidePtr <- Call.char side+      uploPtr <- Call.char uplo+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      apPtr <- Call.array ap+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.upmtr sidePtr uploPtr transPtr mPtr nPtr apPtr tauPtr cPtr ldcPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)
+ src/Numeric/LAPACK/ComfortArray/ComplexFloat.hs view
@@ -0,0 +1,11939 @@+-- Do not edit! Automatically generated by create-lapack-ffi.+module Numeric.LAPACK.ComfortArray.ComplexFloat where++import qualified Numeric.LAPACK.FFI.ComplexFloat as FFI+import qualified Numeric.Netlib.ComfortArray.Utility as Call+import Numeric.Netlib.ComfortArray.Utility (ZeroInt, (^!))++import qualified Data.Array.Comfort.Storable.Mutable as MutArray+import qualified Data.Array.Comfort.Storable as Array+import Data.Array.Comfort.Storable.Mutable (IOArray)+import Data.Array.Comfort.Storable (Array)++import Data.Complex (Complex)++import Foreign.Storable.Complex ()+import Foreign.Storable (peek)+import Foreign.Ptr (Ptr, FunPtr)+import Foreign.C.String (castCCharToChar)+import Foreign.C.Types (CInt)++import Control.Monad.Trans.Cont (evalContT)+import Control.Monad.IO.Class (liftIO)+import Control.Applicative (pure, (<*>))+++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cbbcsd.f>+bbcsd ::+   Char {- ^ jobu1 -} ->+   Char {- ^ jobu2 -} ->+   Char {- ^ jobv1t -} ->+   Char {- ^ jobv2t -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   IOArray ZeroInt Float {- ^ theta -} ->+   IOArray ZeroInt Float {- ^ phi -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ u1 -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ u2 -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ v1t -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ v2t -} ->+   Int {- ^ lrwork -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)+bbcsd jobu1 jobu2 jobv1t jobv2t trans m theta phi u1 u2 v1t v2t lrwork = do+   let thetaDim0 = Call.sizes1 $ MutArray.shape theta+   let phiDim0 = Call.sizes1 $ MutArray.shape phi+   let (u1Dim0,u1Dim1) = Call.sizes2 $ MutArray.shape u1+   let (u2Dim0,u2Dim1) = Call.sizes2 $ MutArray.shape u2+   let (v1tDim0,v1tDim1) = Call.sizes2 $ MutArray.shape v1t+   let (v2tDim0,v2tDim1) = Call.sizes2 $ MutArray.shape v2t+   let q = thetaDim0+   let p = u1Dim0+   let ldu1 = u1Dim1+   let ldu2 = u2Dim1+   let ldv1t = v1tDim1+   let ldv2t = v2tDim1+   Call.assert "bbcsd: q-1 == phiDim0" (q-1 == phiDim0)+   Call.assert "bbcsd: m-p == u2Dim0" (m-p == u2Dim0)+   Call.assert "bbcsd: q == v1tDim0" (q == v1tDim0)+   Call.assert "bbcsd: m-q == v2tDim0" (m-q == v2tDim0)+   b11d <- Call.newArray1 q+   b11e <- Call.newArray1 (q-1)+   b12d <- Call.newArray1 q+   b12e <- Call.newArray1 (q-1)+   b21d <- Call.newArray1 q+   b21e <- Call.newArray1 (q-1)+   b22d <- Call.newArray1 q+   b22e <- Call.newArray1 (q-1)+   rwork <- Call.newArray1 (maximum[1,lrwork])+   evalContT $ do+      jobu1Ptr <- Call.char jobu1+      jobu2Ptr <- Call.char jobu2+      jobv1tPtr <- Call.char jobv1t+      jobv2tPtr <- Call.char jobv2t+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      pPtr <- Call.cint p+      qPtr <- Call.cint q+      thetaPtr <- Call.ioarray theta+      phiPtr <- Call.ioarray phi+      u1Ptr <- Call.ioarray u1+      ldu1Ptr <- Call.cint ldu1+      u2Ptr <- Call.ioarray u2+      ldu2Ptr <- Call.cint ldu2+      v1tPtr <- Call.ioarray v1t+      ldv1tPtr <- Call.cint ldv1t+      v2tPtr <- Call.ioarray v2t+      ldv2tPtr <- Call.cint ldv2t+      b11dPtr <- Call.ioarray b11d+      b11ePtr <- Call.ioarray b11e+      b12dPtr <- Call.ioarray b12d+      b12ePtr <- Call.ioarray b12e+      b21dPtr <- Call.ioarray b21d+      b21ePtr <- Call.ioarray b21e+      b22dPtr <- Call.ioarray b22d+      b22ePtr <- Call.ioarray b22e+      rworkPtr <- Call.ioarray rwork+      lrworkPtr <- Call.cint lrwork+      infoPtr <- Call.alloca+      liftIO $ FFI.bbcsd jobu1Ptr jobu2Ptr jobv1tPtr jobv2tPtr transPtr mPtr pPtr qPtr thetaPtr phiPtr u1Ptr ldu1Ptr u2Ptr ldu2Ptr v1tPtr ldv1tPtr v2tPtr ldv2tPtr b11dPtr b11ePtr b12dPtr b12ePtr b21dPtr b21ePtr b22dPtr b22ePtr rworkPtr lrworkPtr infoPtr+      liftIO $ pure (,,,,,,,,)+         <*> Call.freezeArray b11d+         <*> Call.freezeArray b11e+         <*> Call.freezeArray b12d+         <*> Call.freezeArray b12e+         <*> Call.freezeArray b21d+         <*> Call.freezeArray b21e+         <*> Call.freezeArray b22d+         <*> Call.freezeArray b22e+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cbdsqr.f>+bdsqr ::+   Char {- ^ uplo -} ->+   Int {- ^ nru -} ->+   IOArray ZeroInt Float {- ^ d -} ->+   IOArray ZeroInt Float {- ^ e -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ vt -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ u -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ c -} ->+   IO (Int)+bdsqr uplo nru d e vt u c = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let (vtDim0,vtDim1) = Call.sizes2 $ MutArray.shape vt+   let (uDim0,uDim1) = Call.sizes2 $ MutArray.shape u+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let n = dDim0+   let ncvt = vtDim0+   let ldvt = vtDim1+   let ldu = uDim1+   let ncc = cDim0+   let ldc = cDim1+   Call.assert "bdsqr: n-1 == eDim0" (n-1 == eDim0)+   Call.assert "bdsqr: n == uDim0" (n == uDim0)+   rwork <- Call.newArray1 (4*n)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      ncvtPtr <- Call.cint ncvt+      nruPtr <- Call.cint nru+      nccPtr <- Call.cint ncc+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      vtPtr <- Call.ioarray vt+      ldvtPtr <- Call.cint ldvt+      uPtr <- Call.ioarray u+      lduPtr <- Call.cint ldu+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.bdsqr uploPtr nPtr ncvtPtr nruPtr nccPtr dPtr ePtr vtPtr ldvtPtr uPtr lduPtr cPtr ldcPtr rworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgbbrd.f>+gbbrd ::+   Char {- ^ vect -} ->+   Int {- ^ m -} ->+   Int {- ^ kl -} ->+   Int {- ^ ku -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->+   Int {- ^ ldq -} ->+   Int {- ^ ldpt -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ c -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Array (ZeroInt,ZeroInt) (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Int)+gbbrd vect m kl ku ab ldq ldpt c = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let n = abDim0+   let ldab = abDim1+   let ncc = cDim0+   let ldc = cDim1+   d <- Call.newArray1 (minimum[m,n])+   e <- Call.newArray1 (minimum[m,n]-1)+   q <- Call.newArray2 m ldq+   pt <- Call.newArray2 n ldpt+   work <- Call.newArray1 (maximum[m,n])+   rwork <- Call.newArray1 (maximum[m,n])+   evalContT $ do+      vectPtr <- Call.char vect+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      nccPtr <- Call.cint ncc+      klPtr <- Call.cint kl+      kuPtr <- Call.cint ku+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      ptPtr <- Call.ioarray pt+      ldptPtr <- Call.cint ldpt+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gbbrd vectPtr mPtr nPtr nccPtr klPtr kuPtr abPtr ldabPtr dPtr ePtr qPtr ldqPtr ptPtr ldptPtr cPtr ldcPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,,,)+         <*> Call.freezeArray d+         <*> Call.freezeArray e+         <*> Call.freezeArray q+         <*> Call.freezeArray pt+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgbcon.f>+gbcon ::+   Char {- ^ norm -} ->+   Int {- ^ kl -} ->+   Int {- ^ ku -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Float {- ^ anorm -} ->+   IO (Float, Int)+gbcon norm kl ku ab ipiv anorm = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = abDim0+   let ldab = abDim1+   Call.assert "gbcon: n == ipivDim0" (n == ipivDim0)+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      normPtr <- Call.char norm+      nPtr <- Call.cint n+      klPtr <- Call.cint kl+      kuPtr <- Call.cint ku+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      ipivPtr <- Call.array ipiv+      anormPtr <- Call.float anorm+      rcondPtr <- Call.alloca+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gbcon normPtr nPtr klPtr kuPtr abPtr ldabPtr ipivPtr anormPtr rcondPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,)+         <*> peek rcondPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgbequ.f>+gbequ ::+   Int {- ^ m -} ->+   Int {- ^ kl -} ->+   Int {- ^ ku -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float, Int)+gbequ m kl ku ab = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let n = abDim0+   let ldab = abDim1+   r <- Call.newArray1 m+   c <- Call.newArray1 n+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      klPtr <- Call.cint kl+      kuPtr <- Call.cint ku+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      rPtr <- Call.ioarray r+      cPtr <- Call.ioarray c+      rowcndPtr <- Call.alloca+      colcndPtr <- Call.alloca+      amaxPtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.gbequ mPtr nPtr klPtr kuPtr abPtr ldabPtr rPtr cPtr rowcndPtr colcndPtr amaxPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> Call.freezeArray r+         <*> Call.freezeArray c+         <*> peek rowcndPtr+         <*> peek colcndPtr+         <*> peek amaxPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgbequb.f>+gbequb ::+   Int {- ^ m -} ->+   Int {- ^ kl -} ->+   Int {- ^ ku -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float, Int)+gbequb m kl ku ab = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let n = abDim0+   let ldab = abDim1+   r <- Call.newArray1 m+   c <- Call.newArray1 n+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      klPtr <- Call.cint kl+      kuPtr <- Call.cint ku+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      rPtr <- Call.ioarray r+      cPtr <- Call.ioarray c+      rowcndPtr <- Call.alloca+      colcndPtr <- Call.alloca+      amaxPtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.gbequb mPtr nPtr klPtr kuPtr abPtr ldabPtr rPtr cPtr rowcndPtr colcndPtr amaxPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> Call.freezeArray r+         <*> Call.freezeArray c+         <*> peek rowcndPtr+         <*> peek colcndPtr+         <*> peek amaxPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgbrfs.f>+gbrfs ::+   Char {- ^ trans -} ->+   Int {- ^ kl -} ->+   Int {- ^ ku -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ afb -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ x -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Int)+gbrfs trans kl ku ab afb ipiv b x = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let (afbDim0,afbDim1) = Call.sizes2 $ Array.shape afb+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (xDim0,xDim1) = Call.sizes2 $ MutArray.shape x+   let n = abDim0+   let ldab = abDim1+   let ldafb = afbDim1+   let nrhs = bDim0+   let ldb = bDim1+   let ldx = xDim1+   Call.assert "gbrfs: n == afbDim0" (n == afbDim0)+   Call.assert "gbrfs: n == ipivDim0" (n == ipivDim0)+   Call.assert "gbrfs: nrhs == xDim0" (nrhs == xDim0)+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      transPtr <- Call.char trans+      nPtr <- Call.cint n+      klPtr <- Call.cint kl+      kuPtr <- Call.cint ku+      nrhsPtr <- Call.cint nrhs+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      afbPtr <- Call.array afb+      ldafbPtr <- Call.cint ldafb+      ipivPtr <- Call.array ipiv+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gbrfs transPtr nPtr klPtr kuPtr nrhsPtr abPtr ldabPtr afbPtr ldafbPtr ipivPtr bPtr ldbPtr xPtr ldxPtr ferrPtr berrPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgbsv.f>+gbsv ::+   Int {- ^ kl -} ->+   Int {- ^ ku -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   IO (Array ZeroInt CInt, Int)+gbsv kl ku ab b = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = abDim0+   let ldab = abDim1+   let nrhs = bDim0+   let ldb = bDim1+   ipiv <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      klPtr <- Call.cint kl+      kuPtr <- Call.cint ku+      nrhsPtr <- Call.cint nrhs+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      ipivPtr <- Call.ioarray ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.gbsv nPtr klPtr kuPtr nrhsPtr abPtr ldabPtr ipivPtr bPtr ldbPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgbsvx.f>+gbsvx ::+   Char {- ^ fact -} ->+   Char {- ^ trans -} ->+   Int {- ^ kl -} ->+   Int {- ^ ku -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ afb -} ->+   IOArray ZeroInt CInt {- ^ ipiv -} ->+   Char {- ^ equed -} ->+   IOArray ZeroInt Float {- ^ r -} ->+   IOArray ZeroInt Float {- ^ c -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   Int {- ^ ldx -} ->+   IO (Char, Array (ZeroInt,ZeroInt) (Complex Float), Float, Array ZeroInt Float, Array ZeroInt Float, Int)+gbsvx fact trans kl ku ab afb ipiv equed r c b ldx = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let (afbDim0,afbDim1) = Call.sizes2 $ MutArray.shape afb+   let ipivDim0 = Call.sizes1 $ MutArray.shape ipiv+   let rDim0 = Call.sizes1 $ MutArray.shape r+   let cDim0 = Call.sizes1 $ MutArray.shape c+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = abDim0+   let ldab = abDim1+   let ldafb = afbDim1+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "gbsvx: n == afbDim0" (n == afbDim0)+   Call.assert "gbsvx: n == ipivDim0" (n == ipivDim0)+   Call.assert "gbsvx: n == rDim0" (n == rDim0)+   Call.assert "gbsvx: n == cDim0" (n == cDim0)+   x <- Call.newArray2 nrhs ldx+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      factPtr <- Call.char fact+      transPtr <- Call.char trans+      nPtr <- Call.cint n+      klPtr <- Call.cint kl+      kuPtr <- Call.cint ku+      nrhsPtr <- Call.cint nrhs+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      afbPtr <- Call.ioarray afb+      ldafbPtr <- Call.cint ldafb+      ipivPtr <- Call.ioarray ipiv+      equedPtr <- Call.char equed+      rPtr <- Call.ioarray r+      cPtr <- Call.ioarray c+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      rcondPtr <- Call.alloca+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gbsvx factPtr transPtr nPtr klPtr kuPtr nrhsPtr abPtr ldabPtr afbPtr ldafbPtr ipivPtr equedPtr rPtr cPtr bPtr ldbPtr xPtr ldxPtr rcondPtr ferrPtr berrPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> fmap castCCharToChar (peek equedPtr)+         <*> Call.freezeArray x+         <*> peek rcondPtr+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgbtf2.f>+gbtf2 ::+   Int {- ^ m -} ->+   Int {- ^ kl -} ->+   Int {- ^ ku -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->+   IO (Array ZeroInt CInt, Int)+gbtf2 m kl ku ab = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let n = abDim0+   let ldab = abDim1+   ipiv <- Call.newArray1 (minimum[m,n])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      klPtr <- Call.cint kl+      kuPtr <- Call.cint ku+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      ipivPtr <- Call.ioarray ipiv+      infoPtr <- Call.alloca+      liftIO $ FFI.gbtf2 mPtr nPtr klPtr kuPtr abPtr ldabPtr ipivPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgbtrf.f>+gbtrf ::+   Int {- ^ m -} ->+   Int {- ^ kl -} ->+   Int {- ^ ku -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->+   IO (Array ZeroInt CInt, Int)+gbtrf m kl ku ab = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let n = abDim0+   let ldab = abDim1+   ipiv <- Call.newArray1 (minimum[m,n])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      klPtr <- Call.cint kl+      kuPtr <- Call.cint ku+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      ipivPtr <- Call.ioarray ipiv+      infoPtr <- Call.alloca+      liftIO $ FFI.gbtrf mPtr nPtr klPtr kuPtr abPtr ldabPtr ipivPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgbtrs.f>+gbtrs ::+   Char {- ^ trans -} ->+   Int {- ^ kl -} ->+   Int {- ^ ku -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   IO (Int)+gbtrs trans kl ku ab ipiv b = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = abDim0+   let ldab = abDim1+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "gbtrs: n == ipivDim0" (n == ipivDim0)+   evalContT $ do+      transPtr <- Call.char trans+      nPtr <- Call.cint n+      klPtr <- Call.cint kl+      kuPtr <- Call.cint ku+      nrhsPtr <- Call.cint nrhs+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      ipivPtr <- Call.array ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.gbtrs transPtr nPtr klPtr kuPtr nrhsPtr abPtr ldabPtr ipivPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgebak.f>+gebak ::+   Char {- ^ job -} ->+   Char {- ^ side -} ->+   Int {- ^ ilo -} ->+   Int {- ^ ihi -} ->+   Array ZeroInt Float {- ^ scale -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ v -} ->+   IO (Int)+gebak job side ilo ihi scale v = do+   let scaleDim0 = Call.sizes1 $ Array.shape scale+   let (vDim0,vDim1) = Call.sizes2 $ MutArray.shape v+   let n = scaleDim0+   let m = vDim0+   let ldv = vDim1+   evalContT $ do+      jobPtr <- Call.char job+      sidePtr <- Call.char side+      nPtr <- Call.cint n+      iloPtr <- Call.cint ilo+      ihiPtr <- Call.cint ihi+      scalePtr <- Call.array scale+      mPtr <- Call.cint m+      vPtr <- Call.ioarray v+      ldvPtr <- Call.cint ldv+      infoPtr <- Call.alloca+      liftIO $ FFI.gebak jobPtr sidePtr nPtr iloPtr ihiPtr scalePtr mPtr vPtr ldvPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgebal.f>+gebal ::+   Char {- ^ job -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IO (Int, Int, Array ZeroInt Float, Int)+gebal job a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   scale <- Call.newArray1 n+   evalContT $ do+      jobPtr <- Call.char job+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      iloPtr <- Call.alloca+      ihiPtr <- Call.alloca+      scalePtr <- Call.ioarray scale+      infoPtr <- Call.alloca+      liftIO $ FFI.gebal jobPtr nPtr aPtr ldaPtr iloPtr ihiPtr scalePtr infoPtr+      liftIO $ pure (,,,)+         <*> fmap fromIntegral (peek iloPtr)+         <*> fmap fromIntegral (peek ihiPtr)+         <*> Call.freezeArray scale+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgebd2.f>+gebd2 ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)+gebd2 m a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   d <- Call.newArray1 (minimum[m,n])+   e <- Call.newArray1 (minimum[m,n]-1)+   tauq <- Call.newArray1 (minimum[m,n])+   taup <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 (maximum[m,n])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      tauqPtr <- Call.ioarray tauq+      taupPtr <- Call.ioarray taup+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.gebd2 mPtr nPtr aPtr ldaPtr dPtr ePtr tauqPtr taupPtr workPtr infoPtr+      liftIO $ pure (,,,,)+         <*> Call.freezeArray d+         <*> Call.freezeArray e+         <*> Call.freezeArray tauq+         <*> Call.freezeArray taup+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgebrd.f>+gebrd ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)+gebrd m a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   d <- Call.newArray1 (minimum[m,n])+   e <- Call.newArray1 (minimum[m,n]-1)+   tauq <- Call.newArray1 (minimum[m,n])+   taup <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      tauqPtr <- Call.ioarray tauq+      taupPtr <- Call.ioarray taup+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gebrd mPtr nPtr aPtr ldaPtr dPtr ePtr tauqPtr taupPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,,,,)+         <*> Call.freezeArray d+         <*> Call.freezeArray e+         <*> Call.freezeArray tauq+         <*> Call.freezeArray taup+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgecon.f>+gecon ::+   Char {- ^ norm -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Float {- ^ anorm -} ->+   IO (Float, Int)+gecon norm a anorm = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 (2*n)+   evalContT $ do+      normPtr <- Call.char norm+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      anormPtr <- Call.float anorm+      rcondPtr <- Call.alloca+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gecon normPtr nPtr aPtr ldaPtr anormPtr rcondPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,)+         <*> peek rcondPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgeequ.f>+geequ ::+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float, Int)+geequ m a = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   r <- Call.newArray1 m+   c <- Call.newArray1 n+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      rPtr <- Call.ioarray r+      cPtr <- Call.ioarray c+      rowcndPtr <- Call.alloca+      colcndPtr <- Call.alloca+      amaxPtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.geequ mPtr nPtr aPtr ldaPtr rPtr cPtr rowcndPtr colcndPtr amaxPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> Call.freezeArray r+         <*> Call.freezeArray c+         <*> peek rowcndPtr+         <*> peek colcndPtr+         <*> peek amaxPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgeequb.f>+geequb ::+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float, Int)+geequb m a = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   r <- Call.newArray1 m+   c <- Call.newArray1 n+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      rPtr <- Call.ioarray r+      cPtr <- Call.ioarray c+      rowcndPtr <- Call.alloca+      colcndPtr <- Call.alloca+      amaxPtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.geequb mPtr nPtr aPtr ldaPtr rPtr cPtr rowcndPtr colcndPtr amaxPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> Call.freezeArray r+         <*> Call.freezeArray c+         <*> peek rowcndPtr+         <*> peek colcndPtr+         <*> peek amaxPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgees.f>+gees ::+   Char {- ^ jobvs -} ->+   Char {- ^ sort -} ->+   FunPtr (Ptr (Complex Float) -> IO Bool) {- ^ select -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Int {- ^ ldvs -} ->+   Int {- ^ lwork -} ->+   IO (Int, Array ZeroInt (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Int)+gees jobvs sort select a ldvs lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   w <- Call.newArray1 n+   vs <- Call.newArray2 n ldvs+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 n+   bwork <- Call.newArray1 n+   evalContT $ do+      jobvsPtr <- Call.char jobvs+      sortPtr <- Call.char sort+      selectPtr <- pure select+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      sdimPtr <- Call.alloca+      wPtr <- Call.ioarray w+      vsPtr <- Call.ioarray vs+      ldvsPtr <- Call.cint ldvs+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      bworkPtr <- Call.ioarray bwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gees jobvsPtr sortPtr selectPtr nPtr aPtr ldaPtr sdimPtr wPtr vsPtr ldvsPtr workPtr lworkPtr rworkPtr bworkPtr infoPtr+      liftIO $ pure (,,,)+         <*> fmap fromIntegral (peek sdimPtr)+         <*> Call.freezeArray w+         <*> Call.freezeArray vs+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgeesx.f>+geesx ::+   Char {- ^ jobvs -} ->+   Char {- ^ sort -} ->+   FunPtr (Ptr (Complex Float) -> IO Bool) {- ^ select -} ->+   Char {- ^ sense -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Int {- ^ ldvs -} ->+   Int {- ^ lwork -} ->+   IO (Int, Array ZeroInt (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Float, Float, Int)+geesx jobvs sort select sense a ldvs lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   w <- Call.newArray1 n+   vs <- Call.newArray2 n ldvs+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 n+   bwork <- Call.newArray1 n+   evalContT $ do+      jobvsPtr <- Call.char jobvs+      sortPtr <- Call.char sort+      selectPtr <- pure select+      sensePtr <- Call.char sense+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      sdimPtr <- Call.alloca+      wPtr <- Call.ioarray w+      vsPtr <- Call.ioarray vs+      ldvsPtr <- Call.cint ldvs+      rcondePtr <- Call.alloca+      rcondvPtr <- Call.alloca+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      bworkPtr <- Call.ioarray bwork+      infoPtr <- Call.alloca+      liftIO $ FFI.geesx jobvsPtr sortPtr selectPtr sensePtr nPtr aPtr ldaPtr sdimPtr wPtr vsPtr ldvsPtr rcondePtr rcondvPtr workPtr lworkPtr rworkPtr bworkPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> fmap fromIntegral (peek sdimPtr)+         <*> Call.freezeArray w+         <*> Call.freezeArray vs+         <*> peek rcondePtr+         <*> peek rcondvPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgeev.f>+geev ::+   Char {- ^ jobvl -} ->+   Char {- ^ jobvr -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Int {- ^ ldvl -} ->+   Int {- ^ ldvr -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Int)+geev jobvl jobvr a ldvl ldvr lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   w <- Call.newArray1 n+   vl <- Call.newArray2 n ldvl+   vr <- Call.newArray2 n ldvr+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 (2*n)+   evalContT $ do+      jobvlPtr <- Call.char jobvl+      jobvrPtr <- Call.char jobvr+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      wPtr <- Call.ioarray w+      vlPtr <- Call.ioarray vl+      ldvlPtr <- Call.cint ldvl+      vrPtr <- Call.ioarray vr+      ldvrPtr <- Call.cint ldvr+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.geev jobvlPtr jobvrPtr nPtr aPtr ldaPtr wPtr vlPtr ldvlPtr vrPtr ldvrPtr workPtr lworkPtr rworkPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray w+         <*> Call.freezeArray vl+         <*> Call.freezeArray vr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgeevx.f>+geevx ::+   Char {- ^ balanc -} ->+   Char {- ^ jobvl -} ->+   Char {- ^ jobvr -} ->+   Char {- ^ sense -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Int {- ^ ldvl -} ->+   Int {- ^ ldvr -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float, Array ZeroInt Float, Int)+geevx balanc jobvl jobvr sense a ldvl ldvr lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   w <- Call.newArray1 n+   vl <- Call.newArray2 n ldvl+   vr <- Call.newArray2 n ldvr+   scale <- Call.newArray1 n+   rconde <- Call.newArray1 n+   rcondv <- Call.newArray1 n+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 (2*n)+   evalContT $ do+      balancPtr <- Call.char balanc+      jobvlPtr <- Call.char jobvl+      jobvrPtr <- Call.char jobvr+      sensePtr <- Call.char sense+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      wPtr <- Call.ioarray w+      vlPtr <- Call.ioarray vl+      ldvlPtr <- Call.cint ldvl+      vrPtr <- Call.ioarray vr+      ldvrPtr <- Call.cint ldvr+      iloPtr <- Call.alloca+      ihiPtr <- Call.alloca+      scalePtr <- Call.ioarray scale+      abnrmPtr <- Call.alloca+      rcondePtr <- Call.ioarray rconde+      rcondvPtr <- Call.ioarray rcondv+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.geevx balancPtr jobvlPtr jobvrPtr sensePtr nPtr aPtr ldaPtr wPtr vlPtr ldvlPtr vrPtr ldvrPtr iloPtr ihiPtr scalePtr abnrmPtr rcondePtr rcondvPtr workPtr lworkPtr rworkPtr infoPtr+      liftIO $ pure (,,,,,,,,,)+         <*> Call.freezeArray w+         <*> Call.freezeArray vl+         <*> Call.freezeArray vr+         <*> fmap fromIntegral (peek iloPtr)+         <*> fmap fromIntegral (peek ihiPtr)+         <*> Call.freezeArray scale+         <*> peek abnrmPtr+         <*> Call.freezeArray rconde+         <*> Call.freezeArray rcondv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgehd2.f>+gehd2 ::+   Int {- ^ ilo -} ->+   Int {- ^ ihi -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IO (Array ZeroInt (Complex Float), Int)+gehd2 ilo ihi a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 (n-1)+   work <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      iloPtr <- Call.cint ilo+      ihiPtr <- Call.cint ihi+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.gehd2 nPtr iloPtr ihiPtr aPtr ldaPtr tauPtr workPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgehrd.f>+gehrd ::+   Int {- ^ ilo -} ->+   Int {- ^ ihi -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt (Complex Float), Int)+gehrd ilo ihi a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 (n-1)+   work <- Call.newArray1 lwork+   evalContT $ do+      nPtr <- Call.cint n+      iloPtr <- Call.cint ilo+      ihiPtr <- Call.cint ihi+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gehrd nPtr iloPtr ihiPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgelq2.f>+gelq2 ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IO (Array ZeroInt (Complex Float), Int)+gelq2 m a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 m+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.gelq2 mPtr nPtr aPtr ldaPtr tauPtr workPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgelqf.f>+gelqf ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt (Complex Float), Int)+gelqf m a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gelqf mPtr nPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgels.f>+gels ::+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   Int {- ^ lwork -} ->+   IO (Int)+gels trans m a b lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gels transPtr mPtr nPtr nrhsPtr aPtr ldaPtr bPtr ldbPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgelsd.f>+gelsd ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   Float {- ^ rcond -} ->+   Int {- ^ lwork -} ->+   Int {- ^ lrwork -} ->+   Int {- ^ liwork -} ->+   IO (Array ZeroInt Float, Int, Int)+gelsd m a b rcond lwork lrwork liwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   s <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 (maximum[1,lrwork])+   iwork <- Call.newArray1 (maximum[1,liwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      sPtr <- Call.ioarray s+      rcondPtr <- Call.float rcond+      rankPtr <- Call.alloca+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gelsd mPtr nPtr nrhsPtr aPtr ldaPtr bPtr ldbPtr sPtr rcondPtr rankPtr workPtr lworkPtr rworkPtr iworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray s+         <*> fmap fromIntegral (peek rankPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgelss.f>+gelss ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   Float {- ^ rcond -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Float, Int, Int)+gelss m a b rcond lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   s <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 (5*minimum[m,n])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      sPtr <- Call.ioarray s+      rcondPtr <- Call.float rcond+      rankPtr <- Call.alloca+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gelss mPtr nPtr nrhsPtr aPtr ldaPtr bPtr ldbPtr sPtr rcondPtr rankPtr workPtr lworkPtr rworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray s+         <*> fmap fromIntegral (peek rankPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgelsy.f>+gelsy ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   IOArray ZeroInt CInt {- ^ jpvt -} ->+   Float {- ^ rcond -} ->+   Int {- ^ lwork -} ->+   IO (Int, Int)+gelsy m a b jpvt rcond lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let jpvtDim0 = Call.sizes1 $ MutArray.shape jpvt+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "gelsy: n == jpvtDim0" (n == jpvtDim0)+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 (2*n)+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      jpvtPtr <- Call.ioarray jpvt+      rcondPtr <- Call.float rcond+      rankPtr <- Call.alloca+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gelsy mPtr nPtr nrhsPtr aPtr ldaPtr bPtr ldbPtr jpvtPtr rcondPtr rankPtr workPtr lworkPtr rworkPtr infoPtr+      liftIO $ pure (,)+         <*> fmap fromIntegral (peek rankPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgeql2.f>+geql2 ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IO (Array ZeroInt (Complex Float), Int)+geql2 m a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 n+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.geql2 mPtr nPtr aPtr ldaPtr tauPtr workPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgeqlf.f>+geqlf ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt (Complex Float), Int)+geqlf m a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.geqlf mPtr nPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgeqp3.f>+geqp3 ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IOArray ZeroInt CInt {- ^ jpvt -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt (Complex Float), Int)+geqp3 m a jpvt lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let jpvtDim0 = Call.sizes1 $ MutArray.shape jpvt+   let n = aDim0+   let lda = aDim1+   Call.assert "geqp3: n == jpvtDim0" (n == jpvtDim0)+   tau <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 (2*n)+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      jpvtPtr <- Call.ioarray jpvt+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.geqp3 mPtr nPtr aPtr ldaPtr jpvtPtr tauPtr workPtr lworkPtr rworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgeqr2.f>+geqr2 ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IO (Array ZeroInt (Complex Float), Int)+geqr2 m a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 n+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.geqr2 mPtr nPtr aPtr ldaPtr tauPtr workPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgeqr2p.f>+geqr2p ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IO (Array ZeroInt (Complex Float), Int)+geqr2p m a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 n+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.geqr2p mPtr nPtr aPtr ldaPtr tauPtr workPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgeqrf.f>+geqrf ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt (Complex Float), Int)+geqrf m a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.geqrf mPtr nPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgeqrfp.f>+geqrfp ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt (Complex Float), Int)+geqrfp m a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.geqrfp mPtr nPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgerfs.f>+gerfs ::+   Char {- ^ trans -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ af -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ x -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Int)+gerfs trans a af ipiv b x = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (afDim0,afDim1) = Call.sizes2 $ Array.shape af+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (xDim0,xDim1) = Call.sizes2 $ MutArray.shape x+   let n = aDim0+   let lda = aDim1+   let ldaf = afDim1+   let nrhs = bDim0+   let ldb = bDim1+   let ldx = xDim1+   Call.assert "gerfs: n == afDim0" (n == afDim0)+   Call.assert "gerfs: n == ipivDim0" (n == ipivDim0)+   Call.assert "gerfs: nrhs == xDim0" (nrhs == xDim0)+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      transPtr <- Call.char trans+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      afPtr <- Call.array af+      ldafPtr <- Call.cint ldaf+      ipivPtr <- Call.array ipiv+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gerfs transPtr nPtr nrhsPtr aPtr ldaPtr afPtr ldafPtr ipivPtr bPtr ldbPtr xPtr ldxPtr ferrPtr berrPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgerq2.f>+gerq2 ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IO (Array ZeroInt (Complex Float), Int)+gerq2 m a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 m+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.gerq2 mPtr nPtr aPtr ldaPtr tauPtr workPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgerqf.f>+gerqf ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt (Complex Float), Int)+gerqf m a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gerqf mPtr nPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgesc2.f>+gesc2 ::+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IOArray ZeroInt (Complex Float) {- ^ rhs -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Array ZeroInt CInt {- ^ jpiv -} ->+   IO (Float)+gesc2 a rhs ipiv jpiv = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let rhsDim0 = Call.sizes1 $ MutArray.shape rhs+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let jpivDim0 = Call.sizes1 $ Array.shape jpiv+   let n = aDim0+   let lda = aDim1+   let _rhsSize = rhsDim0+   Call.assert "gesc2: n == ipivDim0" (n == ipivDim0)+   Call.assert "gesc2: n == jpivDim0" (n == jpivDim0)+   evalContT $ do+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      rhsPtr <- Call.ioarray rhs+      ipivPtr <- Call.array ipiv+      jpivPtr <- Call.array jpiv+      scalePtr <- Call.alloca+      liftIO $ FFI.gesc2 nPtr aPtr ldaPtr rhsPtr ipivPtr jpivPtr scalePtr+      liftIO $ peek scalePtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgesdd.f>+gesdd ::+   Char {- ^ jobz -} ->+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Int {- ^ ucol -} ->+   Int {- ^ ldu -} ->+   Int {- ^ ldvt -} ->+   Int {- ^ lwork -} ->+   Int {- ^ lrwork -} ->+   IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Int)+gesdd jobz m a ucol ldu ldvt lwork lrwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   s <- Call.newArray1 (minimum[m,n])+   u <- Call.newArray2 ucol ldu+   vt <- Call.newArray2 n ldvt+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 (maximum[1,lrwork])+   iwork <- Call.newArray1 (8*minimum[m,n])+   evalContT $ do+      jobzPtr <- Call.char jobz+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      sPtr <- Call.ioarray s+      uPtr <- Call.ioarray u+      lduPtr <- Call.cint ldu+      vtPtr <- Call.ioarray vt+      ldvtPtr <- Call.cint ldvt+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gesdd jobzPtr mPtr nPtr aPtr ldaPtr sPtr uPtr lduPtr vtPtr ldvtPtr workPtr lworkPtr rworkPtr iworkPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray s+         <*> Call.freezeArray u+         <*> Call.freezeArray vt+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgesv.f>+gesv ::+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   IO (Array ZeroInt CInt, Int)+gesv a b = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   ipiv <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.ioarray ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.gesv nPtr nrhsPtr aPtr ldaPtr ipivPtr bPtr ldbPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgesvd.f>+gesvd ::+   Char {- ^ jobu -} ->+   Char {- ^ jobvt -} ->+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Int {- ^ ucol -} ->+   Int {- ^ ldu -} ->+   Int {- ^ ldvt -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Int)+gesvd jobu jobvt m a ucol ldu ldvt lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   s <- Call.newArray1 (minimum[m,n])+   u <- Call.newArray2 ucol ldu+   vt <- Call.newArray2 n ldvt+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 (5*minimum[m,n])+   evalContT $ do+      jobuPtr <- Call.char jobu+      jobvtPtr <- Call.char jobvt+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      sPtr <- Call.ioarray s+      uPtr <- Call.ioarray u+      lduPtr <- Call.cint ldu+      vtPtr <- Call.ioarray vt+      ldvtPtr <- Call.cint ldvt+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gesvd jobuPtr jobvtPtr mPtr nPtr aPtr ldaPtr sPtr uPtr lduPtr vtPtr ldvtPtr workPtr lworkPtr rworkPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray s+         <*> Call.freezeArray u+         <*> Call.freezeArray vt+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgesvx.f>+gesvx ::+   Char {- ^ fact -} ->+   Char {- ^ trans -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ af -} ->+   IOArray ZeroInt CInt {- ^ ipiv -} ->+   Char {- ^ equed -} ->+   IOArray ZeroInt Float {- ^ r -} ->+   IOArray ZeroInt Float {- ^ c -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   Int {- ^ ldx -} ->+   IO (Char, Array (ZeroInt,ZeroInt) (Complex Float), Float, Array ZeroInt Float, Array ZeroInt Float, Int)+gesvx fact trans a af ipiv equed r c b ldx = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (afDim0,afDim1) = Call.sizes2 $ MutArray.shape af+   let ipivDim0 = Call.sizes1 $ MutArray.shape ipiv+   let rDim0 = Call.sizes1 $ MutArray.shape r+   let cDim0 = Call.sizes1 $ MutArray.shape c+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let ldaf = afDim1+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "gesvx: n == afDim0" (n == afDim0)+   Call.assert "gesvx: n == ipivDim0" (n == ipivDim0)+   Call.assert "gesvx: n == rDim0" (n == rDim0)+   Call.assert "gesvx: n == cDim0" (n == cDim0)+   x <- Call.newArray2 nrhs ldx+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 (2*n)+   evalContT $ do+      factPtr <- Call.char fact+      transPtr <- Call.char trans+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      afPtr <- Call.ioarray af+      ldafPtr <- Call.cint ldaf+      ipivPtr <- Call.ioarray ipiv+      equedPtr <- Call.char equed+      rPtr <- Call.ioarray r+      cPtr <- Call.ioarray c+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      rcondPtr <- Call.alloca+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gesvx factPtr transPtr nPtr nrhsPtr aPtr ldaPtr afPtr ldafPtr ipivPtr equedPtr rPtr cPtr bPtr ldbPtr xPtr ldxPtr rcondPtr ferrPtr berrPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> fmap castCCharToChar (peek equedPtr)+         <*> Call.freezeArray x+         <*> peek rcondPtr+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgetc2.f>+getc2 ::+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IO (Array ZeroInt CInt, Array ZeroInt CInt, Int)+getc2 a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   ipiv <- Call.newArray1 n+   jpiv <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.ioarray ipiv+      jpivPtr <- Call.ioarray jpiv+      infoPtr <- Call.alloca+      liftIO $ FFI.getc2 nPtr aPtr ldaPtr ipivPtr jpivPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ipiv+         <*> Call.freezeArray jpiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgetf2.f>+getf2 ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IO (Array ZeroInt CInt, Int)+getf2 m a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   ipiv <- Call.newArray1 (minimum[m,n])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.ioarray ipiv+      infoPtr <- Call.alloca+      liftIO $ FFI.getf2 mPtr nPtr aPtr ldaPtr ipivPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgetrf.f>+getrf ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IO (Array ZeroInt CInt, Int)+getrf m a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   ipiv <- Call.newArray1 (minimum[m,n])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.ioarray ipiv+      infoPtr <- Call.alloca+      liftIO $ FFI.getrf mPtr nPtr aPtr ldaPtr ipivPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgetri.f>+getri ::+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Int {- ^ lwork -} ->+   IO (Int)+getri a ipiv lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = aDim0+   let lda = aDim1+   Call.assert "getri: n == ipivDim0" (n == ipivDim0)+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.array ipiv+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.getri nPtr aPtr ldaPtr ipivPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgetrs.f>+getrs ::+   Char {- ^ trans -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   IO (Int)+getrs trans a ipiv b = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "getrs: n == ipivDim0" (n == ipivDim0)+   evalContT $ do+      transPtr <- Call.char trans+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.array ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.getrs transPtr nPtr nrhsPtr aPtr ldaPtr ipivPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cggbak.f>+ggbak ::+   Char {- ^ job -} ->+   Char {- ^ side -} ->+   Int {- ^ ilo -} ->+   Int {- ^ ihi -} ->+   Array ZeroInt Float {- ^ lscale -} ->+   Array ZeroInt Float {- ^ rscale -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ v -} ->+   IO (Int)+ggbak job side ilo ihi lscale rscale v = do+   let lscaleDim0 = Call.sizes1 $ Array.shape lscale+   let rscaleDim0 = Call.sizes1 $ Array.shape rscale+   let (vDim0,vDim1) = Call.sizes2 $ MutArray.shape v+   let n = lscaleDim0+   let m = vDim0+   let ldv = vDim1+   Call.assert "ggbak: n == rscaleDim0" (n == rscaleDim0)+   evalContT $ do+      jobPtr <- Call.char job+      sidePtr <- Call.char side+      nPtr <- Call.cint n+      iloPtr <- Call.cint ilo+      ihiPtr <- Call.cint ihi+      lscalePtr <- Call.array lscale+      rscalePtr <- Call.array rscale+      mPtr <- Call.cint m+      vPtr <- Call.ioarray v+      ldvPtr <- Call.cint ldv+      infoPtr <- Call.alloca+      liftIO $ FFI.ggbak jobPtr sidePtr nPtr iloPtr ihiPtr lscalePtr rscalePtr mPtr vPtr ldvPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cggbal.f>+ggbal ::+   Char {- ^ job -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   Int {- ^ lwork -} ->+   IO (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)+ggbal job a b lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   Call.assert "ggbal: n == bDim0" (n == bDim0)+   lscale <- Call.newArray1 n+   rscale <- Call.newArray1 n+   work <- Call.newArray1 lwork+   evalContT $ do+      jobPtr <- Call.char job+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      iloPtr <- Call.alloca+      ihiPtr <- Call.alloca+      lscalePtr <- Call.ioarray lscale+      rscalePtr <- Call.ioarray rscale+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.ggbal jobPtr nPtr aPtr ldaPtr bPtr ldbPtr iloPtr ihiPtr lscalePtr rscalePtr workPtr infoPtr+      liftIO $ pure (,,,,)+         <*> fmap fromIntegral (peek iloPtr)+         <*> fmap fromIntegral (peek ihiPtr)+         <*> Call.freezeArray lscale+         <*> Call.freezeArray rscale+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgges.f>+gges ::+   Char {- ^ jobvsl -} ->+   Char {- ^ jobvsr -} ->+   Char {- ^ sort -} ->+   FunPtr (Ptr (Complex Float) -> Ptr (Complex Float) -> IO Bool) {- ^ selctg -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   Int {- ^ ldvsl -} ->+   Int {- ^ ldvsr -} ->+   Int {- ^ lwork -} ->+   IO (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Int)+gges jobvsl jobvsr sort selctg a b ldvsl ldvsr lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   Call.assert "gges: n == bDim0" (n == bDim0)+   alpha <- Call.newArray1 n+   beta <- Call.newArray1 n+   vsl <- Call.newArray2 n ldvsl+   vsr <- Call.newArray2 n ldvsr+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 (8*n)+   bwork <- Call.newArray1 n+   evalContT $ do+      jobvslPtr <- Call.char jobvsl+      jobvsrPtr <- Call.char jobvsr+      sortPtr <- Call.char sort+      selctgPtr <- pure selctg+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      sdimPtr <- Call.alloca+      alphaPtr <- Call.ioarray alpha+      betaPtr <- Call.ioarray beta+      vslPtr <- Call.ioarray vsl+      ldvslPtr <- Call.cint ldvsl+      vsrPtr <- Call.ioarray vsr+      ldvsrPtr <- Call.cint ldvsr+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      bworkPtr <- Call.ioarray bwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gges jobvslPtr jobvsrPtr sortPtr selctgPtr nPtr aPtr ldaPtr bPtr ldbPtr sdimPtr alphaPtr betaPtr vslPtr ldvslPtr vsrPtr ldvsrPtr workPtr lworkPtr rworkPtr bworkPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> fmap fromIntegral (peek sdimPtr)+         <*> Call.freezeArray alpha+         <*> Call.freezeArray beta+         <*> Call.freezeArray vsl+         <*> Call.freezeArray vsr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cggesx.f>+ggesx ::+   Char {- ^ jobvsl -} ->+   Char {- ^ jobvsr -} ->+   Char {- ^ sort -} ->+   FunPtr (Ptr (Complex Float) -> Ptr (Complex Float) -> IO Bool) {- ^ selctg -} ->+   Char {- ^ sense -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   Int {- ^ ldvsl -} ->+   Int {- ^ ldvsr -} ->+   Int {- ^ lwork -} ->+   Int {- ^ liwork -} ->+   IO (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Array ZeroInt Float, Array ZeroInt Float, Int)+ggesx jobvsl jobvsr sort selctg sense a b ldvsl ldvsr lwork liwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   Call.assert "ggesx: n == bDim0" (n == bDim0)+   alpha <- Call.newArray1 n+   beta <- Call.newArray1 n+   vsl <- Call.newArray2 n ldvsl+   vsr <- Call.newArray2 n ldvsr+   rconde <- Call.newArray1 2+   rcondv <- Call.newArray1 2+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 (8*n)+   iwork <- Call.newArray1 (maximum[1,liwork])+   bwork <- Call.newArray1 n+   evalContT $ do+      jobvslPtr <- Call.char jobvsl+      jobvsrPtr <- Call.char jobvsr+      sortPtr <- Call.char sort+      selctgPtr <- pure selctg+      sensePtr <- Call.char sense+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      sdimPtr <- Call.alloca+      alphaPtr <- Call.ioarray alpha+      betaPtr <- Call.ioarray beta+      vslPtr <- Call.ioarray vsl+      ldvslPtr <- Call.cint ldvsl+      vsrPtr <- Call.ioarray vsr+      ldvsrPtr <- Call.cint ldvsr+      rcondePtr <- Call.ioarray rconde+      rcondvPtr <- Call.ioarray rcondv+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      bworkPtr <- Call.ioarray bwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ggesx jobvslPtr jobvsrPtr sortPtr selctgPtr sensePtr nPtr aPtr ldaPtr bPtr ldbPtr sdimPtr alphaPtr betaPtr vslPtr ldvslPtr vsrPtr ldvsrPtr rcondePtr rcondvPtr workPtr lworkPtr rworkPtr iworkPtr liworkPtr bworkPtr infoPtr+      liftIO $ pure (,,,,,,,)+         <*> fmap fromIntegral (peek sdimPtr)+         <*> Call.freezeArray alpha+         <*> Call.freezeArray beta+         <*> Call.freezeArray vsl+         <*> Call.freezeArray vsr+         <*> Call.freezeArray rconde+         <*> Call.freezeArray rcondv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cggev.f>+ggev ::+   Char {- ^ jobvl -} ->+   Char {- ^ jobvr -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   Int {- ^ ldvl -} ->+   Int {- ^ ldvr -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Int)+ggev jobvl jobvr a b ldvl ldvr lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   Call.assert "ggev: n == bDim0" (n == bDim0)+   alpha <- Call.newArray1 n+   beta <- Call.newArray1 n+   vl <- Call.newArray2 n ldvl+   vr <- Call.newArray2 n ldvr+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 (8*n)+   evalContT $ do+      jobvlPtr <- Call.char jobvl+      jobvrPtr <- Call.char jobvr+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      alphaPtr <- Call.ioarray alpha+      betaPtr <- Call.ioarray beta+      vlPtr <- Call.ioarray vl+      ldvlPtr <- Call.cint ldvl+      vrPtr <- Call.ioarray vr+      ldvrPtr <- Call.cint ldvr+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ggev jobvlPtr jobvrPtr nPtr aPtr ldaPtr bPtr ldbPtr alphaPtr betaPtr vlPtr ldvlPtr vrPtr ldvrPtr workPtr lworkPtr rworkPtr infoPtr+      liftIO $ pure (,,,,)+         <*> Call.freezeArray alpha+         <*> Call.freezeArray beta+         <*> Call.freezeArray vl+         <*> Call.freezeArray vr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cggevx.f>+ggevx ::+   Char {- ^ balanc -} ->+   Char {- ^ jobvl -} ->+   Char {- ^ jobvr -} ->+   Char {- ^ sense -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   Int {- ^ ldvl -} ->+   Int {- ^ ldvr -} ->+   Int {- ^ lwork -} ->+   Int {- ^ lrwork -} ->+   IO (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float, Array ZeroInt Float, Array ZeroInt Float, Int)+ggevx balanc jobvl jobvr sense a b ldvl ldvr lwork lrwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   Call.assert "ggevx: n == bDim0" (n == bDim0)+   alpha <- Call.newArray1 n+   beta <- Call.newArray1 n+   vl <- Call.newArray2 n ldvl+   vr <- Call.newArray2 n ldvr+   lscale <- Call.newArray1 n+   rscale <- Call.newArray1 n+   rconde <- Call.newArray1 n+   rcondv <- Call.newArray1 n+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 lrwork+   iwork <- Call.newArray1 (n+2)+   bwork <- Call.newArray1 n+   evalContT $ do+      balancPtr <- Call.char balanc+      jobvlPtr <- Call.char jobvl+      jobvrPtr <- Call.char jobvr+      sensePtr <- Call.char sense+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      alphaPtr <- Call.ioarray alpha+      betaPtr <- Call.ioarray beta+      vlPtr <- Call.ioarray vl+      ldvlPtr <- Call.cint ldvl+      vrPtr <- Call.ioarray vr+      ldvrPtr <- Call.cint ldvr+      iloPtr <- Call.alloca+      ihiPtr <- Call.alloca+      lscalePtr <- Call.ioarray lscale+      rscalePtr <- Call.ioarray rscale+      abnrmPtr <- Call.alloca+      bbnrmPtr <- Call.alloca+      rcondePtr <- Call.ioarray rconde+      rcondvPtr <- Call.ioarray rcondv+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      iworkPtr <- Call.ioarray iwork+      bworkPtr <- Call.ioarray bwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ggevx balancPtr jobvlPtr jobvrPtr sensePtr nPtr aPtr ldaPtr bPtr ldbPtr alphaPtr betaPtr vlPtr ldvlPtr vrPtr ldvrPtr iloPtr ihiPtr lscalePtr rscalePtr abnrmPtr bbnrmPtr rcondePtr rcondvPtr workPtr lworkPtr rworkPtr iworkPtr bworkPtr infoPtr+      liftIO $ pure (,,,,,,,,,,,,)+         <*> Call.freezeArray alpha+         <*> Call.freezeArray beta+         <*> Call.freezeArray vl+         <*> Call.freezeArray vr+         <*> fmap fromIntegral (peek iloPtr)+         <*> fmap fromIntegral (peek ihiPtr)+         <*> Call.freezeArray lscale+         <*> Call.freezeArray rscale+         <*> peek abnrmPtr+         <*> peek bbnrmPtr+         <*> Call.freezeArray rconde+         <*> Call.freezeArray rcondv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cggglm.f>+ggglm ::+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   IOArray ZeroInt (Complex Float) {- ^ d -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)+ggglm a b d lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let m = aDim0+   let lda = aDim1+   let p = bDim0+   let ldb = bDim1+   let n = dDim0+   x <- Call.newArray1 m+   y <- Call.newArray1 p+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      nPtr <- Call.cint n+      mPtr <- Call.cint m+      pPtr <- Call.cint p+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      dPtr <- Call.ioarray d+      xPtr <- Call.ioarray x+      yPtr <- Call.ioarray y+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ggglm nPtr mPtr pPtr aPtr ldaPtr bPtr ldbPtr dPtr xPtr yPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray x+         <*> Call.freezeArray y+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgghrd.f>+gghrd ::+   Char {- ^ compq -} ->+   Char {- ^ compz -} ->+   Int {- ^ ilo -} ->+   Int {- ^ ihi -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ q -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ z -} ->+   IO (Int)+gghrd compq compz ilo ihi a b q z = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   let ldq = qDim1+   let ldz = zDim1+   Call.assert "gghrd: n == bDim0" (n == bDim0)+   Call.assert "gghrd: n == qDim0" (n == qDim0)+   Call.assert "gghrd: n == zDim0" (n == zDim0)+   evalContT $ do+      compqPtr <- Call.char compq+      compzPtr <- Call.char compz+      nPtr <- Call.cint n+      iloPtr <- Call.cint ilo+      ihiPtr <- Call.cint ihi+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      infoPtr <- Call.alloca+      liftIO $ FFI.gghrd compqPtr compzPtr nPtr iloPtr ihiPtr aPtr ldaPtr bPtr ldbPtr qPtr ldqPtr zPtr ldzPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgglse.f>+gglse ::+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   IOArray ZeroInt (Complex Float) {- ^ c -} ->+   IOArray ZeroInt (Complex Float) {- ^ d -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt (Complex Float), Int)+gglse a b c d lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let cDim0 = Call.sizes1 $ MutArray.shape c+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   let m = cDim0+   let p = dDim0+   Call.assert "gglse: n == bDim0" (n == bDim0)+   x <- Call.newArray1 n+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      pPtr <- Call.cint p+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      cPtr <- Call.ioarray c+      dPtr <- Call.ioarray d+      xPtr <- Call.ioarray x+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gglse mPtr nPtr pPtr aPtr ldaPtr bPtr ldbPtr cPtr dPtr xPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray x+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cggqrf.f>+ggqrf ::+   Int {- ^ n -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)+ggqrf n a b lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let m = aDim0+   let lda = aDim1+   let p = bDim0+   let ldb = bDim1+   taua <- Call.newArray1 (minimum[n,m])+   taub <- Call.newArray1 (minimum[n,p])+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      nPtr <- Call.cint n+      mPtr <- Call.cint m+      pPtr <- Call.cint p+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauaPtr <- Call.ioarray taua+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      taubPtr <- Call.ioarray taub+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ggqrf nPtr mPtr pPtr aPtr ldaPtr tauaPtr bPtr ldbPtr taubPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray taua+         <*> Call.freezeArray taub+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cggrqf.f>+ggrqf ::+   Int {- ^ m -} ->+   Int {- ^ p -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)+ggrqf m p a b lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   Call.assert "ggrqf: n == bDim0" (n == bDim0)+   taua <- Call.newArray1 (minimum[m,n])+   taub <- Call.newArray1 (minimum[p,n])+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      pPtr <- Call.cint p+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauaPtr <- Call.ioarray taua+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      taubPtr <- Call.ioarray taub+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ggrqf mPtr pPtr nPtr aPtr ldaPtr tauaPtr bPtr ldbPtr taubPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray taua+         <*> Call.freezeArray taub+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgtcon.f>+gtcon ::+   Char {- ^ norm -} ->+   Array ZeroInt (Complex Float) {- ^ dl -} ->+   Array ZeroInt (Complex Float) {- ^ d -} ->+   Array ZeroInt (Complex Float) {- ^ du -} ->+   Array ZeroInt (Complex Float) {- ^ du2 -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Float {- ^ anorm -} ->+   IO (Float, Int)+gtcon norm dl d du du2 ipiv anorm = do+   let dlDim0 = Call.sizes1 $ Array.shape dl+   let dDim0 = Call.sizes1 $ Array.shape d+   let duDim0 = Call.sizes1 $ Array.shape du+   let du2Dim0 = Call.sizes1 $ Array.shape du2+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = dDim0+   Call.assert "gtcon: n-1 == dlDim0" (n-1 == dlDim0)+   Call.assert "gtcon: n-1 == duDim0" (n-1 == duDim0)+   Call.assert "gtcon: n-2 == du2Dim0" (n-2 == du2Dim0)+   Call.assert "gtcon: n == ipivDim0" (n == ipivDim0)+   work <- Call.newArray1 (2*n)+   evalContT $ do+      normPtr <- Call.char norm+      nPtr <- Call.cint n+      dlPtr <- Call.array dl+      dPtr <- Call.array d+      duPtr <- Call.array du+      du2Ptr <- Call.array du2+      ipivPtr <- Call.array ipiv+      anormPtr <- Call.float anorm+      rcondPtr <- Call.alloca+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.gtcon normPtr nPtr dlPtr dPtr duPtr du2Ptr ipivPtr anormPtr rcondPtr workPtr infoPtr+      liftIO $ pure (,)+         <*> peek rcondPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgtrfs.f>+gtrfs ::+   Char {- ^ trans -} ->+   Array ZeroInt (Complex Float) {- ^ dl -} ->+   Array ZeroInt (Complex Float) {- ^ d -} ->+   Array ZeroInt (Complex Float) {- ^ du -} ->+   Array ZeroInt (Complex Float) {- ^ dlf -} ->+   Array ZeroInt (Complex Float) {- ^ df -} ->+   Array ZeroInt (Complex Float) {- ^ duf -} ->+   Array ZeroInt (Complex Float) {- ^ du2 -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ x -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Int)+gtrfs trans dl d du dlf df duf du2 ipiv b x = do+   let dlDim0 = Call.sizes1 $ Array.shape dl+   let dDim0 = Call.sizes1 $ Array.shape d+   let duDim0 = Call.sizes1 $ Array.shape du+   let dlfDim0 = Call.sizes1 $ Array.shape dlf+   let dfDim0 = Call.sizes1 $ Array.shape df+   let dufDim0 = Call.sizes1 $ Array.shape duf+   let du2Dim0 = Call.sizes1 $ Array.shape du2+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (xDim0,xDim1) = Call.sizes2 $ MutArray.shape x+   let n = dDim0+   let nrhs = bDim0+   let ldb = bDim1+   let ldx = xDim1+   Call.assert "gtrfs: n-1 == dlDim0" (n-1 == dlDim0)+   Call.assert "gtrfs: n-1 == duDim0" (n-1 == duDim0)+   Call.assert "gtrfs: n-1 == dlfDim0" (n-1 == dlfDim0)+   Call.assert "gtrfs: n == dfDim0" (n == dfDim0)+   Call.assert "gtrfs: n-1 == dufDim0" (n-1 == dufDim0)+   Call.assert "gtrfs: n-2 == du2Dim0" (n-2 == du2Dim0)+   Call.assert "gtrfs: n == ipivDim0" (n == ipivDim0)+   Call.assert "gtrfs: nrhs == xDim0" (nrhs == xDim0)+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      transPtr <- Call.char trans+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      dlPtr <- Call.array dl+      dPtr <- Call.array d+      duPtr <- Call.array du+      dlfPtr <- Call.array dlf+      dfPtr <- Call.array df+      dufPtr <- Call.array duf+      du2Ptr <- Call.array du2+      ipivPtr <- Call.array ipiv+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gtrfs transPtr nPtr nrhsPtr dlPtr dPtr duPtr dlfPtr dfPtr dufPtr du2Ptr ipivPtr bPtr ldbPtr xPtr ldxPtr ferrPtr berrPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgtsv.f>+gtsv ::+   IOArray ZeroInt (Complex Float) {- ^ dl -} ->+   IOArray ZeroInt (Complex Float) {- ^ d -} ->+   IOArray ZeroInt (Complex Float) {- ^ du -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   IO (Int)+gtsv dl d du b = do+   let dlDim0 = Call.sizes1 $ MutArray.shape dl+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let duDim0 = Call.sizes1 $ MutArray.shape du+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = dDim0+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "gtsv: n-1 == dlDim0" (n-1 == dlDim0)+   Call.assert "gtsv: n-1 == duDim0" (n-1 == duDim0)+   evalContT $ do+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      dlPtr <- Call.ioarray dl+      dPtr <- Call.ioarray d+      duPtr <- Call.ioarray du+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.gtsv nPtr nrhsPtr dlPtr dPtr duPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgtsvx.f>+gtsvx ::+   Char {- ^ fact -} ->+   Char {- ^ trans -} ->+   Array ZeroInt (Complex Float) {- ^ dl -} ->+   Array ZeroInt (Complex Float) {- ^ d -} ->+   Array ZeroInt (Complex Float) {- ^ du -} ->+   IOArray ZeroInt (Complex Float) {- ^ dlf -} ->+   IOArray ZeroInt (Complex Float) {- ^ df -} ->+   IOArray ZeroInt (Complex Float) {- ^ duf -} ->+   IOArray ZeroInt (Complex Float) {- ^ du2 -} ->+   IOArray ZeroInt CInt {- ^ ipiv -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   Int {- ^ ldx -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Float), Float, Array ZeroInt Float, Array ZeroInt Float, Int)+gtsvx fact trans dl d du dlf df duf du2 ipiv b ldx = do+   let dlDim0 = Call.sizes1 $ Array.shape dl+   let dDim0 = Call.sizes1 $ Array.shape d+   let duDim0 = Call.sizes1 $ Array.shape du+   let dlfDim0 = Call.sizes1 $ MutArray.shape dlf+   let dfDim0 = Call.sizes1 $ MutArray.shape df+   let dufDim0 = Call.sizes1 $ MutArray.shape duf+   let du2Dim0 = Call.sizes1 $ MutArray.shape du2+   let ipivDim0 = Call.sizes1 $ MutArray.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let n = dDim0+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "gtsvx: n-1 == dlDim0" (n-1 == dlDim0)+   Call.assert "gtsvx: n-1 == duDim0" (n-1 == duDim0)+   Call.assert "gtsvx: n-1 == dlfDim0" (n-1 == dlfDim0)+   Call.assert "gtsvx: n == dfDim0" (n == dfDim0)+   Call.assert "gtsvx: n-1 == dufDim0" (n-1 == dufDim0)+   Call.assert "gtsvx: n-2 == du2Dim0" (n-2 == du2Dim0)+   Call.assert "gtsvx: n == ipivDim0" (n == ipivDim0)+   x <- Call.newArray2 nrhs ldx+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      factPtr <- Call.char fact+      transPtr <- Call.char trans+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      dlPtr <- Call.array dl+      dPtr <- Call.array d+      duPtr <- Call.array du+      dlfPtr <- Call.ioarray dlf+      dfPtr <- Call.ioarray df+      dufPtr <- Call.ioarray duf+      du2Ptr <- Call.ioarray du2+      ipivPtr <- Call.ioarray ipiv+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      rcondPtr <- Call.alloca+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gtsvx factPtr transPtr nPtr nrhsPtr dlPtr dPtr duPtr dlfPtr dfPtr dufPtr du2Ptr ipivPtr bPtr ldbPtr xPtr ldxPtr rcondPtr ferrPtr berrPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,,,)+         <*> Call.freezeArray x+         <*> peek rcondPtr+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgttrf.f>+gttrf ::+   IOArray ZeroInt (Complex Float) {- ^ dl -} ->+   IOArray ZeroInt (Complex Float) {- ^ d -} ->+   IOArray ZeroInt (Complex Float) {- ^ du -} ->+   IO (Array ZeroInt (Complex Float), Array ZeroInt CInt, Int)+gttrf dl d du = do+   let dlDim0 = Call.sizes1 $ MutArray.shape dl+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let duDim0 = Call.sizes1 $ MutArray.shape du+   let n = dDim0+   Call.assert "gttrf: n-1 == dlDim0" (n-1 == dlDim0)+   Call.assert "gttrf: n-1 == duDim0" (n-1 == duDim0)+   du2 <- Call.newArray1 (n-2)+   ipiv <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      dlPtr <- Call.ioarray dl+      dPtr <- Call.ioarray d+      duPtr <- Call.ioarray du+      du2Ptr <- Call.ioarray du2+      ipivPtr <- Call.ioarray ipiv+      infoPtr <- Call.alloca+      liftIO $ FFI.gttrf nPtr dlPtr dPtr duPtr du2Ptr ipivPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray du2+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgttrs.f>+gttrs ::+   Char {- ^ trans -} ->+   Array ZeroInt (Complex Float) {- ^ dl -} ->+   Array ZeroInt (Complex Float) {- ^ d -} ->+   Array ZeroInt (Complex Float) {- ^ du -} ->+   Array ZeroInt (Complex Float) {- ^ du2 -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   IO (Int)+gttrs trans dl d du du2 ipiv b = do+   let dlDim0 = Call.sizes1 $ Array.shape dl+   let dDim0 = Call.sizes1 $ Array.shape d+   let duDim0 = Call.sizes1 $ Array.shape du+   let du2Dim0 = Call.sizes1 $ Array.shape du2+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = dDim0+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "gttrs: n-1 == dlDim0" (n-1 == dlDim0)+   Call.assert "gttrs: n-1 == duDim0" (n-1 == duDim0)+   Call.assert "gttrs: n-2 == du2Dim0" (n-2 == du2Dim0)+   Call.assert "gttrs: n == ipivDim0" (n == ipivDim0)+   evalContT $ do+      transPtr <- Call.char trans+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      dlPtr <- Call.array dl+      dPtr <- Call.array d+      duPtr <- Call.array du+      du2Ptr <- Call.array du2+      ipivPtr <- Call.array ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.gttrs transPtr nPtr nrhsPtr dlPtr dPtr duPtr du2Ptr ipivPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgtts2.f>+gtts2 ::+   Int {- ^ itrans -} ->+   Array ZeroInt (Complex Float) {- ^ dl -} ->+   Array ZeroInt (Complex Float) {- ^ d -} ->+   Array ZeroInt (Complex Float) {- ^ du -} ->+   Array ZeroInt (Complex Float) {- ^ du2 -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   IO ()+gtts2 itrans dl d du du2 ipiv b = do+   let dlDim0 = Call.sizes1 $ Array.shape dl+   let dDim0 = Call.sizes1 $ Array.shape d+   let duDim0 = Call.sizes1 $ Array.shape du+   let du2Dim0 = Call.sizes1 $ Array.shape du2+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = dDim0+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "gtts2: n-1 == dlDim0" (n-1 == dlDim0)+   Call.assert "gtts2: n-1 == duDim0" (n-1 == duDim0)+   Call.assert "gtts2: n-2 == du2Dim0" (n-2 == du2Dim0)+   Call.assert "gtts2: n == ipivDim0" (n == ipivDim0)+   evalContT $ do+      itransPtr <- Call.cint itrans+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      dlPtr <- Call.array dl+      dPtr <- Call.array d+      duPtr <- Call.array du+      du2Ptr <- Call.array du2+      ipivPtr <- Call.array ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      liftIO $ FFI.gtts2 itransPtr nPtr nrhsPtr dlPtr dPtr duPtr du2Ptr ipivPtr bPtr ldbPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chbev.f>+hbev ::+   Char {- ^ jobz -} ->+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->+   Int {- ^ ldz -} ->+   IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) (Complex Float), Int)+hbev jobz uplo kd ab ldz = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let n = abDim0+   let ldab = abDim1+   w <- Call.newArray1 n+   z <- Call.newArray2 n ldz+   work <- Call.newArray1 n+   rwork <- Call.newArray1 (maximum[1,3*n-2])+   evalContT $ do+      jobzPtr <- Call.char jobz+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.hbev jobzPtr uploPtr nPtr kdPtr abPtr ldabPtr wPtr zPtr ldzPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chbevd.f>+hbevd ::+   Char {- ^ jobz -} ->+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->+   Int {- ^ ldz -} ->+   Int {- ^ lwork -} ->+   Int {- ^ rworkSize -} ->+   Int {- ^ lrwork -} ->+   Int {- ^ liwork -} ->+   IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) (Complex Float), Int)+hbevd jobz uplo kd ab ldz lwork rworkSize lrwork liwork = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let n = abDim0+   let ldab = abDim1+   w <- Call.newArray1 n+   z <- Call.newArray2 n ldz+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 rworkSize+   iwork <- Call.newArray1 (maximum[1,liwork])+   evalContT $ do+      jobzPtr <- Call.char jobz+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      lrworkPtr <- Call.cint lrwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      infoPtr <- Call.alloca+      liftIO $ FFI.hbevd jobzPtr uploPtr nPtr kdPtr abPtr ldabPtr wPtr zPtr ldzPtr workPtr lworkPtr rworkPtr lrworkPtr iworkPtr liworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chbevx.f>+hbevx ::+   Char {- ^ jobz -} ->+   Char {- ^ range -} ->+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->+   Int {- ^ ldq -} ->+   Float {- ^ vl -} ->+   Float {- ^ vu -} ->+   Int {- ^ il -} ->+   Int {- ^ iu -} ->+   Float {- ^ abstol -} ->+   Int {- ^ m -} ->+   Int {- ^ ldz -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Float), Int, Array ZeroInt Float, Array (ZeroInt,ZeroInt) (Complex Float), Array ZeroInt CInt, Int)+hbevx jobz range uplo kd ab ldq vl vu il iu abstol m ldz = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let n = abDim0+   let ldab = abDim1+   q <- Call.newArray2 n ldq+   w <- Call.newArray1 n+   z <- Call.newArray2 (maximum[1,m]) ldz+   work <- Call.newArray1 n+   rwork <- Call.newArray1 (7*n)+   iwork <- Call.newArray1 (5*n)+   ifail <- Call.newArray1 n+   evalContT $ do+      jobzPtr <- Call.char jobz+      rangePtr <- Call.char range+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      vlPtr <- Call.float vl+      vuPtr <- Call.float vu+      ilPtr <- Call.cint il+      iuPtr <- Call.cint iu+      abstolPtr <- Call.float abstol+      mPtr <- Call.alloca+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      iworkPtr <- Call.ioarray iwork+      ifailPtr <- Call.ioarray ifail+      infoPtr <- Call.alloca+      liftIO $ FFI.hbevx jobzPtr rangePtr uploPtr nPtr kdPtr abPtr ldabPtr qPtr ldqPtr vlPtr vuPtr ilPtr iuPtr abstolPtr mPtr wPtr zPtr ldzPtr workPtr rworkPtr iworkPtr ifailPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> Call.freezeArray q+         <*> fmap fromIntegral (peek mPtr)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> Call.freezeArray ifail+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chbgst.f>+hbgst ::+   Char {- ^ vect -} ->+   Char {- ^ uplo -} ->+   Int {- ^ ka -} ->+   Int {- ^ kb -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ bb -} ->+   Int {- ^ ldx -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Float), Int)+hbgst vect uplo ka kb ab bb ldx = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let (bbDim0,bbDim1) = Call.sizes2 $ Array.shape bb+   let n = abDim0+   let ldab = abDim1+   let ldbb = bbDim1+   Call.assert "hbgst: n == bbDim0" (n == bbDim0)+   x <- Call.newArray2 n ldx+   work <- Call.newArray1 n+   rwork <- Call.newArray1 n+   evalContT $ do+      vectPtr <- Call.char vect+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kaPtr <- Call.cint ka+      kbPtr <- Call.cint kb+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      bbPtr <- Call.array bb+      ldbbPtr <- Call.cint ldbb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.hbgst vectPtr uploPtr nPtr kaPtr kbPtr abPtr ldabPtr bbPtr ldbbPtr xPtr ldxPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray x+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chbgv.f>+hbgv ::+   Char {- ^ jobz -} ->+   Char {- ^ uplo -} ->+   Int {- ^ ka -} ->+   Int {- ^ kb -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ bb -} ->+   Int {- ^ ldz -} ->+   IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) (Complex Float), Int)+hbgv jobz uplo ka kb ab bb ldz = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let (bbDim0,bbDim1) = Call.sizes2 $ MutArray.shape bb+   let n = abDim0+   let ldab = abDim1+   let ldbb = bbDim1+   Call.assert "hbgv: n == bbDim0" (n == bbDim0)+   w <- Call.newArray1 n+   z <- Call.newArray2 n ldz+   work <- Call.newArray1 n+   rwork <- Call.newArray1 (3*n)+   evalContT $ do+      jobzPtr <- Call.char jobz+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kaPtr <- Call.cint ka+      kbPtr <- Call.cint kb+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      bbPtr <- Call.ioarray bb+      ldbbPtr <- Call.cint ldbb+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.hbgv jobzPtr uploPtr nPtr kaPtr kbPtr abPtr ldabPtr bbPtr ldbbPtr wPtr zPtr ldzPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chbgvd.f>+hbgvd ::+   Char {- ^ jobz -} ->+   Char {- ^ uplo -} ->+   Int {- ^ ka -} ->+   Int {- ^ kb -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ bb -} ->+   Int {- ^ ldz -} ->+   Int {- ^ lwork -} ->+   Int {- ^ lrwork -} ->+   Int {- ^ liwork -} ->+   IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) (Complex Float), Int)+hbgvd jobz uplo ka kb ab bb ldz lwork lrwork liwork = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let (bbDim0,bbDim1) = Call.sizes2 $ MutArray.shape bb+   let n = abDim0+   let ldab = abDim1+   let ldbb = bbDim1+   Call.assert "hbgvd: n == bbDim0" (n == bbDim0)+   w <- Call.newArray1 n+   z <- Call.newArray2 n ldz+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 (maximum[1,lrwork])+   iwork <- Call.newArray1 (maximum[1,liwork])+   evalContT $ do+      jobzPtr <- Call.char jobz+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kaPtr <- Call.cint ka+      kbPtr <- Call.cint kb+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      bbPtr <- Call.ioarray bb+      ldbbPtr <- Call.cint ldbb+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      lrworkPtr <- Call.cint lrwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      infoPtr <- Call.alloca+      liftIO $ FFI.hbgvd jobzPtr uploPtr nPtr kaPtr kbPtr abPtr ldabPtr bbPtr ldbbPtr wPtr zPtr ldzPtr workPtr lworkPtr rworkPtr lrworkPtr iworkPtr liworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chbgvx.f>+hbgvx ::+   Char {- ^ jobz -} ->+   Char {- ^ range -} ->+   Char {- ^ uplo -} ->+   Int {- ^ ka -} ->+   Int {- ^ kb -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ bb -} ->+   Int {- ^ ldq -} ->+   Float {- ^ vl -} ->+   Float {- ^ vu -} ->+   Int {- ^ il -} ->+   Int {- ^ iu -} ->+   Float {- ^ abstol -} ->+   Int {- ^ ldz -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Float), Int, Array ZeroInt Float, Array (ZeroInt,ZeroInt) (Complex Float), Array ZeroInt CInt, Int)+hbgvx jobz range uplo ka kb ab bb ldq vl vu il iu abstol ldz = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let (bbDim0,bbDim1) = Call.sizes2 $ MutArray.shape bb+   let n = abDim0+   let ldab = abDim1+   let ldbb = bbDim1+   Call.assert "hbgvx: n == bbDim0" (n == bbDim0)+   q <- Call.newArray2 n ldq+   w <- Call.newArray1 n+   z <- Call.newArray2 n ldz+   work <- Call.newArray1 n+   rwork <- Call.newArray1 (7*n)+   iwork <- Call.newArray1 (5*n)+   ifail <- Call.newArray1 n+   evalContT $ do+      jobzPtr <- Call.char jobz+      rangePtr <- Call.char range+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kaPtr <- Call.cint ka+      kbPtr <- Call.cint kb+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      bbPtr <- Call.ioarray bb+      ldbbPtr <- Call.cint ldbb+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      vlPtr <- Call.float vl+      vuPtr <- Call.float vu+      ilPtr <- Call.cint il+      iuPtr <- Call.cint iu+      abstolPtr <- Call.float abstol+      mPtr <- Call.alloca+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      iworkPtr <- Call.ioarray iwork+      ifailPtr <- Call.ioarray ifail+      infoPtr <- Call.alloca+      liftIO $ FFI.hbgvx jobzPtr rangePtr uploPtr nPtr kaPtr kbPtr abPtr ldabPtr bbPtr ldbbPtr qPtr ldqPtr vlPtr vuPtr ilPtr iuPtr abstolPtr mPtr wPtr zPtr ldzPtr workPtr rworkPtr iworkPtr ifailPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> Call.freezeArray q+         <*> fmap fromIntegral (peek mPtr)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> Call.freezeArray ifail+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chbtrd.f>+hbtrd ::+   Char {- ^ vect -} ->+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ q -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Int)+hbtrd vect uplo kd ab q = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let n = abDim0+   let ldab = abDim1+   let ldq = qDim1+   Call.assert "hbtrd: n == qDim0" (n == qDim0)+   d <- Call.newArray1 n+   e <- Call.newArray1 (n-1)+   work <- Call.newArray1 n+   evalContT $ do+      vectPtr <- Call.char vect+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.hbtrd vectPtr uploPtr nPtr kdPtr abPtr ldabPtr dPtr ePtr qPtr ldqPtr workPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray d+         <*> Call.freezeArray e+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/checon.f>+hecon ::+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Float {- ^ anorm -} ->+   IO (Float, Int)+hecon uplo a ipiv anorm = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = aDim0+   let lda = aDim1+   Call.assert "hecon: n == ipivDim0" (n == ipivDim0)+   work <- Call.newArray1 (2*n)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.array ipiv+      anormPtr <- Call.float anorm+      rcondPtr <- Call.alloca+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.hecon uploPtr nPtr aPtr ldaPtr ipivPtr anormPtr rcondPtr workPtr infoPtr+      liftIO $ pure (,)+         <*> peek rcondPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cheequb.f>+heequb ::+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IO (Array ZeroInt Float, Float, Float, Int)+heequb uplo a = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   s <- Call.newArray1 n+   work <- Call.newArray1 (2*n)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      sPtr <- Call.ioarray s+      scondPtr <- Call.alloca+      amaxPtr <- Call.alloca+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.heequb uploPtr nPtr aPtr ldaPtr sPtr scondPtr amaxPtr workPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray s+         <*> peek scondPtr+         <*> peek amaxPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cheev.f>+heev ::+   Char {- ^ jobz -} ->+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Float, Int)+heev jobz uplo a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   w <- Call.newArray1 n+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 (maximum[1,3*n-2])+   evalContT $ do+      jobzPtr <- Call.char jobz+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      wPtr <- Call.ioarray w+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.heev jobzPtr uploPtr nPtr aPtr ldaPtr wPtr workPtr lworkPtr rworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray w+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cheevd.f>+heevd ::+   Char {- ^ jobz -} ->+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Int {- ^ lwork -} ->+   Int {- ^ rworkSize -} ->+   Int {- ^ lrwork -} ->+   Int {- ^ liwork -} ->+   IO (Array ZeroInt Float, Int)+heevd jobz uplo a lwork rworkSize lrwork liwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   w <- Call.newArray1 n+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 rworkSize+   iwork <- Call.newArray1 (maximum[1,liwork])+   evalContT $ do+      jobzPtr <- Call.char jobz+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      wPtr <- Call.ioarray w+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      lrworkPtr <- Call.cint lrwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      infoPtr <- Call.alloca+      liftIO $ FFI.heevd jobzPtr uploPtr nPtr aPtr ldaPtr wPtr workPtr lworkPtr rworkPtr lrworkPtr iworkPtr liworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray w+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cheevr.f>+heevr ::+   Char {- ^ jobz -} ->+   Char {- ^ range -} ->+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Float {- ^ vl -} ->+   Float {- ^ vu -} ->+   Int {- ^ il -} ->+   Int {- ^ iu -} ->+   Float {- ^ abstol -} ->+   Int {- ^ m -} ->+   Int {- ^ ldz -} ->+   Int {- ^ lwork -} ->+   Int {- ^ lrwork -} ->+   Int {- ^ liwork -} ->+   IO (Int, Array ZeroInt Float, Array (ZeroInt,ZeroInt) (Complex Float), Array ZeroInt CInt, Int)+heevr jobz range uplo a vl vu il iu abstol m ldz lwork lrwork liwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   w <- Call.newArray1 n+   z <- Call.newArray2 (maximum[1,m]) ldz+   isuppz <- Call.newArray1 (2*maximum[1,m])+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 (maximum[1,lrwork])+   iwork <- Call.newArray1 (maximum[1,liwork])+   evalContT $ do+      jobzPtr <- Call.char jobz+      rangePtr <- Call.char range+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      vlPtr <- Call.float vl+      vuPtr <- Call.float vu+      ilPtr <- Call.cint il+      iuPtr <- Call.cint iu+      abstolPtr <- Call.float abstol+      mPtr <- Call.alloca+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      isuppzPtr <- Call.ioarray isuppz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      lrworkPtr <- Call.cint lrwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      infoPtr <- Call.alloca+      liftIO $ FFI.heevr jobzPtr rangePtr uploPtr nPtr aPtr ldaPtr vlPtr vuPtr ilPtr iuPtr abstolPtr mPtr wPtr zPtr ldzPtr isuppzPtr workPtr lworkPtr rworkPtr lrworkPtr iworkPtr liworkPtr infoPtr+      liftIO $ pure (,,,,)+         <*> fmap fromIntegral (peek mPtr)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> Call.freezeArray isuppz+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cheevx.f>+heevx ::+   Char {- ^ jobz -} ->+   Char {- ^ range -} ->+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Float {- ^ vl -} ->+   Float {- ^ vu -} ->+   Int {- ^ il -} ->+   Int {- ^ iu -} ->+   Float {- ^ abstol -} ->+   Int {- ^ m -} ->+   Int {- ^ ldz -} ->+   Int {- ^ lwork -} ->+   IO (Int, Array ZeroInt Float, Array (ZeroInt,ZeroInt) (Complex Float), Array ZeroInt CInt, Int)+heevx jobz range uplo a vl vu il iu abstol m ldz lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   w <- Call.newArray1 n+   z <- Call.newArray2 (maximum[1,m]) ldz+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 (7*n)+   iwork <- Call.newArray1 (5*n)+   ifail <- Call.newArray1 n+   evalContT $ do+      jobzPtr <- Call.char jobz+      rangePtr <- Call.char range+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      vlPtr <- Call.float vl+      vuPtr <- Call.float vu+      ilPtr <- Call.cint il+      iuPtr <- Call.cint iu+      abstolPtr <- Call.float abstol+      mPtr <- Call.alloca+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      iworkPtr <- Call.ioarray iwork+      ifailPtr <- Call.ioarray ifail+      infoPtr <- Call.alloca+      liftIO $ FFI.heevx jobzPtr rangePtr uploPtr nPtr aPtr ldaPtr vlPtr vuPtr ilPtr iuPtr abstolPtr mPtr wPtr zPtr ldzPtr workPtr lworkPtr rworkPtr iworkPtr ifailPtr infoPtr+      liftIO $ pure (,,,,)+         <*> fmap fromIntegral (peek mPtr)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> Call.freezeArray ifail+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chegs2.f>+hegs2 ::+   Int {- ^ itype -} ->+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   IO (Int)+hegs2 itype uplo a b = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   Call.assert "hegs2: n == bDim0" (n == bDim0)+   evalContT $ do+      itypePtr <- Call.cint itype+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.hegs2 itypePtr uploPtr nPtr aPtr ldaPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chegst.f>+hegst ::+   Int {- ^ itype -} ->+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   IO (Int)+hegst itype uplo a b = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   Call.assert "hegst: n == bDim0" (n == bDim0)+   evalContT $ do+      itypePtr <- Call.cint itype+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.hegst itypePtr uploPtr nPtr aPtr ldaPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chegv.f>+hegv ::+   Int {- ^ itype -} ->+   Char {- ^ jobz -} ->+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Float, Int)+hegv itype jobz uplo a b lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   Call.assert "hegv: n == bDim0" (n == bDim0)+   w <- Call.newArray1 n+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 (maximum[1,3*n-2])+   evalContT $ do+      itypePtr <- Call.cint itype+      jobzPtr <- Call.char jobz+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      wPtr <- Call.ioarray w+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.hegv itypePtr jobzPtr uploPtr nPtr aPtr ldaPtr bPtr ldbPtr wPtr workPtr lworkPtr rworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray w+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chegvd.f>+hegvd ::+   Int {- ^ itype -} ->+   Char {- ^ jobz -} ->+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   Int {- ^ lwork -} ->+   Int {- ^ lrwork -} ->+   Int {- ^ liwork -} ->+   IO (Array ZeroInt Float, Int)+hegvd itype jobz uplo a b lwork lrwork liwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   Call.assert "hegvd: n == bDim0" (n == bDim0)+   w <- Call.newArray1 n+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 (maximum[1,lrwork])+   iwork <- Call.newArray1 (maximum[1,liwork])+   evalContT $ do+      itypePtr <- Call.cint itype+      jobzPtr <- Call.char jobz+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      wPtr <- Call.ioarray w+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      lrworkPtr <- Call.cint lrwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      infoPtr <- Call.alloca+      liftIO $ FFI.hegvd itypePtr jobzPtr uploPtr nPtr aPtr ldaPtr bPtr ldbPtr wPtr workPtr lworkPtr rworkPtr lrworkPtr iworkPtr liworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray w+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chegvx.f>+hegvx ::+   Int {- ^ itype -} ->+   Char {- ^ jobz -} ->+   Char {- ^ range -} ->+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   Float {- ^ vl -} ->+   Float {- ^ vu -} ->+   Int {- ^ il -} ->+   Int {- ^ iu -} ->+   Float {- ^ abstol -} ->+   Int {- ^ m -} ->+   Int {- ^ ldz -} ->+   Int {- ^ lwork -} ->+   IO (Int, Array ZeroInt Float, Array (ZeroInt,ZeroInt) (Complex Float), Array ZeroInt CInt, Int)+hegvx itype jobz range uplo a b vl vu il iu abstol m ldz lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   Call.assert "hegvx: n == bDim0" (n == bDim0)+   w <- Call.newArray1 n+   z <- Call.newArray2 (maximum[1,m]) ldz+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 (7*n)+   iwork <- Call.newArray1 (5*n)+   ifail <- Call.newArray1 n+   evalContT $ do+      itypePtr <- Call.cint itype+      jobzPtr <- Call.char jobz+      rangePtr <- Call.char range+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      vlPtr <- Call.float vl+      vuPtr <- Call.float vu+      ilPtr <- Call.cint il+      iuPtr <- Call.cint iu+      abstolPtr <- Call.float abstol+      mPtr <- Call.alloca+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      iworkPtr <- Call.ioarray iwork+      ifailPtr <- Call.ioarray ifail+      infoPtr <- Call.alloca+      liftIO $ FFI.hegvx itypePtr jobzPtr rangePtr uploPtr nPtr aPtr ldaPtr bPtr ldbPtr vlPtr vuPtr ilPtr iuPtr abstolPtr mPtr wPtr zPtr ldzPtr workPtr lworkPtr rworkPtr iworkPtr ifailPtr infoPtr+      liftIO $ pure (,,,,)+         <*> fmap fromIntegral (peek mPtr)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> Call.freezeArray ifail+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cherfs.f>+herfs ::+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ af -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ x -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Int)+herfs uplo a af ipiv b x = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (afDim0,afDim1) = Call.sizes2 $ Array.shape af+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (xDim0,xDim1) = Call.sizes2 $ MutArray.shape x+   let n = aDim0+   let lda = aDim1+   let ldaf = afDim1+   let nrhs = bDim0+   let ldb = bDim1+   let ldx = xDim1+   Call.assert "herfs: n == afDim0" (n == afDim0)+   Call.assert "herfs: n == ipivDim0" (n == ipivDim0)+   Call.assert "herfs: nrhs == xDim0" (nrhs == xDim0)+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      afPtr <- Call.array af+      ldafPtr <- Call.cint ldaf+      ipivPtr <- Call.array ipiv+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.herfs uploPtr nPtr nrhsPtr aPtr ldaPtr afPtr ldafPtr ipivPtr bPtr ldbPtr xPtr ldxPtr ferrPtr berrPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chesv.f>+hesv ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt CInt, Int)+hesv uplo a b lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   ipiv <- Call.newArray1 n+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.ioarray ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.hesv uploPtr nPtr nrhsPtr aPtr ldaPtr ipivPtr bPtr ldbPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chesvx.f>+hesvx ::+   Char {- ^ fact -} ->+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ af -} ->+   IOArray ZeroInt CInt {- ^ ipiv -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   Int {- ^ ldx -} ->+   Int {- ^ lwork -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Float), Float, Array ZeroInt Float, Array ZeroInt Float, Int)+hesvx fact uplo a af ipiv b ldx lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (afDim0,afDim1) = Call.sizes2 $ MutArray.shape af+   let ipivDim0 = Call.sizes1 $ MutArray.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let n = aDim0+   let lda = aDim1+   let ldaf = afDim1+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "hesvx: n == afDim0" (n == afDim0)+   Call.assert "hesvx: n == ipivDim0" (n == ipivDim0)+   x <- Call.newArray2 nrhs ldx+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 n+   evalContT $ do+      factPtr <- Call.char fact+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      afPtr <- Call.ioarray af+      ldafPtr <- Call.cint ldaf+      ipivPtr <- Call.ioarray ipiv+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      rcondPtr <- Call.alloca+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.hesvx factPtr uploPtr nPtr nrhsPtr aPtr ldaPtr afPtr ldafPtr ipivPtr bPtr ldbPtr xPtr ldxPtr rcondPtr ferrPtr berrPtr workPtr lworkPtr rworkPtr infoPtr+      liftIO $ pure (,,,,)+         <*> Call.freezeArray x+         <*> peek rcondPtr+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cheswapr.f>+heswapr ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Int {- ^ i1 -} ->+   Int {- ^ i2 -} ->+   IO ()+heswapr uplo a i1 i2 = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      i1Ptr <- Call.cint i1+      i2Ptr <- Call.cint i2+      liftIO $ FFI.heswapr uploPtr nPtr aPtr ldaPtr i1Ptr i2Ptr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chetd2.f>+hetd2 ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt (Complex Float), Int)+hetd2 uplo a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   d <- Call.newArray1 n+   e <- Call.newArray1 (n-1)+   tau <- Call.newArray1 (n-1)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      tauPtr <- Call.ioarray tau+      infoPtr <- Call.alloca+      liftIO $ FFI.hetd2 uploPtr nPtr aPtr ldaPtr dPtr ePtr tauPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray d+         <*> Call.freezeArray e+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chetf2.f>+hetf2 ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IO (Array ZeroInt CInt, Int)+hetf2 uplo a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   ipiv <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.ioarray ipiv+      infoPtr <- Call.alloca+      liftIO $ FFI.hetf2 uploPtr nPtr aPtr ldaPtr ipivPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chetrd.f>+hetrd ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt (Complex Float), Int)+hetrd uplo a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   d <- Call.newArray1 n+   e <- Call.newArray1 (n-1)+   tau <- Call.newArray1 (n-1)+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.hetrd uploPtr nPtr aPtr ldaPtr dPtr ePtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray d+         <*> Call.freezeArray e+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chetrf.f>+hetrf ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt CInt, Int)+hetrf uplo a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   ipiv <- Call.newArray1 n+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.ioarray ipiv+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.hetrf uploPtr nPtr aPtr ldaPtr ipivPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chetri.f>+hetri ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   IO (Int)+hetri uplo a ipiv = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = aDim0+   let lda = aDim1+   Call.assert "hetri: n == ipivDim0" (n == ipivDim0)+   work <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.array ipiv+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.hetri uploPtr nPtr aPtr ldaPtr ipivPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chetri2.f>+hetri2 ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Int {- ^ nb -} ->+   Int {- ^ lwork -} ->+   IO (Int)+hetri2 uplo a ipiv nb lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = aDim0+   let lda = aDim1+   Call.assert "hetri2: n == ipivDim0" (n == ipivDim0)+   work <- Call.newArray1 (n+nb+1)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.array ipiv+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.hetri2 uploPtr nPtr aPtr ldaPtr ipivPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chetri2x.f>+hetri2x ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Int {- ^ nb -} ->+   IO (Int)+hetri2x uplo a ipiv nb = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = aDim0+   let lda = aDim1+   Call.assert "hetri2x: n == ipivDim0" (n == ipivDim0)+   work <- Call.newArray2 (nb+3) (n+nb+1)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.array ipiv+      workPtr <- Call.ioarray work+      nbPtr <- Call.cint nb+      infoPtr <- Call.alloca+      liftIO $ FFI.hetri2x uploPtr nPtr aPtr ldaPtr ipivPtr workPtr nbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chetrs.f>+hetrs ::+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   IO (Int)+hetrs uplo a ipiv b = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "hetrs: n == ipivDim0" (n == ipivDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.array ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.hetrs uploPtr nPtr nrhsPtr aPtr ldaPtr ipivPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chetrs2.f>+hetrs2 ::+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   IO (Int)+hetrs2 uplo a ipiv b = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "hetrs2: n == ipivDim0" (n == ipivDim0)+   work <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.array ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.hetrs2 uploPtr nPtr nrhsPtr aPtr ldaPtr ipivPtr bPtr ldbPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chfrk.f>+hfrk ::+   Char {- ^ transr -} ->+   Char {- ^ uplo -} ->+   Char {- ^ trans -} ->+   Int {- ^ n -} ->+   Int {- ^ k -} ->+   Float {- ^ alpha -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Float {- ^ beta -} ->+   IOArray ZeroInt (Complex Float) {- ^ c -} ->+   IO ()+hfrk transr uplo trans n k alpha a beta c = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let cDim0 = Call.sizes1 $ MutArray.shape c+   let _ka = aDim0+   let lda = aDim1+   Call.assert "hfrk: n*(n+1)`div`2 == cDim0" (n*(n+1)`div`2 == cDim0)+   evalContT $ do+      transrPtr <- Call.char transr+      uploPtr <- Call.char uplo+      transPtr <- Call.char trans+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      alphaPtr <- Call.float alpha+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      betaPtr <- Call.float beta+      cPtr <- Call.ioarray c+      liftIO $ FFI.hfrk transrPtr uploPtr transPtr nPtr kPtr alphaPtr aPtr ldaPtr betaPtr cPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chgeqz.f>+hgeqz ::+   Char {- ^ job -} ->+   Char {- ^ compq -} ->+   Char {- ^ compz -} ->+   Int {- ^ ilo -} ->+   Int {- ^ ihi -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ h -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ t -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ q -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ z -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)+hgeqz job compq compz ilo ihi h t q z lwork = do+   let (hDim0,hDim1) = Call.sizes2 $ MutArray.shape h+   let (tDim0,tDim1) = Call.sizes2 $ MutArray.shape t+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = hDim0+   let ldh = hDim1+   let ldt = tDim1+   let ldq = qDim1+   let ldz = zDim1+   Call.assert "hgeqz: n == tDim0" (n == tDim0)+   Call.assert "hgeqz: n == qDim0" (n == qDim0)+   Call.assert "hgeqz: n == zDim0" (n == zDim0)+   alpha <- Call.newArray1 n+   beta <- Call.newArray1 n+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 n+   evalContT $ do+      jobPtr <- Call.char job+      compqPtr <- Call.char compq+      compzPtr <- Call.char compz+      nPtr <- Call.cint n+      iloPtr <- Call.cint ilo+      ihiPtr <- Call.cint ihi+      hPtr <- Call.ioarray h+      ldhPtr <- Call.cint ldh+      tPtr <- Call.ioarray t+      ldtPtr <- Call.cint ldt+      alphaPtr <- Call.ioarray alpha+      betaPtr <- Call.ioarray beta+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.hgeqz jobPtr compqPtr compzPtr nPtr iloPtr ihiPtr hPtr ldhPtr tPtr ldtPtr alphaPtr betaPtr qPtr ldqPtr zPtr ldzPtr workPtr lworkPtr rworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray alpha+         <*> Call.freezeArray beta+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chpcon.f>+hpcon ::+   Char {- ^ uplo -} ->+   Array ZeroInt (Complex Float) {- ^ ap -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Float {- ^ anorm -} ->+   IO (Float, Int)+hpcon uplo ap ipiv anorm = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = ipivDim0+   Call.assert "hpcon: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   work <- Call.newArray1 (2*n)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.array ap+      ipivPtr <- Call.array ipiv+      anormPtr <- Call.float anorm+      rcondPtr <- Call.alloca+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.hpcon uploPtr nPtr apPtr ipivPtr anormPtr rcondPtr workPtr infoPtr+      liftIO $ pure (,)+         <*> peek rcondPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chpev.f>+hpev ::+   Char {- ^ jobz -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt (Complex Float) {- ^ ap -} ->+   Int {- ^ ldz -} ->+   IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) (Complex Float), Int)+hpev jobz uplo n ap ldz = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   Call.assert "hpev: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   w <- Call.newArray1 n+   z <- Call.newArray2 n ldz+   work <- Call.newArray1 (maximum[1,2*n-1])+   rwork <- Call.newArray1 (maximum[1,3*n-2])+   evalContT $ do+      jobzPtr <- Call.char jobz+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.hpev jobzPtr uploPtr nPtr apPtr wPtr zPtr ldzPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chpevd.f>+hpevd ::+   Char {- ^ jobz -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt (Complex Float) {- ^ ap -} ->+   Int {- ^ ldz -} ->+   Int {- ^ lwork -} ->+   Int {- ^ lrwork -} ->+   Int {- ^ liwork -} ->+   IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) (Complex Float), Int)+hpevd jobz uplo n ap ldz lwork lrwork liwork = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   Call.assert "hpevd: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   w <- Call.newArray1 n+   z <- Call.newArray2 n ldz+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 (maximum[1,lrwork])+   iwork <- Call.newArray1 (maximum[1,liwork])+   evalContT $ do+      jobzPtr <- Call.char jobz+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      lrworkPtr <- Call.cint lrwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      infoPtr <- Call.alloca+      liftIO $ FFI.hpevd jobzPtr uploPtr nPtr apPtr wPtr zPtr ldzPtr workPtr lworkPtr rworkPtr lrworkPtr iworkPtr liworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chpevx.f>+hpevx ::+   Char {- ^ jobz -} ->+   Char {- ^ range -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt (Complex Float) {- ^ ap -} ->+   Float {- ^ vl -} ->+   Float {- ^ vu -} ->+   Int {- ^ il -} ->+   Int {- ^ iu -} ->+   Float {- ^ abstol -} ->+   Int {- ^ m -} ->+   Int {- ^ ldz -} ->+   IO (Int, Array ZeroInt Float, Array (ZeroInt,ZeroInt) (Complex Float), Array ZeroInt CInt, Int)+hpevx jobz range uplo n ap vl vu il iu abstol m ldz = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   Call.assert "hpevx: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   w <- Call.newArray1 n+   z <- Call.newArray2 (maximum[1,m]) ldz+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 (7*n)+   iwork <- Call.newArray1 (5*n)+   ifail <- Call.newArray1 n+   evalContT $ do+      jobzPtr <- Call.char jobz+      rangePtr <- Call.char range+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      vlPtr <- Call.float vl+      vuPtr <- Call.float vu+      ilPtr <- Call.cint il+      iuPtr <- Call.cint iu+      abstolPtr <- Call.float abstol+      mPtr <- Call.alloca+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      iworkPtr <- Call.ioarray iwork+      ifailPtr <- Call.ioarray ifail+      infoPtr <- Call.alloca+      liftIO $ FFI.hpevx jobzPtr rangePtr uploPtr nPtr apPtr vlPtr vuPtr ilPtr iuPtr abstolPtr mPtr wPtr zPtr ldzPtr workPtr rworkPtr iworkPtr ifailPtr infoPtr+      liftIO $ pure (,,,,)+         <*> fmap fromIntegral (peek mPtr)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> Call.freezeArray ifail+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chpgst.f>+hpgst ::+   Int {- ^ itype -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt (Complex Float) {- ^ ap -} ->+   Array ZeroInt (Complex Float) {- ^ bp -} ->+   IO (Int)+hpgst itype uplo n ap bp = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   let bpDim0 = Call.sizes1 $ Array.shape bp+   Call.assert "hpgst: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   Call.assert "hpgst: n*(n+1)`div`2 == bpDim0" (n*(n+1)`div`2 == bpDim0)+   evalContT $ do+      itypePtr <- Call.cint itype+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      bpPtr <- Call.array bp+      infoPtr <- Call.alloca+      liftIO $ FFI.hpgst itypePtr uploPtr nPtr apPtr bpPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chpgv.f>+hpgv ::+   Int {- ^ itype -} ->+   Char {- ^ jobz -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt (Complex Float) {- ^ ap -} ->+   IOArray ZeroInt (Complex Float) {- ^ bp -} ->+   Int {- ^ ldz -} ->+   IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) (Complex Float), Int)+hpgv itype jobz uplo n ap bp ldz = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   let bpDim0 = Call.sizes1 $ MutArray.shape bp+   Call.assert "hpgv: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   Call.assert "hpgv: n*(n+1)`div`2 == bpDim0" (n*(n+1)`div`2 == bpDim0)+   w <- Call.newArray1 n+   z <- Call.newArray2 n ldz+   work <- Call.newArray1 (maximum[1,2*n-1])+   rwork <- Call.newArray1 (maximum[1,3*n-2])+   evalContT $ do+      itypePtr <- Call.cint itype+      jobzPtr <- Call.char jobz+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      bpPtr <- Call.ioarray bp+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.hpgv itypePtr jobzPtr uploPtr nPtr apPtr bpPtr wPtr zPtr ldzPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chpgvd.f>+hpgvd ::+   Int {- ^ itype -} ->+   Char {- ^ jobz -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt (Complex Float) {- ^ ap -} ->+   IOArray ZeroInt (Complex Float) {- ^ bp -} ->+   Int {- ^ ldz -} ->+   Int {- ^ lwork -} ->+   Int {- ^ lrwork -} ->+   Int {- ^ liwork -} ->+   IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) (Complex Float), Int)+hpgvd itype jobz uplo n ap bp ldz lwork lrwork liwork = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   let bpDim0 = Call.sizes1 $ MutArray.shape bp+   Call.assert "hpgvd: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   Call.assert "hpgvd: n*(n+1)`div`2 == bpDim0" (n*(n+1)`div`2 == bpDim0)+   w <- Call.newArray1 n+   z <- Call.newArray2 n ldz+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 (maximum[1,lrwork])+   iwork <- Call.newArray1 (maximum[1,liwork])+   evalContT $ do+      itypePtr <- Call.cint itype+      jobzPtr <- Call.char jobz+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      bpPtr <- Call.ioarray bp+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      lrworkPtr <- Call.cint lrwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      infoPtr <- Call.alloca+      liftIO $ FFI.hpgvd itypePtr jobzPtr uploPtr nPtr apPtr bpPtr wPtr zPtr ldzPtr workPtr lworkPtr rworkPtr lrworkPtr iworkPtr liworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chpgvx.f>+hpgvx ::+   Int {- ^ itype -} ->+   Char {- ^ jobz -} ->+   Char {- ^ range -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt (Complex Float) {- ^ ap -} ->+   IOArray ZeroInt (Complex Float) {- ^ bp -} ->+   Float {- ^ vl -} ->+   Float {- ^ vu -} ->+   Int {- ^ il -} ->+   Int {- ^ iu -} ->+   Float {- ^ abstol -} ->+   Int {- ^ ldz -} ->+   IO (Int, Array ZeroInt Float, Array (ZeroInt,ZeroInt) (Complex Float), Array ZeroInt CInt, Int)+hpgvx itype jobz range uplo n ap bp vl vu il iu abstol ldz = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   let bpDim0 = Call.sizes1 $ MutArray.shape bp+   Call.assert "hpgvx: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   Call.assert "hpgvx: n*(n+1)`div`2 == bpDim0" (n*(n+1)`div`2 == bpDim0)+   w <- Call.newArray1 n+   z <- Call.newArray2 n ldz+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 (7*n)+   iwork <- Call.newArray1 (5*n)+   ifail <- Call.newArray1 n+   evalContT $ do+      itypePtr <- Call.cint itype+      jobzPtr <- Call.char jobz+      rangePtr <- Call.char range+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      bpPtr <- Call.ioarray bp+      vlPtr <- Call.float vl+      vuPtr <- Call.float vu+      ilPtr <- Call.cint il+      iuPtr <- Call.cint iu+      abstolPtr <- Call.float abstol+      mPtr <- Call.alloca+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      iworkPtr <- Call.ioarray iwork+      ifailPtr <- Call.ioarray ifail+      infoPtr <- Call.alloca+      liftIO $ FFI.hpgvx itypePtr jobzPtr rangePtr uploPtr nPtr apPtr bpPtr vlPtr vuPtr ilPtr iuPtr abstolPtr mPtr wPtr zPtr ldzPtr workPtr rworkPtr iworkPtr ifailPtr infoPtr+      liftIO $ pure (,,,,)+         <*> fmap fromIntegral (peek mPtr)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> Call.freezeArray ifail+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chprfs.f>+hprfs ::+   Char {- ^ uplo -} ->+   Array ZeroInt (Complex Float) {- ^ ap -} ->+   Array ZeroInt (Complex Float) {- ^ afp -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ x -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Int)+hprfs uplo ap afp ipiv b x = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let afpDim0 = Call.sizes1 $ Array.shape afp+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (xDim0,xDim1) = Call.sizes2 $ MutArray.shape x+   let n = ipivDim0+   let nrhs = bDim0+   let ldb = bDim1+   let ldx = xDim1+   Call.assert "hprfs: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   Call.assert "hprfs: n*(n+1)`div`2 == afpDim0" (n*(n+1)`div`2 == afpDim0)+   Call.assert "hprfs: nrhs == xDim0" (nrhs == xDim0)+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      apPtr <- Call.array ap+      afpPtr <- Call.array afp+      ipivPtr <- Call.array ipiv+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.hprfs uploPtr nPtr nrhsPtr apPtr afpPtr ipivPtr bPtr ldbPtr xPtr ldxPtr ferrPtr berrPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chpsv.f>+hpsv ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt (Complex Float) {- ^ ap -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   IO (Array ZeroInt CInt, Int)+hpsv uplo n ap b = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "hpsv: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   ipiv <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      apPtr <- Call.ioarray ap+      ipivPtr <- Call.ioarray ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.hpsv uploPtr nPtr nrhsPtr apPtr ipivPtr bPtr ldbPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chpsvx.f>+hpsvx ::+   Char {- ^ fact -} ->+   Char {- ^ uplo -} ->+   Array ZeroInt (Complex Float) {- ^ ap -} ->+   IOArray ZeroInt (Complex Float) {- ^ afp -} ->+   IOArray ZeroInt CInt {- ^ ipiv -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   Int {- ^ ldx -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Float), Float, Array ZeroInt Float, Array ZeroInt Float, Int)+hpsvx fact uplo ap afp ipiv b ldx = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let afpDim0 = Call.sizes1 $ MutArray.shape afp+   let ipivDim0 = Call.sizes1 $ MutArray.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let n = ipivDim0+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "hpsvx: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   Call.assert "hpsvx: n*(n+1)`div`2 == afpDim0" (n*(n+1)`div`2 == afpDim0)+   x <- Call.newArray2 nrhs ldx+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      factPtr <- Call.char fact+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      apPtr <- Call.array ap+      afpPtr <- Call.ioarray afp+      ipivPtr <- Call.ioarray ipiv+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      rcondPtr <- Call.alloca+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.hpsvx factPtr uploPtr nPtr nrhsPtr apPtr afpPtr ipivPtr bPtr ldbPtr xPtr ldxPtr rcondPtr ferrPtr berrPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,,,)+         <*> Call.freezeArray x+         <*> peek rcondPtr+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chptrd.f>+hptrd ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt (Complex Float) {- ^ ap -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt (Complex Float), Int)+hptrd uplo n ap = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   Call.assert "hptrd: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   d <- Call.newArray1 n+   e <- Call.newArray1 (n-1)+   tau <- Call.newArray1 (n-1)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      tauPtr <- Call.ioarray tau+      infoPtr <- Call.alloca+      liftIO $ FFI.hptrd uploPtr nPtr apPtr dPtr ePtr tauPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray d+         <*> Call.freezeArray e+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chptrf.f>+hptrf ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt (Complex Float) {- ^ ap -} ->+   IO (Array ZeroInt CInt, Int)+hptrf uplo n ap = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   Call.assert "hptrf: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   ipiv <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      ipivPtr <- Call.ioarray ipiv+      infoPtr <- Call.alloca+      liftIO $ FFI.hptrf uploPtr nPtr apPtr ipivPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chptri.f>+hptri ::+   Char {- ^ uplo -} ->+   IOArray ZeroInt (Complex Float) {- ^ ap -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   IO (Int)+hptri uplo ap ipiv = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = ipivDim0+   Call.assert "hptri: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   work <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      ipivPtr <- Call.array ipiv+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.hptri uploPtr nPtr apPtr ipivPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chptrs.f>+hptrs ::+   Char {- ^ uplo -} ->+   Array ZeroInt (Complex Float) {- ^ ap -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   IO (Int)+hptrs uplo ap ipiv b = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = ipivDim0+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "hptrs: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      apPtr <- Call.array ap+      ipivPtr <- Call.array ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.hptrs uploPtr nPtr nrhsPtr apPtr ipivPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chsein.f>+hsein ::+   Char {- ^ side -} ->+   Char {- ^ eigsrc -} ->+   Char {- ^ initv -} ->+   Array ZeroInt Bool {- ^ select -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ h -} ->+   IOArray ZeroInt (Complex Float) {- ^ w -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ vl -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ vr -} ->+   IO (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)+hsein side eigsrc initv select h w vl vr = do+   let selectDim0 = Call.sizes1 $ Array.shape select+   let (hDim0,hDim1) = Call.sizes2 $ Array.shape h+   let wDim0 = Call.sizes1 $ MutArray.shape w+   let (vlDim0,vlDim1) = Call.sizes2 $ MutArray.shape vl+   let (vrDim0,vrDim1) = Call.sizes2 $ MutArray.shape vr+   let n = selectDim0+   let ldh = hDim1+   let mm = vlDim0+   let ldvl = vlDim1+   let ldvr = vrDim1+   Call.assert "hsein: n == hDim0" (n == hDim0)+   Call.assert "hsein: n == wDim0" (n == wDim0)+   Call.assert "hsein: mm == vrDim0" (mm == vrDim0)+   work <- Call.newArray1 (n*n)+   rwork <- Call.newArray1 n+   ifaill <- Call.newArray1 mm+   ifailr <- Call.newArray1 mm+   evalContT $ do+      sidePtr <- Call.char side+      eigsrcPtr <- Call.char eigsrc+      initvPtr <- Call.char initv+      selectPtr <- Call.array select+      nPtr <- Call.cint n+      hPtr <- Call.array h+      ldhPtr <- Call.cint ldh+      wPtr <- Call.ioarray w+      vlPtr <- Call.ioarray vl+      ldvlPtr <- Call.cint ldvl+      vrPtr <- Call.ioarray vr+      ldvrPtr <- Call.cint ldvr+      mmPtr <- Call.cint mm+      mPtr <- Call.alloca+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      ifaillPtr <- Call.ioarray ifaill+      ifailrPtr <- Call.ioarray ifailr+      infoPtr <- Call.alloca+      liftIO $ FFI.hsein sidePtr eigsrcPtr initvPtr selectPtr nPtr hPtr ldhPtr wPtr vlPtr ldvlPtr vrPtr ldvrPtr mmPtr mPtr workPtr rworkPtr ifaillPtr ifailrPtr infoPtr+      liftIO $ pure (,,,)+         <*> fmap fromIntegral (peek mPtr)+         <*> Call.freezeArray ifaill+         <*> Call.freezeArray ifailr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chseqr.f>+hseqr ::+   Char {- ^ job -} ->+   Char {- ^ compz -} ->+   Int {- ^ ilo -} ->+   Int {- ^ ihi -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ h -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ z -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt (Complex Float), Int)+hseqr job compz ilo ihi h z lwork = do+   let (hDim0,hDim1) = Call.sizes2 $ MutArray.shape h+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = hDim0+   let ldh = hDim1+   let ldz = zDim1+   Call.assert "hseqr: n == zDim0" (n == zDim0)+   w <- Call.newArray1 n+   work <- Call.newArray1 lwork+   evalContT $ do+      jobPtr <- Call.char job+      compzPtr <- Call.char compz+      nPtr <- Call.cint n+      iloPtr <- Call.cint ilo+      ihiPtr <- Call.cint ihi+      hPtr <- Call.ioarray h+      ldhPtr <- Call.cint ldh+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.hseqr jobPtr compzPtr nPtr iloPtr ihiPtr hPtr ldhPtr wPtr zPtr ldzPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray w+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ilaclc.f>+ilalc ::+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IO CInt+ilalc m a = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      liftIO $ FFI.ilalc mPtr nPtr aPtr ldaPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ilaclr.f>+ilalr ::+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IO CInt+ilalr m a = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      liftIO $ FFI.ilalr mPtr nPtr aPtr ldaPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/icmax1.f>+imax1 ::+   Array ZeroInt (Complex Float) {- ^ cx -} ->+   Int {- ^ incx -} ->+   IO CInt+imax1 cx incx = do+   let cxDim0 = Call.sizes1 $ Array.shape cx+   let n = cxDim0+   evalContT $ do+      nPtr <- Call.cint n+      cxPtr <- Call.array cx+      incxPtr <- Call.cint incx+      liftIO $ FFI.imax1 nPtr cxPtr incxPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clabrd.f>+labrd ::+   Int {- ^ m -} ->+   Int {- ^ nb -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Int {- ^ ldx -} ->+   Int {- ^ ldy -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float))+labrd m nb a ldx ldy = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   d <- Call.newArray1 nb+   e <- Call.newArray1 nb+   tauq <- Call.newArray1 nb+   taup <- Call.newArray1 nb+   x <- Call.newArray2 nb ldx+   y <- Call.newArray2 nb ldy+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      nbPtr <- Call.cint nb+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      tauqPtr <- Call.ioarray tauq+      taupPtr <- Call.ioarray taup+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      yPtr <- Call.ioarray y+      ldyPtr <- Call.cint ldy+      liftIO $ FFI.labrd mPtr nPtr nbPtr aPtr ldaPtr dPtr ePtr tauqPtr taupPtr xPtr ldxPtr yPtr ldyPtr+      liftIO $ pure (,,,,,)+         <*> Call.freezeArray d+         <*> Call.freezeArray e+         <*> Call.freezeArray tauq+         <*> Call.freezeArray taup+         <*> Call.freezeArray x+         <*> Call.freezeArray y++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clacgv.f>+lacgv ::+   Int {- ^ n -} ->+   IOArray ZeroInt (Complex Float) {- ^ x -} ->+   Int {- ^ incx -} ->+   IO ()+lacgv n x incx = do+   let xDim0 = Call.sizes1 $ MutArray.shape x+   let _xSize = xDim0+   evalContT $ do+      nPtr <- Call.cint n+      xPtr <- Call.ioarray x+      incxPtr <- Call.cint incx+      liftIO $ FFI.lacgv nPtr xPtr incxPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clacn2.f>+lacn2 ::+   IOArray ZeroInt (Complex Float) {- ^ x -} ->+   Float {- ^ est -} ->+   Int {- ^ kase -} ->+   IOArray ZeroInt CInt {- ^ isave -} ->+   IO (Array ZeroInt (Complex Float), Float, Int)+lacn2 x est kase isave = do+   let xDim0 = Call.sizes1 $ MutArray.shape x+   let isaveDim0 = Call.sizes1 $ MutArray.shape isave+   let n = xDim0+   Call.assert "lacn2: 3 == isaveDim0" (3 == isaveDim0)+   v <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      vPtr <- Call.ioarray v+      xPtr <- Call.ioarray x+      estPtr <- Call.float est+      kasePtr <- Call.cint kase+      isavePtr <- Call.ioarray isave+      liftIO $ FFI.lacn2 nPtr vPtr xPtr estPtr kasePtr isavePtr+      liftIO $ pure (,,)+         <*> Call.freezeArray v+         <*> peek estPtr+         <*> fmap fromIntegral (peek kasePtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clacon.f>+lacon ::+   IOArray ZeroInt (Complex Float) {- ^ x -} ->+   Float {- ^ est -} ->+   Int {- ^ kase -} ->+   IO (Array ZeroInt (Complex Float), Float, Int)+lacon x est kase = do+   let xDim0 = Call.sizes1 $ MutArray.shape x+   let n = xDim0+   v <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      vPtr <- Call.ioarray v+      xPtr <- Call.ioarray x+      estPtr <- Call.float est+      kasePtr <- Call.cint kase+      liftIO $ FFI.lacon nPtr vPtr xPtr estPtr kasePtr+      liftIO $ pure (,,)+         <*> Call.freezeArray v+         <*> peek estPtr+         <*> fmap fromIntegral (peek kasePtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clacp2.f>+lacp2 ::+   Char {- ^ uplo -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Int {- ^ ldb -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Float))+lacp2 uplo m a ldb = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   b <- Call.newArray2 n ldb+   evalContT $ do+      uploPtr <- Call.char uplo+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      liftIO $ FFI.lacp2 uploPtr mPtr nPtr aPtr ldaPtr bPtr ldbPtr+      liftIO $ Call.freezeArray b++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clacpy.f>+lacpy ::+   Char {- ^ uplo -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Int {- ^ ldb -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Float))+lacpy uplo m a ldb = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   b <- Call.newArray2 n ldb+   evalContT $ do+      uploPtr <- Call.char uplo+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      liftIO $ FFI.lacpy uploPtr mPtr nPtr aPtr ldaPtr bPtr ldbPtr+      liftIO $ Call.freezeArray b++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clacrm.f>+lacrm ::+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ b -} ->+   Int {- ^ ldc -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Float))+lacrm m a b ldc = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   Call.assert "lacrm: n == bDim0" (n == bDim0)+   c <- Call.newArray2 n ldc+   rwork <- Call.newArray1 (2*m*n)+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      rworkPtr <- Call.ioarray rwork+      liftIO $ FFI.lacrm mPtr nPtr aPtr ldaPtr bPtr ldbPtr cPtr ldcPtr rworkPtr+      liftIO $ Call.freezeArray c++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clacrt.f>+lacrt ::+   IOArray ZeroInt (Complex Float) {- ^ cx -} ->+   Int {- ^ incx -} ->+   IOArray ZeroInt (Complex Float) {- ^ cy -} ->+   Int {- ^ incy -} ->+   Complex Float {- ^ c -} ->+   Complex Float {- ^ s -} ->+   IO ()+lacrt cx incx cy incy c s = do+   let cxDim0 = Call.sizes1 $ MutArray.shape cx+   let cyDim0 = Call.sizes1 $ MutArray.shape cy+   let n = cxDim0+   Call.assert "lacrt: n == cyDim0" (n == cyDim0)+   evalContT $ do+      nPtr <- Call.cint n+      cxPtr <- Call.ioarray cx+      incxPtr <- Call.cint incx+      cyPtr <- Call.ioarray cy+      incyPtr <- Call.cint incy+      cPtr <- Call.complexFloat c+      sPtr <- Call.complexFloat s+      liftIO $ FFI.lacrt nPtr cxPtr incxPtr cyPtr incyPtr cPtr sPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/claed0.f>+laed0 ::+   Int {- ^ qsiz -} ->+   IOArray ZeroInt Float {- ^ d -} ->+   IOArray ZeroInt Float {- ^ e -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ q -} ->+   Int {- ^ ldqs -} ->+   Int {- ^ rworkSize -} ->+   Int {- ^ iworkSize -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Float), Int)+laed0 qsiz d e q ldqs rworkSize iworkSize = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let n = dDim0+   let ldq = qDim1+   Call.assert "laed0: n-1 == eDim0" (n-1 == eDim0)+   Call.assert "laed0: n == qDim0" (n == qDim0)+   qstore <- Call.newArray2 n ldqs+   rwork <- Call.newArray1 rworkSize+   iwork <- Call.newArray1 iworkSize+   evalContT $ do+      qsizPtr <- Call.cint qsiz+      nPtr <- Call.cint n+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      qstorePtr <- Call.ioarray qstore+      ldqsPtr <- Call.cint ldqs+      rworkPtr <- Call.ioarray rwork+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.laed0 qsizPtr nPtr dPtr ePtr qPtr ldqPtr qstorePtr ldqsPtr rworkPtr iworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray qstore+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/claed7.f>+laed7 ::+   Int {- ^ cutpnt -} ->+   Int {- ^ qsiz -} ->+   Int {- ^ tlvls -} ->+   Int {- ^ curlvl -} ->+   Int {- ^ curpbm -} ->+   IOArray ZeroInt Float {- ^ d -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ q -} ->+   Float {- ^ rho -} ->+   IOArray ZeroInt Float {- ^ qstore -} ->+   IOArray ZeroInt CInt {- ^ qptr -} ->+   Array ZeroInt CInt {- ^ prmptr -} ->+   Array ZeroInt CInt {- ^ perm -} ->+   Array ZeroInt CInt {- ^ givptr -} ->+   Array (ZeroInt,ZeroInt) CInt {- ^ givcol -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ givnum -} ->+   Int {- ^ rworkSize -} ->+   IO (Array ZeroInt CInt, Int)+laed7 cutpnt qsiz tlvls curlvl curpbm d q rho qstore qptr prmptr perm givptr givcol givnum rworkSize = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let qstoreDim0 = Call.sizes1 $ MutArray.shape qstore+   let qptrDim0 = Call.sizes1 $ MutArray.shape qptr+   let prmptrDim0 = Call.sizes1 $ Array.shape prmptr+   let permDim0 = Call.sizes1 $ Array.shape perm+   let givptrDim0 = Call.sizes1 $ Array.shape givptr+   let (givcolDim0,givcolDim1) = Call.sizes2 $ Array.shape givcol+   let (givnumDim0,givnumDim1) = Call.sizes2 $ Array.shape givnum+   let n = dDim0+   let ldq = qDim1+   let nlgn = prmptrDim0+   Call.assert "laed7: n == qDim0" (n == qDim0)+   Call.assert "laed7: n^!2+1 == qstoreDim0" (n^!2+1 == qstoreDim0)+   Call.assert "laed7: n+2 == qptrDim0" (n+2 == qptrDim0)+   Call.assert "laed7: nlgn == permDim0" (nlgn == permDim0)+   Call.assert "laed7: nlgn == givptrDim0" (nlgn == givptrDim0)+   Call.assert "laed7: nlgn == givcolDim0" (nlgn == givcolDim0)+   Call.assert "laed7: 2 == givcolDim1" (2 == givcolDim1)+   Call.assert "laed7: nlgn == givnumDim0" (nlgn == givnumDim0)+   Call.assert "laed7: 2 == givnumDim1" (2 == givnumDim1)+   indxq <- Call.newArray1 n+   work <- Call.newArray1 (qsiz*n)+   rwork <- Call.newArray1 rworkSize+   iwork <- Call.newArray1 (4*n)+   evalContT $ do+      nPtr <- Call.cint n+      cutpntPtr <- Call.cint cutpnt+      qsizPtr <- Call.cint qsiz+      tlvlsPtr <- Call.cint tlvls+      curlvlPtr <- Call.cint curlvl+      curpbmPtr <- Call.cint curpbm+      dPtr <- Call.ioarray d+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      rhoPtr <- Call.float rho+      indxqPtr <- Call.ioarray indxq+      qstorePtr <- Call.ioarray qstore+      qptrPtr <- Call.ioarray qptr+      prmptrPtr <- Call.array prmptr+      permPtr <- Call.array perm+      givptrPtr <- Call.array givptr+      givcolPtr <- Call.array givcol+      givnumPtr <- Call.array givnum+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.laed7 nPtr cutpntPtr qsizPtr tlvlsPtr curlvlPtr curpbmPtr dPtr qPtr ldqPtr rhoPtr indxqPtr qstorePtr qptrPtr prmptrPtr permPtr givptrPtr givcolPtr givnumPtr workPtr rworkPtr iworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray indxq+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/claed8.f>+laed8 ::+   Int {- ^ qsiz -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ q -} ->+   IOArray ZeroInt Float {- ^ d -} ->+   Float {- ^ rho -} ->+   Int {- ^ cutpnt -} ->+   Array ZeroInt Float {- ^ z -} ->+   Int {- ^ ldq2 -} ->+   Array ZeroInt CInt {- ^ indxq -} ->+   IO (Int, Float, Array ZeroInt Float, Array (ZeroInt,ZeroInt) (Complex Float), Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int, Array (ZeroInt,ZeroInt) CInt, Array (ZeroInt,ZeroInt) Float, Int)+laed8 qsiz q d rho cutpnt z ldq2 indxq = do+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let zDim0 = Call.sizes1 $ Array.shape z+   let indxqDim0 = Call.sizes1 $ Array.shape indxq+   let n = qDim0+   let ldq = qDim1+   Call.assert "laed8: n == dDim0" (n == dDim0)+   Call.assert "laed8: n == zDim0" (n == zDim0)+   Call.assert "laed8: n == indxqDim0" (n == indxqDim0)+   dlamda <- Call.newArray1 n+   q2 <- Call.newArray2 n ldq2+   w <- Call.newArray1 n+   indxp <- Call.newArray1 n+   indx <- Call.newArray1 n+   perm <- Call.newArray1 n+   givcol <- Call.newArray2 n 2+   givnum <- Call.newArray2 n 2+   evalContT $ do+      kPtr <- Call.alloca+      nPtr <- Call.cint n+      qsizPtr <- Call.cint qsiz+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      dPtr <- Call.ioarray d+      rhoPtr <- Call.float rho+      cutpntPtr <- Call.cint cutpnt+      zPtr <- Call.array z+      dlamdaPtr <- Call.ioarray dlamda+      q2Ptr <- Call.ioarray q2+      ldq2Ptr <- Call.cint ldq2+      wPtr <- Call.ioarray w+      indxpPtr <- Call.ioarray indxp+      indxPtr <- Call.ioarray indx+      indxqPtr <- Call.array indxq+      permPtr <- Call.ioarray perm+      givptrPtr <- Call.alloca+      givcolPtr <- Call.ioarray givcol+      givnumPtr <- Call.ioarray givnum+      infoPtr <- Call.alloca+      liftIO $ FFI.laed8 kPtr nPtr qsizPtr qPtr ldqPtr dPtr rhoPtr cutpntPtr zPtr dlamdaPtr q2Ptr ldq2Ptr wPtr indxpPtr indxPtr indxqPtr permPtr givptrPtr givcolPtr givnumPtr infoPtr+      liftIO $ pure (,,,,,,,,,,,)+         <*> fmap fromIntegral (peek kPtr)+         <*> peek rhoPtr+         <*> Call.freezeArray dlamda+         <*> Call.freezeArray q2+         <*> Call.freezeArray w+         <*> Call.freezeArray indxp+         <*> Call.freezeArray indx+         <*> Call.freezeArray perm+         <*> fmap fromIntegral (peek givptrPtr)+         <*> Call.freezeArray givcol+         <*> Call.freezeArray givnum+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/claein.f>+laein ::+   Bool {- ^ rightv -} ->+   Bool {- ^ noinit -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ h -} ->+   Complex Float {- ^ w -} ->+   IOArray ZeroInt (Complex Float) {- ^ v -} ->+   Int {- ^ ldb -} ->+   Float {- ^ eps3 -} ->+   Float {- ^ smlnum -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Float), Int)+laein rightv noinit h w v ldb eps3 smlnum = do+   let (hDim0,hDim1) = Call.sizes2 $ Array.shape h+   let vDim0 = Call.sizes1 $ MutArray.shape v+   let n = hDim0+   let ldh = hDim1+   Call.assert "laein: n == vDim0" (n == vDim0)+   b <- Call.newArray2 n ldb+   rwork <- Call.newArray1 n+   evalContT $ do+      rightvPtr <- Call.bool rightv+      noinitPtr <- Call.bool noinit+      nPtr <- Call.cint n+      hPtr <- Call.array h+      ldhPtr <- Call.cint ldh+      wPtr <- Call.complexFloat w+      vPtr <- Call.ioarray v+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      rworkPtr <- Call.ioarray rwork+      eps3Ptr <- Call.float eps3+      smlnumPtr <- Call.float smlnum+      infoPtr <- Call.alloca+      liftIO $ FFI.laein rightvPtr noinitPtr nPtr hPtr ldhPtr wPtr vPtr bPtr ldbPtr rworkPtr eps3Ptr smlnumPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray b+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/claesy.f>+laesy ::+   Complex Float {- ^ a -} ->+   Complex Float {- ^ b -} ->+   Complex Float {- ^ c -} ->+   IO (Complex Float, Complex Float, Complex Float, Complex Float, Complex Float)+laesy a b c = do+   evalContT $ do+      aPtr <- Call.complexFloat a+      bPtr <- Call.complexFloat b+      cPtr <- Call.complexFloat c+      rt1Ptr <- Call.alloca+      rt2Ptr <- Call.alloca+      evscalPtr <- Call.alloca+      cs1Ptr <- Call.alloca+      sn1Ptr <- Call.alloca+      liftIO $ FFI.laesy aPtr bPtr cPtr rt1Ptr rt2Ptr evscalPtr cs1Ptr sn1Ptr+      liftIO $ pure (,,,,)+         <*> peek rt1Ptr+         <*> peek rt2Ptr+         <*> peek evscalPtr+         <*> peek cs1Ptr+         <*> peek sn1Ptr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/claev2.f>+laev2 ::+   Complex Float {- ^ a -} ->+   Complex Float {- ^ b -} ->+   Complex Float {- ^ c -} ->+   IO (Float, Float, Float, Complex Float)+laev2 a b c = do+   evalContT $ do+      aPtr <- Call.complexFloat a+      bPtr <- Call.complexFloat b+      cPtr <- Call.complexFloat c+      rt1Ptr <- Call.alloca+      rt2Ptr <- Call.alloca+      cs1Ptr <- Call.alloca+      sn1Ptr <- Call.alloca+      liftIO $ FFI.laev2 aPtr bPtr cPtr rt1Ptr rt2Ptr cs1Ptr sn1Ptr+      liftIO $ pure (,,,)+         <*> peek rt1Ptr+         <*> peek rt2Ptr+         <*> peek cs1Ptr+         <*> peek sn1Ptr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clag2z.f>+lag2z ::+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ sa -} ->+   Int {- ^ lda -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Double), Int)+lag2z m sa lda = do+   let (saDim0,saDim1) = Call.sizes2 $ Array.shape sa+   let n = saDim0+   let ldsa = saDim1+   a <- Call.newArray2 n lda+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      saPtr <- Call.array sa+      ldsaPtr <- Call.cint ldsa+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      infoPtr <- Call.alloca+      liftIO $ FFI.lag2z mPtr nPtr saPtr ldsaPtr aPtr ldaPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray a+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clags2.f>+lags2 ::+   Bool {- ^ upper -} ->+   Float {- ^ a1 -} ->+   Complex Float {- ^ a2 -} ->+   Float {- ^ a3 -} ->+   Float {- ^ b1 -} ->+   Complex Float {- ^ b2 -} ->+   Float {- ^ b3 -} ->+   IO (Float, Complex Float, Float, Complex Float, Float, Complex Float)+lags2 upper a1 a2 a3 b1 b2 b3 = do+   evalContT $ do+      upperPtr <- Call.bool upper+      a1Ptr <- Call.float a1+      a2Ptr <- Call.complexFloat a2+      a3Ptr <- Call.float a3+      b1Ptr <- Call.float b1+      b2Ptr <- Call.complexFloat b2+      b3Ptr <- Call.float b3+      csuPtr <- Call.alloca+      snuPtr <- Call.alloca+      csvPtr <- Call.alloca+      snvPtr <- Call.alloca+      csqPtr <- Call.alloca+      snqPtr <- Call.alloca+      liftIO $ FFI.lags2 upperPtr a1Ptr a2Ptr a3Ptr b1Ptr b2Ptr b3Ptr csuPtr snuPtr csvPtr snvPtr csqPtr snqPtr+      liftIO $ pure (,,,,,)+         <*> peek csuPtr+         <*> peek snuPtr+         <*> peek csvPtr+         <*> peek snvPtr+         <*> peek csqPtr+         <*> peek snqPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clagtm.f>+lagtm ::+   Char {- ^ trans -} ->+   Float {- ^ alpha -} ->+   Array ZeroInt (Complex Float) {- ^ dl -} ->+   Array ZeroInt (Complex Float) {- ^ d -} ->+   Array ZeroInt (Complex Float) {- ^ du -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ x -} ->+   Float {- ^ beta -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   IO ()+lagtm trans alpha dl d du x beta b = do+   let dlDim0 = Call.sizes1 $ Array.shape dl+   let dDim0 = Call.sizes1 $ Array.shape d+   let duDim0 = Call.sizes1 $ Array.shape du+   let (xDim0,xDim1) = Call.sizes2 $ Array.shape x+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = dDim0+   let nrhs = xDim0+   let ldx = xDim1+   let ldb = bDim1+   Call.assert "lagtm: n-1 == dlDim0" (n-1 == dlDim0)+   Call.assert "lagtm: n-1 == duDim0" (n-1 == duDim0)+   Call.assert "lagtm: nrhs == bDim0" (nrhs == bDim0)+   evalContT $ do+      transPtr <- Call.char trans+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      alphaPtr <- Call.float alpha+      dlPtr <- Call.array dl+      dPtr <- Call.array d+      duPtr <- Call.array du+      xPtr <- Call.array x+      ldxPtr <- Call.cint ldx+      betaPtr <- Call.float beta+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      liftIO $ FFI.lagtm transPtr nPtr nrhsPtr alphaPtr dlPtr dPtr duPtr xPtr ldxPtr betaPtr bPtr ldbPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clahef.f>+lahef ::+   Char {- ^ uplo -} ->+   Int {- ^ nb -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Int {- ^ ldw -} ->+   IO (Int, Array ZeroInt CInt, Array (ZeroInt,ZeroInt) (Complex Float), Int)+lahef uplo nb a ldw = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   ipiv <- Call.newArray1 n+   w <- Call.newArray2 nb ldw+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nbPtr <- Call.cint nb+      kbPtr <- Call.alloca+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.ioarray ipiv+      wPtr <- Call.ioarray w+      ldwPtr <- Call.cint ldw+      infoPtr <- Call.alloca+      liftIO $ FFI.lahef uploPtr nPtr nbPtr kbPtr aPtr ldaPtr ipivPtr wPtr ldwPtr infoPtr+      liftIO $ pure (,,,)+         <*> fmap fromIntegral (peek kbPtr)+         <*> Call.freezeArray ipiv+         <*> Call.freezeArray w+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clahqr.f>+lahqr ::+   Bool {- ^ wantt -} ->+   Bool {- ^ wantz -} ->+   Int {- ^ ilo -} ->+   Int {- ^ ihi -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ h -} ->+   Int {- ^ iloz -} ->+   Int {- ^ ihiz -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ z -} ->+   IO (Array ZeroInt (Complex Float), Int)+lahqr wantt wantz ilo ihi h iloz ihiz z = do+   let (hDim0,hDim1) = Call.sizes2 $ MutArray.shape h+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = hDim0+   let ldh = hDim1+   let ldz = zDim1+   Call.assert "lahqr: n == zDim0" (n == zDim0)+   w <- Call.newArray1 n+   evalContT $ do+      wanttPtr <- Call.bool wantt+      wantzPtr <- Call.bool wantz+      nPtr <- Call.cint n+      iloPtr <- Call.cint ilo+      ihiPtr <- Call.cint ihi+      hPtr <- Call.ioarray h+      ldhPtr <- Call.cint ldh+      wPtr <- Call.ioarray w+      ilozPtr <- Call.cint iloz+      ihizPtr <- Call.cint ihiz+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      infoPtr <- Call.alloca+      liftIO $ FFI.lahqr wanttPtr wantzPtr nPtr iloPtr ihiPtr hPtr ldhPtr wPtr ilozPtr ihizPtr zPtr ldzPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray w+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clahr2.f>+lahr2 ::+   Int {- ^ n -} ->+   Int {- ^ k -} ->+   Int {- ^ nb -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Int {- ^ ldt -} ->+   Int {- ^ ldy -} ->+   IO (Array ZeroInt (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float))+lahr2 n k nb a ldt ldy = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let lda = aDim1+   Call.assert "lahr2: n-k+1 == aDim0" (n-k+1 == aDim0)+   tau <- Call.newArray1 nb+   t <- Call.newArray2 nb ldt+   y <- Call.newArray2 nb ldy+   evalContT $ do+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      nbPtr <- Call.cint nb+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      tPtr <- Call.ioarray t+      ldtPtr <- Call.cint ldt+      yPtr <- Call.ioarray y+      ldyPtr <- Call.cint ldy+      liftIO $ FFI.lahr2 nPtr kPtr nbPtr aPtr ldaPtr tauPtr tPtr ldtPtr yPtr ldyPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray tau+         <*> Call.freezeArray t+         <*> Call.freezeArray y++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/claic1.f>+laic1 ::+   Int {- ^ job -} ->+   Array ZeroInt (Complex Float) {- ^ x -} ->+   Float {- ^ sest -} ->+   Array ZeroInt (Complex Float) {- ^ w -} ->+   Complex Float {- ^ gamma -} ->+   IO (Float, Complex Float, Complex Float)+laic1 job x sest w gamma = do+   let xDim0 = Call.sizes1 $ Array.shape x+   let wDim0 = Call.sizes1 $ Array.shape w+   let j = xDim0+   Call.assert "laic1: j == wDim0" (j == wDim0)+   evalContT $ do+      jobPtr <- Call.cint job+      jPtr <- Call.cint j+      xPtr <- Call.array x+      sestPtr <- Call.float sest+      wPtr <- Call.array w+      gammaPtr <- Call.complexFloat gamma+      sestprPtr <- Call.alloca+      sPtr <- Call.alloca+      cPtr <- Call.alloca+      liftIO $ FFI.laic1 jobPtr jPtr xPtr sestPtr wPtr gammaPtr sestprPtr sPtr cPtr+      liftIO $ pure (,,)+         <*> peek sestprPtr+         <*> peek sPtr+         <*> peek cPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clals0.f>+lals0 ::+   Int {- ^ icompq -} ->+   Int {- ^ nl -} ->+   Int {- ^ nr -} ->+   Int {- ^ sqre -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   Int {- ^ ldbx -} ->+   Array ZeroInt CInt {- ^ perm -} ->+   Int {- ^ givptr -} ->+   Array (ZeroInt,ZeroInt) CInt {- ^ givcol -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ givnum -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ poles -} ->+   Array ZeroInt Float {- ^ difl -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ difr -} ->+   Array ZeroInt Float {- ^ z -} ->+   Float {- ^ c -} ->+   Float {- ^ s -} ->+   Int {- ^ rworkSize -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Float), Int)+lals0 icompq nl nr sqre b ldbx perm givptr givcol givnum poles difl difr z c s rworkSize = do+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let permDim0 = Call.sizes1 $ Array.shape perm+   let (givcolDim0,givcolDim1) = Call.sizes2 $ Array.shape givcol+   let (givnumDim0,givnumDim1) = Call.sizes2 $ Array.shape givnum+   let (polesDim0,polesDim1) = Call.sizes2 $ Array.shape poles+   let diflDim0 = Call.sizes1 $ Array.shape difl+   let (difrDim0,difrDim1) = Call.sizes2 $ Array.shape difr+   let zDim0 = Call.sizes1 $ Array.shape z+   let nrhs = bDim0+   let ldb = bDim1+   let _n = permDim0+   let ldgcol = givcolDim1+   let ldgnum = givnumDim1+   let k = diflDim0+   Call.assert "lals0: 2 == givcolDim0" (2 == givcolDim0)+   Call.assert "lals0: 2 == givnumDim0" (2 == givnumDim0)+   Call.assert "lals0: 2 == polesDim0" (2 == polesDim0)+   Call.assert "lals0: ldgnum == polesDim1" (ldgnum == polesDim1)+   Call.assert "lals0: 2 == difrDim0" (2 == difrDim0)+   Call.assert "lals0: ldgnum == difrDim1" (ldgnum == difrDim1)+   Call.assert "lals0: k == zDim0" (k == zDim0)+   bx <- Call.newArray2 nrhs ldbx+   rwork <- Call.newArray1 rworkSize+   evalContT $ do+      icompqPtr <- Call.cint icompq+      nlPtr <- Call.cint nl+      nrPtr <- Call.cint nr+      sqrePtr <- Call.cint sqre+      nrhsPtr <- Call.cint nrhs+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      bxPtr <- Call.ioarray bx+      ldbxPtr <- Call.cint ldbx+      permPtr <- Call.array perm+      givptrPtr <- Call.cint givptr+      givcolPtr <- Call.array givcol+      ldgcolPtr <- Call.cint ldgcol+      givnumPtr <- Call.array givnum+      ldgnumPtr <- Call.cint ldgnum+      polesPtr <- Call.array poles+      diflPtr <- Call.array difl+      difrPtr <- Call.array difr+      zPtr <- Call.array z+      kPtr <- Call.cint k+      cPtr <- Call.float c+      sPtr <- Call.float s+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.lals0 icompqPtr nlPtr nrPtr sqrePtr nrhsPtr bPtr ldbPtr bxPtr ldbxPtr permPtr givptrPtr givcolPtr ldgcolPtr givnumPtr ldgnumPtr polesPtr diflPtr difrPtr zPtr kPtr cPtr sPtr rworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray bx+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clalsa.f>+lalsa ::+   Int {- ^ icompq -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   Int {- ^ ldbx -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ u -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ vt -} ->+   Array ZeroInt CInt {- ^ k -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ difl -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ difr -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ z -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ poles -} ->+   Array ZeroInt CInt {- ^ givptr -} ->+   Array (ZeroInt,ZeroInt) CInt {- ^ givcol -} ->+   Array (ZeroInt,ZeroInt) CInt {- ^ perm -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ givnum -} ->+   Array ZeroInt Float {- ^ c -} ->+   Array ZeroInt Float {- ^ s -} ->+   Int {- ^ rworkSize -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Float), Int)+lalsa icompq b ldbx u vt k difl difr z poles givptr givcol perm givnum c s rworkSize = do+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let (uDim0,uDim1) = Call.sizes2 $ Array.shape u+   let (vtDim0,vtDim1) = Call.sizes2 $ Array.shape vt+   let kDim0 = Call.sizes1 $ Array.shape k+   let (diflDim0,diflDim1) = Call.sizes2 $ Array.shape difl+   let (difrDim0,difrDim1) = Call.sizes2 $ Array.shape difr+   let (zDim0,zDim1) = Call.sizes2 $ Array.shape z+   let (polesDim0,polesDim1) = Call.sizes2 $ Array.shape poles+   let givptrDim0 = Call.sizes1 $ Array.shape givptr+   let (givcolDim0,givcolDim1) = Call.sizes2 $ Array.shape givcol+   let (permDim0,permDim1) = Call.sizes2 $ Array.shape perm+   let (givnumDim0,givnumDim1) = Call.sizes2 $ Array.shape givnum+   let cDim0 = Call.sizes1 $ Array.shape c+   let sDim0 = Call.sizes1 $ Array.shape s+   let nrhs = bDim0+   let ldb = bDim1+   let smlsiz = uDim0+   let ldu = uDim1+   let n = kDim0+   let nlvl = diflDim0+   let ldgcol = givcolDim1+   Call.assert "lalsa: smlsiz+1 == vtDim0" (smlsiz+1 == vtDim0)+   Call.assert "lalsa: ldu == vtDim1" (ldu == vtDim1)+   Call.assert "lalsa: ldu == diflDim1" (ldu == diflDim1)+   Call.assert "lalsa: 2*nlvl == difrDim0" (2*nlvl == difrDim0)+   Call.assert "lalsa: ldu == difrDim1" (ldu == difrDim1)+   Call.assert "lalsa: nlvl == zDim0" (nlvl == zDim0)+   Call.assert "lalsa: ldu == zDim1" (ldu == zDim1)+   Call.assert "lalsa: 2*nlvl == polesDim0" (2*nlvl == polesDim0)+   Call.assert "lalsa: ldu == polesDim1" (ldu == polesDim1)+   Call.assert "lalsa: n == givptrDim0" (n == givptrDim0)+   Call.assert "lalsa: 2*nlvl == givcolDim0" (2*nlvl == givcolDim0)+   Call.assert "lalsa: nlvl == permDim0" (nlvl == permDim0)+   Call.assert "lalsa: ldgcol == permDim1" (ldgcol == permDim1)+   Call.assert "lalsa: 2*nlvl == givnumDim0" (2*nlvl == givnumDim0)+   Call.assert "lalsa: ldu == givnumDim1" (ldu == givnumDim1)+   Call.assert "lalsa: n == cDim0" (n == cDim0)+   Call.assert "lalsa: n == sDim0" (n == sDim0)+   bx <- Call.newArray2 nrhs ldbx+   rwork <- Call.newArray1 rworkSize+   iwork <- Call.newArray1 (3*n)+   evalContT $ do+      icompqPtr <- Call.cint icompq+      smlsizPtr <- Call.cint smlsiz+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      bxPtr <- Call.ioarray bx+      ldbxPtr <- Call.cint ldbx+      uPtr <- Call.array u+      lduPtr <- Call.cint ldu+      vtPtr <- Call.array vt+      kPtr <- Call.array k+      diflPtr <- Call.array difl+      difrPtr <- Call.array difr+      zPtr <- Call.array z+      polesPtr <- Call.array poles+      givptrPtr <- Call.array givptr+      givcolPtr <- Call.array givcol+      ldgcolPtr <- Call.cint ldgcol+      permPtr <- Call.array perm+      givnumPtr <- Call.array givnum+      cPtr <- Call.array c+      sPtr <- Call.array s+      rworkPtr <- Call.ioarray rwork+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.lalsa icompqPtr smlsizPtr nPtr nrhsPtr bPtr ldbPtr bxPtr ldbxPtr uPtr lduPtr vtPtr kPtr diflPtr difrPtr zPtr polesPtr givptrPtr givcolPtr ldgcolPtr permPtr givnumPtr cPtr sPtr rworkPtr iworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray bx+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clalsd.f>+lalsd ::+   Char {- ^ uplo -} ->+   Int {- ^ smlsiz -} ->+   IOArray ZeroInt Float {- ^ d -} ->+   IOArray ZeroInt Float {- ^ e -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   Float {- ^ rcond -} ->+   Int {- ^ rworkSize -} ->+   Int {- ^ nlvl -} ->+   IO (Int, Int)+lalsd uplo smlsiz d e b rcond rworkSize nlvl = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = dDim0+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "lalsd: n-1 == eDim0" (n-1 == eDim0)+   work <- Call.newArray1 (n*nrhs)+   rwork <- Call.newArray1 rworkSize+   iwork <- Call.newArray1 (3*n*nlvl+11*n)+   evalContT $ do+      uploPtr <- Call.char uplo+      smlsizPtr <- Call.cint smlsiz+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      rcondPtr <- Call.float rcond+      rankPtr <- Call.alloca+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.lalsd uploPtr smlsizPtr nPtr nrhsPtr dPtr ePtr bPtr ldbPtr rcondPtr rankPtr workPtr rworkPtr iworkPtr infoPtr+      liftIO $ pure (,)+         <*> fmap fromIntegral (peek rankPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clangb.f>+langb ::+   Char {- ^ norm -} ->+   Int {- ^ kl -} ->+   Int {- ^ ku -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->+   Int {- ^ lwork -} ->+   IO Float+langb norm kl ku ab lwork = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let n = abDim0+   let ldab = abDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      normPtr <- Call.char norm+      nPtr <- Call.cint n+      klPtr <- Call.cint kl+      kuPtr <- Call.cint ku+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      workPtr <- Call.ioarray work+      liftIO $ FFI.langb normPtr nPtr klPtr kuPtr abPtr ldabPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clange.f>+lange ::+   Char {- ^ norm -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO Float+lange norm m a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      normPtr <- Call.char norm+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      workPtr <- Call.ioarray work+      liftIO $ FFI.lange normPtr mPtr nPtr aPtr ldaPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clangt.f>+langt ::+   Char {- ^ norm -} ->+   Array ZeroInt (Complex Float) {- ^ dl -} ->+   Array ZeroInt (Complex Float) {- ^ d -} ->+   Array ZeroInt (Complex Float) {- ^ du -} ->+   IO Float+langt norm dl d du = do+   let dlDim0 = Call.sizes1 $ Array.shape dl+   let dDim0 = Call.sizes1 $ Array.shape d+   let duDim0 = Call.sizes1 $ Array.shape du+   let n = dDim0+   Call.assert "langt: n-1 == dlDim0" (n-1 == dlDim0)+   Call.assert "langt: n-1 == duDim0" (n-1 == duDim0)+   evalContT $ do+      normPtr <- Call.char norm+      nPtr <- Call.cint n+      dlPtr <- Call.array dl+      dPtr <- Call.array d+      duPtr <- Call.array du+      liftIO $ FFI.langt normPtr nPtr dlPtr dPtr duPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clanhb.f>+lanhb ::+   Char {- ^ norm -} ->+   Char {- ^ uplo -} ->+   Int {- ^ k -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->+   Int {- ^ lwork -} ->+   IO Float+lanhb norm uplo k ab lwork = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let n = abDim0+   let ldab = abDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      normPtr <- Call.char norm+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      workPtr <- Call.ioarray work+      liftIO $ FFI.lanhb normPtr uploPtr nPtr kPtr abPtr ldabPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clanhe.f>+lanhe ::+   Char {- ^ norm -} ->+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO Float+lanhe norm uplo a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      normPtr <- Call.char norm+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      workPtr <- Call.ioarray work+      liftIO $ FFI.lanhe normPtr uploPtr nPtr aPtr ldaPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clanhf.f>+lanhf ::+   Char {- ^ norm -} ->+   Char {- ^ transr -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Array ZeroInt (Complex Float) {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO Float+lanhf norm transr uplo n a lwork = do+   let aDim0 = Call.sizes1 $ Array.shape a+   Call.assert "lanhf: n*(n+1)`div`2 == aDim0" (n*(n+1)`div`2 == aDim0)+   work <- Call.newArray1 lwork+   evalContT $ do+      normPtr <- Call.char norm+      transrPtr <- Call.char transr+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.array a+      workPtr <- Call.ioarray work+      liftIO $ FFI.lanhf normPtr transrPtr uploPtr nPtr aPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clanhp.f>+lanhp ::+   Char {- ^ norm -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Array ZeroInt (Complex Float) {- ^ ap -} ->+   Int {- ^ lwork -} ->+   IO Float+lanhp norm uplo n ap lwork = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   Call.assert "lanhp: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      normPtr <- Call.char norm+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.array ap+      workPtr <- Call.ioarray work+      liftIO $ FFI.lanhp normPtr uploPtr nPtr apPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clanhs.f>+lanhs ::+   Char {- ^ norm -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO Float+lanhs norm a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      normPtr <- Call.char norm+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      workPtr <- Call.ioarray work+      liftIO $ FFI.lanhs normPtr nPtr aPtr ldaPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clanht.f>+lanht ::+   Char {- ^ norm -} ->+   Array ZeroInt Float {- ^ d -} ->+   Array ZeroInt (Complex Float) {- ^ e -} ->+   IO Float+lanht norm d e = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let eDim0 = Call.sizes1 $ Array.shape e+   let n = dDim0+   Call.assert "lanht: n-1 == eDim0" (n-1 == eDim0)+   evalContT $ do+      normPtr <- Call.char norm+      nPtr <- Call.cint n+      dPtr <- Call.array d+      ePtr <- Call.array e+      liftIO $ FFI.lanht normPtr nPtr dPtr ePtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clansb.f>+lansb ::+   Char {- ^ norm -} ->+   Char {- ^ uplo -} ->+   Int {- ^ k -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->+   Int {- ^ lwork -} ->+   IO Float+lansb norm uplo k ab lwork = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let n = abDim0+   let ldab = abDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      normPtr <- Call.char norm+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      workPtr <- Call.ioarray work+      liftIO $ FFI.lansb normPtr uploPtr nPtr kPtr abPtr ldabPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clansp.f>+lansp ::+   Char {- ^ norm -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Array ZeroInt (Complex Float) {- ^ ap -} ->+   Int {- ^ lwork -} ->+   IO Float+lansp norm uplo n ap lwork = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   Call.assert "lansp: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      normPtr <- Call.char norm+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.array ap+      workPtr <- Call.ioarray work+      liftIO $ FFI.lansp normPtr uploPtr nPtr apPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clansy.f>+lansy ::+   Char {- ^ norm -} ->+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO Float+lansy norm uplo a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      normPtr <- Call.char norm+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      workPtr <- Call.ioarray work+      liftIO $ FFI.lansy normPtr uploPtr nPtr aPtr ldaPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clantb.f>+lantb ::+   Char {- ^ norm -} ->+   Char {- ^ uplo -} ->+   Char {- ^ diag -} ->+   Int {- ^ k -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->+   Int {- ^ lwork -} ->+   IO Float+lantb norm uplo diag k ab lwork = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let n = abDim0+   let ldab = abDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      normPtr <- Call.char norm+      uploPtr <- Call.char uplo+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      workPtr <- Call.ioarray work+      liftIO $ FFI.lantb normPtr uploPtr diagPtr nPtr kPtr abPtr ldabPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clantp.f>+lantp ::+   Char {- ^ norm -} ->+   Char {- ^ uplo -} ->+   Char {- ^ diag -} ->+   Int {- ^ n -} ->+   Array ZeroInt (Complex Float) {- ^ ap -} ->+   Int {- ^ lwork -} ->+   IO Float+lantp norm uplo diag n ap lwork = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   Call.assert "lantp: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      normPtr <- Call.char norm+      uploPtr <- Call.char uplo+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      apPtr <- Call.array ap+      workPtr <- Call.ioarray work+      liftIO $ FFI.lantp normPtr uploPtr diagPtr nPtr apPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clantr.f>+lantr ::+   Char {- ^ norm -} ->+   Char {- ^ uplo -} ->+   Char {- ^ diag -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO Float+lantr norm uplo diag m a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      normPtr <- Call.char norm+      uploPtr <- Call.char uplo+      diagPtr <- Call.char diag+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      workPtr <- Call.ioarray work+      liftIO $ FFI.lantr normPtr uploPtr diagPtr mPtr nPtr aPtr ldaPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clapll.f>+lapll ::+   Int {- ^ n -} ->+   IOArray ZeroInt (Complex Float) {- ^ x -} ->+   Int {- ^ incx -} ->+   IOArray ZeroInt (Complex Float) {- ^ y -} ->+   Int {- ^ incy -} ->+   IO (Float)+lapll n x incx y incy = do+   let xDim0 = Call.sizes1 $ MutArray.shape x+   let yDim0 = Call.sizes1 $ MutArray.shape y+   Call.assert "lapll: 1+(n-1)*incx == xDim0" (1+(n-1)*incx == xDim0)+   Call.assert "lapll: 1+(n-1)*incy == yDim0" (1+(n-1)*incy == yDim0)+   evalContT $ do+      nPtr <- Call.cint n+      xPtr <- Call.ioarray x+      incxPtr <- Call.cint incx+      yPtr <- Call.ioarray y+      incyPtr <- Call.cint incy+      ssminPtr <- Call.alloca+      liftIO $ FFI.lapll nPtr xPtr incxPtr yPtr incyPtr ssminPtr+      liftIO $ peek ssminPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clapmr.f>+lapmr ::+   Bool {- ^ forwrd -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ x -} ->+   IOArray ZeroInt CInt {- ^ k -} ->+   IO ()+lapmr forwrd x k = do+   let (xDim0,xDim1) = Call.sizes2 $ MutArray.shape x+   let kDim0 = Call.sizes1 $ MutArray.shape k+   let n = xDim0+   let ldx = xDim1+   let m = kDim0+   evalContT $ do+      forwrdPtr <- Call.bool forwrd+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      kPtr <- Call.ioarray k+      liftIO $ FFI.lapmr forwrdPtr mPtr nPtr xPtr ldxPtr kPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clapmt.f>+lapmt ::+   Bool {- ^ forwrd -} ->+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ x -} ->+   IOArray ZeroInt CInt {- ^ k -} ->+   IO ()+lapmt forwrd m x k = do+   let (xDim0,xDim1) = Call.sizes2 $ MutArray.shape x+   let kDim0 = Call.sizes1 $ MutArray.shape k+   let n = xDim0+   let ldx = xDim1+   Call.assert "lapmt: n == kDim0" (n == kDim0)+   evalContT $ do+      forwrdPtr <- Call.bool forwrd+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      kPtr <- Call.ioarray k+      liftIO $ FFI.lapmt forwrdPtr mPtr nPtr xPtr ldxPtr kPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/claqgb.f>+laqgb ::+   Int {- ^ kl -} ->+   Int {- ^ ku -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->+   Array ZeroInt Float {- ^ r -} ->+   Array ZeroInt Float {- ^ c -} ->+   Float {- ^ rowcnd -} ->+   Float {- ^ colcnd -} ->+   Float {- ^ amax -} ->+   IO (Char)+laqgb kl ku ab r c rowcnd colcnd amax = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let rDim0 = Call.sizes1 $ Array.shape r+   let cDim0 = Call.sizes1 $ Array.shape c+   let n = abDim0+   let ldab = abDim1+   let m = rDim0+   Call.assert "laqgb: n == cDim0" (n == cDim0)+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      klPtr <- Call.cint kl+      kuPtr <- Call.cint ku+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      rPtr <- Call.array r+      cPtr <- Call.array c+      rowcndPtr <- Call.float rowcnd+      colcndPtr <- Call.float colcnd+      amaxPtr <- Call.float amax+      equedPtr <- Call.alloca+      liftIO $ FFI.laqgb mPtr nPtr klPtr kuPtr abPtr ldabPtr rPtr cPtr rowcndPtr colcndPtr amaxPtr equedPtr+      liftIO $ fmap castCCharToChar (peek equedPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/claqge.f>+laqge ::+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Array ZeroInt Float {- ^ r -} ->+   Array ZeroInt Float {- ^ c -} ->+   Float {- ^ rowcnd -} ->+   Float {- ^ colcnd -} ->+   Float {- ^ amax -} ->+   IO (Char)+laqge a r c rowcnd colcnd amax = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let rDim0 = Call.sizes1 $ Array.shape r+   let cDim0 = Call.sizes1 $ Array.shape c+   let n = aDim0+   let lda = aDim1+   let m = rDim0+   Call.assert "laqge: n == cDim0" (n == cDim0)+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      rPtr <- Call.array r+      cPtr <- Call.array c+      rowcndPtr <- Call.float rowcnd+      colcndPtr <- Call.float colcnd+      amaxPtr <- Call.float amax+      equedPtr <- Call.alloca+      liftIO $ FFI.laqge mPtr nPtr aPtr ldaPtr rPtr cPtr rowcndPtr colcndPtr amaxPtr equedPtr+      liftIO $ fmap castCCharToChar (peek equedPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/claqhb.f>+laqhb ::+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->+   Float {- ^ scond -} ->+   Float {- ^ amax -} ->+   IO (Array ZeroInt Float, Char)+laqhb uplo kd ab scond amax = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let n = abDim0+   let ldab = abDim1+   s <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      sPtr <- Call.ioarray s+      scondPtr <- Call.float scond+      amaxPtr <- Call.float amax+      equedPtr <- Call.alloca+      liftIO $ FFI.laqhb uploPtr nPtr kdPtr abPtr ldabPtr sPtr scondPtr amaxPtr equedPtr+      liftIO $ pure (,)+         <*> Call.freezeArray s+         <*> fmap castCCharToChar (peek equedPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/claqhe.f>+laqhe ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Array ZeroInt Float {- ^ s -} ->+   Float {- ^ scond -} ->+   Float {- ^ amax -} ->+   IO (Char)+laqhe uplo a s scond amax = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let sDim0 = Call.sizes1 $ Array.shape s+   let n = aDim0+   let lda = aDim1+   Call.assert "laqhe: n == sDim0" (n == sDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      sPtr <- Call.array s+      scondPtr <- Call.float scond+      amaxPtr <- Call.float amax+      equedPtr <- Call.alloca+      liftIO $ FFI.laqhe uploPtr nPtr aPtr ldaPtr sPtr scondPtr amaxPtr equedPtr+      liftIO $ fmap castCCharToChar (peek equedPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/claqhp.f>+laqhp ::+   Char {- ^ uplo -} ->+   IOArray ZeroInt (Complex Float) {- ^ ap -} ->+   Array ZeroInt Float {- ^ s -} ->+   Float {- ^ scond -} ->+   Float {- ^ amax -} ->+   IO (Char)+laqhp uplo ap s scond amax = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   let sDim0 = Call.sizes1 $ Array.shape s+   let n = sDim0+   Call.assert "laqhp: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      sPtr <- Call.array s+      scondPtr <- Call.float scond+      amaxPtr <- Call.float amax+      equedPtr <- Call.alloca+      liftIO $ FFI.laqhp uploPtr nPtr apPtr sPtr scondPtr amaxPtr equedPtr+      liftIO $ fmap castCCharToChar (peek equedPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/claqp2.f>+laqp2 ::+   Int {- ^ m -} ->+   Int {- ^ offset -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IOArray ZeroInt CInt {- ^ jpvt -} ->+   IOArray ZeroInt Float {- ^ vn1 -} ->+   IOArray ZeroInt Float {- ^ vn2 -} ->+   IO (Array ZeroInt (Complex Float))+laqp2 m offset a jpvt vn1 vn2 = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let jpvtDim0 = Call.sizes1 $ MutArray.shape jpvt+   let vn1Dim0 = Call.sizes1 $ MutArray.shape vn1+   let vn2Dim0 = Call.sizes1 $ MutArray.shape vn2+   let n = aDim0+   let lda = aDim1+   Call.assert "laqp2: n == jpvtDim0" (n == jpvtDim0)+   Call.assert "laqp2: n == vn1Dim0" (n == vn1Dim0)+   Call.assert "laqp2: n == vn2Dim0" (n == vn2Dim0)+   tau <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 n+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      offsetPtr <- Call.cint offset+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      jpvtPtr <- Call.ioarray jpvt+      tauPtr <- Call.ioarray tau+      vn1Ptr <- Call.ioarray vn1+      vn2Ptr <- Call.ioarray vn2+      workPtr <- Call.ioarray work+      liftIO $ FFI.laqp2 mPtr nPtr offsetPtr aPtr ldaPtr jpvtPtr tauPtr vn1Ptr vn2Ptr workPtr+      liftIO $ Call.freezeArray tau++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/claqps.f>+laqps ::+   Int {- ^ m -} ->+   Int {- ^ offset -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IOArray ZeroInt CInt {- ^ jpvt -} ->+   Int {- ^ kb -} ->+   IOArray ZeroInt Float {- ^ vn1 -} ->+   IOArray ZeroInt Float {- ^ vn2 -} ->+   IOArray ZeroInt (Complex Float) {- ^ auxv -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ f -} ->+   IO (Int, Array ZeroInt (Complex Float))+laqps m offset a jpvt kb vn1 vn2 auxv f = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let jpvtDim0 = Call.sizes1 $ MutArray.shape jpvt+   let vn1Dim0 = Call.sizes1 $ MutArray.shape vn1+   let vn2Dim0 = Call.sizes1 $ MutArray.shape vn2+   let auxvDim0 = Call.sizes1 $ MutArray.shape auxv+   let (fDim0,fDim1) = Call.sizes2 $ MutArray.shape f+   let n = aDim0+   let lda = aDim1+   let nb = auxvDim0+   let ldf = fDim1+   Call.assert "laqps: n == jpvtDim0" (n == jpvtDim0)+   Call.assert "laqps: n == vn1Dim0" (n == vn1Dim0)+   Call.assert "laqps: n == vn2Dim0" (n == vn2Dim0)+   Call.assert "laqps: nb == fDim0" (nb == fDim0)+   tau <- Call.newArray1 kb+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      offsetPtr <- Call.cint offset+      nbPtr <- Call.cint nb+      kbPtr <- Call.alloca+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      jpvtPtr <- Call.ioarray jpvt+      tauPtr <- Call.ioarray tau+      vn1Ptr <- Call.ioarray vn1+      vn2Ptr <- Call.ioarray vn2+      auxvPtr <- Call.ioarray auxv+      fPtr <- Call.ioarray f+      ldfPtr <- Call.cint ldf+      liftIO $ FFI.laqps mPtr nPtr offsetPtr nbPtr kbPtr aPtr ldaPtr jpvtPtr tauPtr vn1Ptr vn2Ptr auxvPtr fPtr ldfPtr+      liftIO $ pure (,)+         <*> fmap fromIntegral (peek kbPtr)+         <*> Call.freezeArray tau++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/claqr0.f>+laqr0 ::+   Bool {- ^ wantt -} ->+   Bool {- ^ wantz -} ->+   Int {- ^ ilo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ h -} ->+   Int {- ^ iloz -} ->+   Int {- ^ ihiz -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ z -} ->+   Int {- ^ workSize -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt (Complex Float), Int)+laqr0 wantt wantz ilo h iloz ihiz z workSize lwork = do+   let (hDim0,hDim1) = Call.sizes2 $ MutArray.shape h+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = hDim0+   let ldh = hDim1+   let ihi = zDim0+   let ldz = zDim1+   w <- Call.newArray1 n+   work <- Call.newArray1 workSize+   evalContT $ do+      wanttPtr <- Call.bool wantt+      wantzPtr <- Call.bool wantz+      nPtr <- Call.cint n+      iloPtr <- Call.cint ilo+      ihiPtr <- Call.cint ihi+      hPtr <- Call.ioarray h+      ldhPtr <- Call.cint ldh+      wPtr <- Call.ioarray w+      ilozPtr <- Call.cint iloz+      ihizPtr <- Call.cint ihiz+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.laqr0 wanttPtr wantzPtr nPtr iloPtr ihiPtr hPtr ldhPtr wPtr ilozPtr ihizPtr zPtr ldzPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray w+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/claqr1.f>+laqr1 ::+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ h -} ->+   Complex Float {- ^ s1 -} ->+   Complex Float {- ^ s2 -} ->+   IO (Array ZeroInt (Complex Float))+laqr1 h s1 s2 = do+   let (hDim0,hDim1) = Call.sizes2 $ Array.shape h+   let n = hDim0+   let ldh = hDim1+   v <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      hPtr <- Call.array h+      ldhPtr <- Call.cint ldh+      s1Ptr <- Call.complexFloat s1+      s2Ptr <- Call.complexFloat s2+      vPtr <- Call.ioarray v+      liftIO $ FFI.laqr1 nPtr hPtr ldhPtr s1Ptr s2Ptr vPtr+      liftIO $ Call.freezeArray v++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/claqr2.f>+laqr2 ::+   Bool {- ^ wantt -} ->+   Bool {- ^ wantz -} ->+   Int {- ^ ktop -} ->+   Int {- ^ kbot -} ->+   Int {- ^ nw -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ h -} ->+   Int {- ^ iloz -} ->+   Int {- ^ ihiz -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ z -} ->+   Int {- ^ ldv -} ->+   Int {- ^ nh -} ->+   Int {- ^ ldt -} ->+   Int {- ^ nv -} ->+   Int {- ^ ldwv -} ->+   Int {- ^ lwork -} ->+   IO (Int, Int, Array ZeroInt (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float))+laqr2 wantt wantz ktop kbot nw h iloz ihiz z ldv nh ldt nv ldwv lwork = do+   let (hDim0,hDim1) = Call.sizes2 $ MutArray.shape h+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = hDim0+   let ldh = hDim1+   let ldz = zDim1+   Call.assert "laqr2: n == zDim0" (n == zDim0)+   sh <- Call.newArray1 kbot+   v <- Call.newArray2 nw ldv+   t <- Call.newArray2 nw ldt+   wv <- Call.newArray2 nw ldwv+   work <- Call.newArray1 lwork+   evalContT $ do+      wanttPtr <- Call.bool wantt+      wantzPtr <- Call.bool wantz+      nPtr <- Call.cint n+      ktopPtr <- Call.cint ktop+      kbotPtr <- Call.cint kbot+      nwPtr <- Call.cint nw+      hPtr <- Call.ioarray h+      ldhPtr <- Call.cint ldh+      ilozPtr <- Call.cint iloz+      ihizPtr <- Call.cint ihiz+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      nsPtr <- Call.alloca+      ndPtr <- Call.alloca+      shPtr <- Call.ioarray sh+      vPtr <- Call.ioarray v+      ldvPtr <- Call.cint ldv+      nhPtr <- Call.cint nh+      tPtr <- Call.ioarray t+      ldtPtr <- Call.cint ldt+      nvPtr <- Call.cint nv+      wvPtr <- Call.ioarray wv+      ldwvPtr <- Call.cint ldwv+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      liftIO $ FFI.laqr2 wanttPtr wantzPtr nPtr ktopPtr kbotPtr nwPtr hPtr ldhPtr ilozPtr ihizPtr zPtr ldzPtr nsPtr ndPtr shPtr vPtr ldvPtr nhPtr tPtr ldtPtr nvPtr wvPtr ldwvPtr workPtr lworkPtr+      liftIO $ pure (,,,,,)+         <*> fmap fromIntegral (peek nsPtr)+         <*> fmap fromIntegral (peek ndPtr)+         <*> Call.freezeArray sh+         <*> Call.freezeArray v+         <*> Call.freezeArray t+         <*> Call.freezeArray wv++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/claqr3.f>+laqr3 ::+   Bool {- ^ wantt -} ->+   Bool {- ^ wantz -} ->+   Int {- ^ ktop -} ->+   Int {- ^ kbot -} ->+   Int {- ^ nw -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ h -} ->+   Int {- ^ iloz -} ->+   Int {- ^ ihiz -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ z -} ->+   Int {- ^ ldv -} ->+   Int {- ^ nh -} ->+   Int {- ^ ldt -} ->+   Int {- ^ nv -} ->+   Int {- ^ ldwv -} ->+   Int {- ^ lwork -} ->+   IO (Int, Int, Array ZeroInt (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float))+laqr3 wantt wantz ktop kbot nw h iloz ihiz z ldv nh ldt nv ldwv lwork = do+   let (hDim0,hDim1) = Call.sizes2 $ MutArray.shape h+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = hDim0+   let ldh = hDim1+   let ldz = zDim1+   Call.assert "laqr3: n == zDim0" (n == zDim0)+   sh <- Call.newArray1 kbot+   v <- Call.newArray2 nw ldv+   t <- Call.newArray2 nw ldt+   wv <- Call.newArray2 nw ldwv+   work <- Call.newArray1 lwork+   evalContT $ do+      wanttPtr <- Call.bool wantt+      wantzPtr <- Call.bool wantz+      nPtr <- Call.cint n+      ktopPtr <- Call.cint ktop+      kbotPtr <- Call.cint kbot+      nwPtr <- Call.cint nw+      hPtr <- Call.ioarray h+      ldhPtr <- Call.cint ldh+      ilozPtr <- Call.cint iloz+      ihizPtr <- Call.cint ihiz+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      nsPtr <- Call.alloca+      ndPtr <- Call.alloca+      shPtr <- Call.ioarray sh+      vPtr <- Call.ioarray v+      ldvPtr <- Call.cint ldv+      nhPtr <- Call.cint nh+      tPtr <- Call.ioarray t+      ldtPtr <- Call.cint ldt+      nvPtr <- Call.cint nv+      wvPtr <- Call.ioarray wv+      ldwvPtr <- Call.cint ldwv+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      liftIO $ FFI.laqr3 wanttPtr wantzPtr nPtr ktopPtr kbotPtr nwPtr hPtr ldhPtr ilozPtr ihizPtr zPtr ldzPtr nsPtr ndPtr shPtr vPtr ldvPtr nhPtr tPtr ldtPtr nvPtr wvPtr ldwvPtr workPtr lworkPtr+      liftIO $ pure (,,,,,)+         <*> fmap fromIntegral (peek nsPtr)+         <*> fmap fromIntegral (peek ndPtr)+         <*> Call.freezeArray sh+         <*> Call.freezeArray v+         <*> Call.freezeArray t+         <*> Call.freezeArray wv++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/claqr4.f>+laqr4 ::+   Bool {- ^ wantt -} ->+   Bool {- ^ wantz -} ->+   Int {- ^ ilo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ h -} ->+   Int {- ^ iloz -} ->+   Int {- ^ ihiz -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ z -} ->+   Int {- ^ workSize -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt (Complex Float), Int)+laqr4 wantt wantz ilo h iloz ihiz z workSize lwork = do+   let (hDim0,hDim1) = Call.sizes2 $ MutArray.shape h+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = hDim0+   let ldh = hDim1+   let ihi = zDim0+   let ldz = zDim1+   w <- Call.newArray1 n+   work <- Call.newArray1 workSize+   evalContT $ do+      wanttPtr <- Call.bool wantt+      wantzPtr <- Call.bool wantz+      nPtr <- Call.cint n+      iloPtr <- Call.cint ilo+      ihiPtr <- Call.cint ihi+      hPtr <- Call.ioarray h+      ldhPtr <- Call.cint ldh+      wPtr <- Call.ioarray w+      ilozPtr <- Call.cint iloz+      ihizPtr <- Call.cint ihiz+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.laqr4 wanttPtr wantzPtr nPtr iloPtr ihiPtr hPtr ldhPtr wPtr ilozPtr ihizPtr zPtr ldzPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray w+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/claqr5.f>+laqr5 ::+   Bool {- ^ wantt -} ->+   Bool {- ^ wantz -} ->+   Int {- ^ kacc22 -} ->+   Int {- ^ ktop -} ->+   Int {- ^ kbot -} ->+   IOArray ZeroInt (Complex Float) {- ^ s -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ h -} ->+   Int {- ^ iloz -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ z -} ->+   Int {- ^ ldv -} ->+   Int {- ^ ldu -} ->+   Int {- ^ nv -} ->+   Int {- ^ ldwv -} ->+   Int {- ^ nh -} ->+   Int {- ^ ldwh -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float))+laqr5 wantt wantz kacc22 ktop kbot s h iloz z ldv ldu nv ldwv nh ldwh = do+   let sDim0 = Call.sizes1 $ MutArray.shape s+   let (hDim0,hDim1) = Call.sizes2 $ MutArray.shape h+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let nshfts = sDim0+   let n = hDim0+   let ldh = hDim1+   let ihiz = zDim0+   let ldz = zDim1+   v <- Call.newArray2 (nshfts`div`2) ldv+   u <- Call.newArray2 (3*nshfts-3) ldu+   wv <- Call.newArray2 (3*nshfts-3) ldwv+   wh <- Call.newArray2 nh ldwh+   evalContT $ do+      wanttPtr <- Call.bool wantt+      wantzPtr <- Call.bool wantz+      kacc22Ptr <- Call.cint kacc22+      nPtr <- Call.cint n+      ktopPtr <- Call.cint ktop+      kbotPtr <- Call.cint kbot+      nshftsPtr <- Call.cint nshfts+      sPtr <- Call.ioarray s+      hPtr <- Call.ioarray h+      ldhPtr <- Call.cint ldh+      ilozPtr <- Call.cint iloz+      ihizPtr <- Call.cint ihiz+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      vPtr <- Call.ioarray v+      ldvPtr <- Call.cint ldv+      uPtr <- Call.ioarray u+      lduPtr <- Call.cint ldu+      nvPtr <- Call.cint nv+      wvPtr <- Call.ioarray wv+      ldwvPtr <- Call.cint ldwv+      nhPtr <- Call.cint nh+      whPtr <- Call.ioarray wh+      ldwhPtr <- Call.cint ldwh+      liftIO $ FFI.laqr5 wanttPtr wantzPtr kacc22Ptr nPtr ktopPtr kbotPtr nshftsPtr sPtr hPtr ldhPtr ilozPtr ihizPtr zPtr ldzPtr vPtr ldvPtr uPtr lduPtr nvPtr wvPtr ldwvPtr nhPtr whPtr ldwhPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray v+         <*> Call.freezeArray u+         <*> Call.freezeArray wv+         <*> Call.freezeArray wh++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/claqsb.f>+laqsb ::+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->+   Array ZeroInt Float {- ^ s -} ->+   Float {- ^ scond -} ->+   Float {- ^ amax -} ->+   IO (Char)+laqsb uplo kd ab s scond amax = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let sDim0 = Call.sizes1 $ Array.shape s+   let n = abDim0+   let ldab = abDim1+   Call.assert "laqsb: n == sDim0" (n == sDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      sPtr <- Call.array s+      scondPtr <- Call.float scond+      amaxPtr <- Call.float amax+      equedPtr <- Call.alloca+      liftIO $ FFI.laqsb uploPtr nPtr kdPtr abPtr ldabPtr sPtr scondPtr amaxPtr equedPtr+      liftIO $ fmap castCCharToChar (peek equedPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/claqsp.f>+laqsp ::+   Char {- ^ uplo -} ->+   IOArray ZeroInt (Complex Float) {- ^ ap -} ->+   Array ZeroInt Float {- ^ s -} ->+   Float {- ^ scond -} ->+   Float {- ^ amax -} ->+   IO (Char)+laqsp uplo ap s scond amax = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   let sDim0 = Call.sizes1 $ Array.shape s+   let n = sDim0+   Call.assert "laqsp: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      sPtr <- Call.array s+      scondPtr <- Call.float scond+      amaxPtr <- Call.float amax+      equedPtr <- Call.alloca+      liftIO $ FFI.laqsp uploPtr nPtr apPtr sPtr scondPtr amaxPtr equedPtr+      liftIO $ fmap castCCharToChar (peek equedPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/claqsy.f>+laqsy ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Array ZeroInt Float {- ^ s -} ->+   Float {- ^ scond -} ->+   Float {- ^ amax -} ->+   IO (Char)+laqsy uplo a s scond amax = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let sDim0 = Call.sizes1 $ Array.shape s+   let n = aDim0+   let lda = aDim1+   Call.assert "laqsy: n == sDim0" (n == sDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      sPtr <- Call.array s+      scondPtr <- Call.float scond+      amaxPtr <- Call.float amax+      equedPtr <- Call.alloca+      liftIO $ FFI.laqsy uploPtr nPtr aPtr ldaPtr sPtr scondPtr amaxPtr equedPtr+      liftIO $ fmap castCCharToChar (peek equedPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clar1v.f>+lar1v ::+   Int {- ^ b1 -} ->+   Int {- ^ bn -} ->+   Float {- ^ lambda -} ->+   Array ZeroInt Float {- ^ d -} ->+   Array ZeroInt Float {- ^ l -} ->+   Array ZeroInt Float {- ^ ld -} ->+   Array ZeroInt Float {- ^ lld -} ->+   Float {- ^ pivmin -} ->+   Float {- ^ gaptol -} ->+   IOArray ZeroInt (Complex Float) {- ^ z -} ->+   Bool {- ^ wantnc -} ->+   Int {- ^ r -} ->+   IO (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)+lar1v b1 bn lambda d l ld lld pivmin gaptol z wantnc r = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let lDim0 = Call.sizes1 $ Array.shape l+   let ldDim0 = Call.sizes1 $ Array.shape ld+   let lldDim0 = Call.sizes1 $ Array.shape lld+   let zDim0 = Call.sizes1 $ MutArray.shape z+   let n = dDim0+   Call.assert "lar1v: n-1 == lDim0" (n-1 == lDim0)+   Call.assert "lar1v: n-1 == ldDim0" (n-1 == ldDim0)+   Call.assert "lar1v: n-1 == lldDim0" (n-1 == lldDim0)+   Call.assert "lar1v: n == zDim0" (n == zDim0)+   isuppz <- Call.newArray1 2+   work <- Call.newArray1 (4*n)+   evalContT $ do+      nPtr <- Call.cint n+      b1Ptr <- Call.cint b1+      bnPtr <- Call.cint bn+      lambdaPtr <- Call.float lambda+      dPtr <- Call.array d+      lPtr <- Call.array l+      ldPtr <- Call.array ld+      lldPtr <- Call.array lld+      pivminPtr <- Call.float pivmin+      gaptolPtr <- Call.float gaptol+      zPtr <- Call.ioarray z+      wantncPtr <- Call.bool wantnc+      negcntPtr <- Call.alloca+      ztzPtr <- Call.alloca+      mingmaPtr <- Call.alloca+      rPtr <- Call.cint r+      isuppzPtr <- Call.ioarray isuppz+      nrminvPtr <- Call.alloca+      residPtr <- Call.alloca+      rqcorrPtr <- Call.alloca+      workPtr <- Call.ioarray work+      liftIO $ FFI.lar1v nPtr b1Ptr bnPtr lambdaPtr dPtr lPtr ldPtr lldPtr pivminPtr gaptolPtr zPtr wantncPtr negcntPtr ztzPtr mingmaPtr rPtr isuppzPtr nrminvPtr residPtr rqcorrPtr workPtr+      liftIO $ pure (,,,,,,,)+         <*> fmap fromIntegral (peek negcntPtr)+         <*> peek ztzPtr+         <*> peek mingmaPtr+         <*> fmap fromIntegral (peek rPtr)+         <*> Call.freezeArray isuppz+         <*> peek nrminvPtr+         <*> peek residPtr+         <*> peek rqcorrPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clar2v.f>+lar2v ::+   Int {- ^ n -} ->+   IOArray ZeroInt (Complex Float) {- ^ x -} ->+   IOArray ZeroInt (Complex Float) {- ^ y -} ->+   IOArray ZeroInt (Complex Float) {- ^ z -} ->+   Int {- ^ incx -} ->+   Array ZeroInt Float {- ^ c -} ->+   Array ZeroInt (Complex Float) {- ^ s -} ->+   Int {- ^ incc -} ->+   IO ()+lar2v n x y z incx c s incc = do+   let xDim0 = Call.sizes1 $ MutArray.shape x+   let yDim0 = Call.sizes1 $ MutArray.shape y+   let zDim0 = Call.sizes1 $ MutArray.shape z+   let cDim0 = Call.sizes1 $ Array.shape c+   let sDim0 = Call.sizes1 $ Array.shape s+   Call.assert "lar2v: 1+(n-1)*incx == xDim0" (1+(n-1)*incx == xDim0)+   Call.assert "lar2v: 1+(n-1)*incx == yDim0" (1+(n-1)*incx == yDim0)+   Call.assert "lar2v: 1+(n-1)*incx == zDim0" (1+(n-1)*incx == zDim0)+   Call.assert "lar2v: 1+(n-1)*incc == cDim0" (1+(n-1)*incc == cDim0)+   Call.assert "lar2v: 1+(n-1)*incc == sDim0" (1+(n-1)*incc == sDim0)+   evalContT $ do+      nPtr <- Call.cint n+      xPtr <- Call.ioarray x+      yPtr <- Call.ioarray y+      zPtr <- Call.ioarray z+      incxPtr <- Call.cint incx+      cPtr <- Call.array c+      sPtr <- Call.array s+      inccPtr <- Call.cint incc+      liftIO $ FFI.lar2v nPtr xPtr yPtr zPtr incxPtr cPtr sPtr inccPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clarcm.f>+larcm ::+   Array (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   Int {- ^ ldc -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Float))+larcm a b ldc = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let m = aDim0+   let lda = aDim1+   let n = bDim0+   let ldb = bDim1+   c <- Call.newArray2 n ldc+   rwork <- Call.newArray1 (2*m*n)+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      rworkPtr <- Call.ioarray rwork+      liftIO $ FFI.larcm mPtr nPtr aPtr ldaPtr bPtr ldbPtr cPtr ldcPtr rworkPtr+      liftIO $ Call.freezeArray c++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clarf.f>+larf ::+   Char {- ^ side -} ->+   Int {- ^ m -} ->+   Array ZeroInt (Complex Float) {- ^ v -} ->+   Int {- ^ incv -} ->+   Complex Float {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ c -} ->+   Int {- ^ workSize -} ->+   IO ()+larf side m v incv tau c workSize = do+   let vDim0 = Call.sizes1 $ Array.shape v+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _vSize = vDim0+   let n = cDim0+   let ldc = cDim1+   work <- Call.newArray1 workSize+   evalContT $ do+      sidePtr <- Call.char side+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      vPtr <- Call.array v+      incvPtr <- Call.cint incv+      tauPtr <- Call.complexFloat tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      liftIO $ FFI.larf sidePtr mPtr nPtr vPtr incvPtr tauPtr cPtr ldcPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clarfb.f>+larfb ::+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Char {- ^ direct -} ->+   Char {- ^ storev -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ v -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ t -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ c -} ->+   Int {- ^ ldwork -} ->+   IO ()+larfb side trans direct storev m v t c ldwork = do+   let (vDim0,vDim1) = Call.sizes2 $ Array.shape v+   let (tDim0,tDim1) = Call.sizes2 $ Array.shape t+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _vSize = vDim0+   let ldv = vDim1+   let k = tDim0+   let ldt = tDim1+   let n = cDim0+   let ldc = cDim1+   work <- Call.newArray2 k ldwork+   evalContT $ do+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      directPtr <- Call.char direct+      storevPtr <- Call.char storev+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      vPtr <- Call.array v+      ldvPtr <- Call.cint ldv+      tPtr <- Call.array t+      ldtPtr <- Call.cint ldt+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      ldworkPtr <- Call.cint ldwork+      liftIO $ FFI.larfb sidePtr transPtr directPtr storevPtr mPtr nPtr kPtr vPtr ldvPtr tPtr ldtPtr cPtr ldcPtr workPtr ldworkPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clarfg.f>+larfg ::+   Int {- ^ n -} ->+   Complex Float {- ^ alpha -} ->+   IOArray ZeroInt (Complex Float) {- ^ x -} ->+   Int {- ^ incx -} ->+   IO (Complex Float, Complex Float)+larfg n alpha x incx = do+   let xDim0 = Call.sizes1 $ MutArray.shape x+   let _xSize = xDim0+   evalContT $ do+      nPtr <- Call.cint n+      alphaPtr <- Call.complexFloat alpha+      xPtr <- Call.ioarray x+      incxPtr <- Call.cint incx+      tauPtr <- Call.alloca+      liftIO $ FFI.larfg nPtr alphaPtr xPtr incxPtr tauPtr+      liftIO $ pure (,)+         <*> peek alphaPtr+         <*> peek tauPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clarfgp.f>+larfgp ::+   Int {- ^ n -} ->+   Complex Float {- ^ alpha -} ->+   IOArray ZeroInt (Complex Float) {- ^ x -} ->+   Int {- ^ incx -} ->+   IO (Complex Float, Complex Float)+larfgp n alpha x incx = do+   let xDim0 = Call.sizes1 $ MutArray.shape x+   let _xSize = xDim0+   evalContT $ do+      nPtr <- Call.cint n+      alphaPtr <- Call.complexFloat alpha+      xPtr <- Call.ioarray x+      incxPtr <- Call.cint incx+      tauPtr <- Call.alloca+      liftIO $ FFI.larfgp nPtr alphaPtr xPtr incxPtr tauPtr+      liftIO $ pure (,)+         <*> peek alphaPtr+         <*> peek tauPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clarft.f>+larft ::+   Char {- ^ direct -} ->+   Char {- ^ storev -} ->+   Int {- ^ n -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ v -} ->+   Array ZeroInt (Complex Float) {- ^ tau -} ->+   Int {- ^ ldt -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Float))+larft direct storev n v tau ldt = do+   let (vDim0,vDim1) = Call.sizes2 $ Array.shape v+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let _vSize = vDim0+   let ldv = vDim1+   let k = tauDim0+   t <- Call.newArray2 k ldt+   evalContT $ do+      directPtr <- Call.char direct+      storevPtr <- Call.char storev+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      vPtr <- Call.array v+      ldvPtr <- Call.cint ldv+      tauPtr <- Call.array tau+      tPtr <- Call.ioarray t+      ldtPtr <- Call.cint ldt+      liftIO $ FFI.larft directPtr storevPtr nPtr kPtr vPtr ldvPtr tauPtr tPtr ldtPtr+      liftIO $ Call.freezeArray t++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clarfx.f>+larfx ::+   Char {- ^ side -} ->+   Int {- ^ m -} ->+   Array ZeroInt (Complex Float) {- ^ v -} ->+   Complex Float {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ c -} ->+   Int {- ^ workSize -} ->+   IO ()+larfx side m v tau c workSize = do+   let vDim0 = Call.sizes1 $ Array.shape v+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _vSize = vDim0+   let n = cDim0+   let ldc = cDim1+   work <- Call.newArray1 workSize+   evalContT $ do+      sidePtr <- Call.char side+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      vPtr <- Call.array v+      tauPtr <- Call.complexFloat tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      liftIO $ FFI.larfx sidePtr mPtr nPtr vPtr tauPtr cPtr ldcPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clargv.f>+largv ::+   Int {- ^ n -} ->+   IOArray ZeroInt (Complex Float) {- ^ x -} ->+   Int {- ^ incx -} ->+   IOArray ZeroInt (Complex Float) {- ^ y -} ->+   Int {- ^ incy -} ->+   Int {- ^ incc -} ->+   IO (Array ZeroInt Float)+largv n x incx y incy incc = do+   let xDim0 = Call.sizes1 $ MutArray.shape x+   let yDim0 = Call.sizes1 $ MutArray.shape y+   Call.assert "largv: 1+(n-1)*incx == xDim0" (1+(n-1)*incx == xDim0)+   Call.assert "largv: 1+(n-1)*incy == yDim0" (1+(n-1)*incy == yDim0)+   c <- Call.newArray1 (1+(n-1)*incc)+   evalContT $ do+      nPtr <- Call.cint n+      xPtr <- Call.ioarray x+      incxPtr <- Call.cint incx+      yPtr <- Call.ioarray y+      incyPtr <- Call.cint incy+      cPtr <- Call.ioarray c+      inccPtr <- Call.cint incc+      liftIO $ FFI.largv nPtr xPtr incxPtr yPtr incyPtr cPtr inccPtr+      liftIO $ Call.freezeArray c++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clarnv.f>+larnv ::+   Int {- ^ idist -} ->+   IOArray ZeroInt CInt {- ^ iseed -} ->+   Int {- ^ n -} ->+   IO (Array ZeroInt (Complex Float))+larnv idist iseed n = do+   let iseedDim0 = Call.sizes1 $ MutArray.shape iseed+   Call.assert "larnv: 4 == iseedDim0" (4 == iseedDim0)+   x <- Call.newArray1 n+   evalContT $ do+      idistPtr <- Call.cint idist+      iseedPtr <- Call.ioarray iseed+      nPtr <- Call.cint n+      xPtr <- Call.ioarray x+      liftIO $ FFI.larnv idistPtr iseedPtr nPtr xPtr+      liftIO $ Call.freezeArray x++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clarrv.f>+larrv ::+   Float {- ^ vl -} ->+   Float {- ^ vu -} ->+   IOArray ZeroInt Float {- ^ d -} ->+   IOArray ZeroInt Float {- ^ l -} ->+   Float {- ^ pivmin -} ->+   Array ZeroInt CInt {- ^ isplit -} ->+   Int {- ^ m -} ->+   Int {- ^ dol -} ->+   Int {- ^ dou -} ->+   Float {- ^ minrgp -} ->+   Float {- ^ rtol1 -} ->+   Float {- ^ rtol2 -} ->+   IOArray ZeroInt Float {- ^ w -} ->+   IOArray ZeroInt Float {- ^ werr -} ->+   IOArray ZeroInt Float {- ^ wgap -} ->+   Array ZeroInt CInt {- ^ iblock -} ->+   Array ZeroInt CInt {- ^ indexw -} ->+   Array ZeroInt Float {- ^ gers -} ->+   Int {- ^ ldz -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Float), Array ZeroInt CInt, Int)+larrv vl vu d l pivmin isplit m dol dou minrgp rtol1 rtol2 w werr wgap iblock indexw gers ldz = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let lDim0 = Call.sizes1 $ MutArray.shape l+   let isplitDim0 = Call.sizes1 $ Array.shape isplit+   let wDim0 = Call.sizes1 $ MutArray.shape w+   let werrDim0 = Call.sizes1 $ MutArray.shape werr+   let wgapDim0 = Call.sizes1 $ MutArray.shape wgap+   let iblockDim0 = Call.sizes1 $ Array.shape iblock+   let indexwDim0 = Call.sizes1 $ Array.shape indexw+   let gersDim0 = Call.sizes1 $ Array.shape gers+   let n = dDim0+   Call.assert "larrv: n == lDim0" (n == lDim0)+   Call.assert "larrv: n == isplitDim0" (n == isplitDim0)+   Call.assert "larrv: n == wDim0" (n == wDim0)+   Call.assert "larrv: n == werrDim0" (n == werrDim0)+   Call.assert "larrv: n == wgapDim0" (n == wgapDim0)+   Call.assert "larrv: n == iblockDim0" (n == iblockDim0)+   Call.assert "larrv: n == indexwDim0" (n == indexwDim0)+   Call.assert "larrv: 2*n == gersDim0" (2*n == gersDim0)+   z <- Call.newArray2 (maximum[1,m]) ldz+   isuppz <- Call.newArray1 (2*maximum[1,m])+   work <- Call.newArray1 (12*n)+   iwork <- Call.newArray1 (7*n)+   evalContT $ do+      nPtr <- Call.cint n+      vlPtr <- Call.float vl+      vuPtr <- Call.float vu+      dPtr <- Call.ioarray d+      lPtr <- Call.ioarray l+      pivminPtr <- Call.float pivmin+      isplitPtr <- Call.array isplit+      mPtr <- Call.cint m+      dolPtr <- Call.cint dol+      douPtr <- Call.cint dou+      minrgpPtr <- Call.float minrgp+      rtol1Ptr <- Call.float rtol1+      rtol2Ptr <- Call.float rtol2+      wPtr <- Call.ioarray w+      werrPtr <- Call.ioarray werr+      wgapPtr <- Call.ioarray wgap+      iblockPtr <- Call.array iblock+      indexwPtr <- Call.array indexw+      gersPtr <- Call.array gers+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      isuppzPtr <- Call.ioarray isuppz+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.larrv nPtr vlPtr vuPtr dPtr lPtr pivminPtr isplitPtr mPtr dolPtr douPtr minrgpPtr rtol1Ptr rtol2Ptr wPtr werrPtr wgapPtr iblockPtr indexwPtr gersPtr zPtr ldzPtr isuppzPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray z+         <*> Call.freezeArray isuppz+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clartg.f>+lartg ::+   Complex Float {- ^ f -} ->+   Complex Float {- ^ g -} ->+   IO (Float, Complex Float, Complex Float)+lartg f g = do+   evalContT $ do+      fPtr <- Call.complexFloat f+      gPtr <- Call.complexFloat g+      csPtr <- Call.alloca+      snPtr <- Call.alloca+      rPtr <- Call.alloca+      liftIO $ FFI.lartg fPtr gPtr csPtr snPtr rPtr+      liftIO $ pure (,,)+         <*> peek csPtr+         <*> peek snPtr+         <*> peek rPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clartv.f>+lartv ::+   Int {- ^ n -} ->+   IOArray ZeroInt (Complex Float) {- ^ x -} ->+   Int {- ^ incx -} ->+   IOArray ZeroInt (Complex Float) {- ^ y -} ->+   Int {- ^ incy -} ->+   Array ZeroInt Float {- ^ c -} ->+   Array ZeroInt (Complex Float) {- ^ s -} ->+   Int {- ^ incc -} ->+   IO ()+lartv n x incx y incy c s incc = do+   let xDim0 = Call.sizes1 $ MutArray.shape x+   let yDim0 = Call.sizes1 $ MutArray.shape y+   let cDim0 = Call.sizes1 $ Array.shape c+   let sDim0 = Call.sizes1 $ Array.shape s+   Call.assert "lartv: 1+(n-1)*incx == xDim0" (1+(n-1)*incx == xDim0)+   Call.assert "lartv: 1+(n-1)*incy == yDim0" (1+(n-1)*incy == yDim0)+   Call.assert "lartv: 1+(n-1)*incc == cDim0" (1+(n-1)*incc == cDim0)+   Call.assert "lartv: 1+(n-1)*incc == sDim0" (1+(n-1)*incc == sDim0)+   evalContT $ do+      nPtr <- Call.cint n+      xPtr <- Call.ioarray x+      incxPtr <- Call.cint incx+      yPtr <- Call.ioarray y+      incyPtr <- Call.cint incy+      cPtr <- Call.array c+      sPtr <- Call.array s+      inccPtr <- Call.cint incc+      liftIO $ FFI.lartv nPtr xPtr incxPtr yPtr incyPtr cPtr sPtr inccPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clarz.f>+larz ::+   Char {- ^ side -} ->+   Int {- ^ m -} ->+   Int {- ^ l -} ->+   Array ZeroInt (Complex Float) {- ^ v -} ->+   Int {- ^ incv -} ->+   Complex Float {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ c -} ->+   Int {- ^ workSize -} ->+   IO ()+larz side m l v incv tau c workSize = do+   let vDim0 = Call.sizes1 $ Array.shape v+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let n = cDim0+   let ldc = cDim1+   Call.assert "larz: 1+(l-1)*abs(incv) == vDim0" (1+(l-1)*abs(incv) == vDim0)+   work <- Call.newArray1 workSize+   evalContT $ do+      sidePtr <- Call.char side+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      lPtr <- Call.cint l+      vPtr <- Call.array v+      incvPtr <- Call.cint incv+      tauPtr <- Call.complexFloat tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      liftIO $ FFI.larz sidePtr mPtr nPtr lPtr vPtr incvPtr tauPtr cPtr ldcPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clarzb.f>+larzb ::+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Char {- ^ direct -} ->+   Char {- ^ storev -} ->+   Int {- ^ m -} ->+   Int {- ^ l -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ v -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ t -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ c -} ->+   Int {- ^ ldwork -} ->+   IO ()+larzb side trans direct storev m l v t c ldwork = do+   let (vDim0,vDim1) = Call.sizes2 $ Array.shape v+   let (tDim0,tDim1) = Call.sizes2 $ Array.shape t+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _nv = vDim0+   let ldv = vDim1+   let k = tDim0+   let ldt = tDim1+   let n = cDim0+   let ldc = cDim1+   work <- Call.newArray2 k ldwork+   evalContT $ do+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      directPtr <- Call.char direct+      storevPtr <- Call.char storev+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      lPtr <- Call.cint l+      vPtr <- Call.array v+      ldvPtr <- Call.cint ldv+      tPtr <- Call.array t+      ldtPtr <- Call.cint ldt+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      ldworkPtr <- Call.cint ldwork+      liftIO $ FFI.larzb sidePtr transPtr directPtr storevPtr mPtr nPtr kPtr lPtr vPtr ldvPtr tPtr ldtPtr cPtr ldcPtr workPtr ldworkPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clarzt.f>+larzt ::+   Char {- ^ direct -} ->+   Char {- ^ storev -} ->+   Int {- ^ n -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ v -} ->+   Array ZeroInt (Complex Float) {- ^ tau -} ->+   Int {- ^ ldt -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Float))+larzt direct storev n v tau ldt = do+   let (vDim0,vDim1) = Call.sizes2 $ MutArray.shape v+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let _vSize = vDim0+   let ldv = vDim1+   let k = tauDim0+   t <- Call.newArray2 k ldt+   evalContT $ do+      directPtr <- Call.char direct+      storevPtr <- Call.char storev+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      vPtr <- Call.ioarray v+      ldvPtr <- Call.cint ldv+      tauPtr <- Call.array tau+      tPtr <- Call.ioarray t+      ldtPtr <- Call.cint ldt+      liftIO $ FFI.larzt directPtr storevPtr nPtr kPtr vPtr ldvPtr tauPtr tPtr ldtPtr+      liftIO $ Call.freezeArray t++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clascl.f>+lascl ::+   Char {- ^ type_ -} ->+   Int {- ^ kl -} ->+   Int {- ^ ku -} ->+   Float {- ^ cfrom -} ->+   Float {- ^ cto -} ->+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IO (Int)+lascl type_ kl ku cfrom cto m a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   evalContT $ do+      type_Ptr <- Call.char type_+      klPtr <- Call.cint kl+      kuPtr <- Call.cint ku+      cfromPtr <- Call.float cfrom+      ctoPtr <- Call.float cto+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      infoPtr <- Call.alloca+      liftIO $ FFI.lascl type_Ptr klPtr kuPtr cfromPtr ctoPtr mPtr nPtr aPtr ldaPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/claset.f>+laset ::+   Char {- ^ uplo -} ->+   Int {- ^ m -} ->+   Int {- ^ n -} ->+   Complex Float {- ^ alpha -} ->+   Complex Float {- ^ beta -} ->+   Int {- ^ lda -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Float))+laset uplo m n alpha beta lda = do+   a <- Call.newArray2 n lda+   evalContT $ do+      uploPtr <- Call.char uplo+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      alphaPtr <- Call.complexFloat alpha+      betaPtr <- Call.complexFloat beta+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      liftIO $ FFI.laset uploPtr mPtr nPtr alphaPtr betaPtr aPtr ldaPtr+      liftIO $ Call.freezeArray a++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clasr.f>+lasr ::+   Char {- ^ side -} ->+   Char {- ^ pivot -} ->+   Char {- ^ direct -} ->+   Int {- ^ m -} ->+   Array ZeroInt Float {- ^ c -} ->+   Array ZeroInt Float {- ^ s -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IO ()+lasr side pivot direct m c s a = do+   let cDim0 = Call.sizes1 $ Array.shape c+   let sDim0 = Call.sizes1 $ Array.shape s+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let _cSize = cDim0+   let _sSize = sDim0+   let n = aDim0+   let lda = aDim1+   evalContT $ do+      sidePtr <- Call.char side+      pivotPtr <- Call.char pivot+      directPtr <- Call.char direct+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      cPtr <- Call.array c+      sPtr <- Call.array s+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      liftIO $ FFI.lasr sidePtr pivotPtr directPtr mPtr nPtr cPtr sPtr aPtr ldaPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/classq.f>+lassq ::+   Array ZeroInt (Complex Float) {- ^ x -} ->+   Int {- ^ incx -} ->+   Float {- ^ scale -} ->+   Float {- ^ sumsq -} ->+   IO (Float, Float)+lassq x incx scale sumsq = do+   let xDim0 = Call.sizes1 $ Array.shape x+   let n = xDim0+   evalContT $ do+      nPtr <- Call.cint n+      xPtr <- Call.array x+      incxPtr <- Call.cint incx+      scalePtr <- Call.float scale+      sumsqPtr <- Call.float sumsq+      liftIO $ FFI.lassq nPtr xPtr incxPtr scalePtr sumsqPtr+      liftIO $ pure (,)+         <*> peek scalePtr+         <*> peek sumsqPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/claswp.f>+laswp ::+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Int {- ^ k1 -} ->+   Int {- ^ k2 -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Int {- ^ incx -} ->+   IO ()+laswp a k1 k2 ipiv incx = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = aDim0+   let lda = aDim1+   Call.assert "laswp: k1+(k2-k1)*abs(incx) == ipivDim0" (k1+(k2-k1)*abs(incx) == ipivDim0)+   evalContT $ do+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      k1Ptr <- Call.cint k1+      k2Ptr <- Call.cint k2+      ipivPtr <- Call.array ipiv+      incxPtr <- Call.cint incx+      liftIO $ FFI.laswp nPtr aPtr ldaPtr k1Ptr k2Ptr ipivPtr incxPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clasyf.f>+lasyf ::+   Char {- ^ uplo -} ->+   Int {- ^ nb -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Int {- ^ ldw -} ->+   IO (Int, Array ZeroInt CInt, Array (ZeroInt,ZeroInt) (Complex Float), Int)+lasyf uplo nb a ldw = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   ipiv <- Call.newArray1 n+   w <- Call.newArray2 nb ldw+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nbPtr <- Call.cint nb+      kbPtr <- Call.alloca+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.ioarray ipiv+      wPtr <- Call.ioarray w+      ldwPtr <- Call.cint ldw+      infoPtr <- Call.alloca+      liftIO $ FFI.lasyf uploPtr nPtr nbPtr kbPtr aPtr ldaPtr ipivPtr wPtr ldwPtr infoPtr+      liftIO $ pure (,,,)+         <*> fmap fromIntegral (peek kbPtr)+         <*> Call.freezeArray ipiv+         <*> Call.freezeArray w+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clatbs.f>+latbs ::+   Char {- ^ uplo -} ->+   Char {- ^ trans -} ->+   Char {- ^ diag -} ->+   Char {- ^ normin -} ->+   Int {- ^ kd -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->+   IOArray ZeroInt (Complex Float) {- ^ x -} ->+   IOArray ZeroInt Float {- ^ cnorm -} ->+   IO (Float, Int)+latbs uplo trans diag normin kd ab x cnorm = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let xDim0 = Call.sizes1 $ MutArray.shape x+   let cnormDim0 = Call.sizes1 $ MutArray.shape cnorm+   let n = abDim0+   let ldab = abDim1+   Call.assert "latbs: n == xDim0" (n == xDim0)+   Call.assert "latbs: n == cnormDim0" (n == cnormDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      transPtr <- Call.char trans+      diagPtr <- Call.char diag+      norminPtr <- Call.char normin+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      xPtr <- Call.ioarray x+      scalePtr <- Call.alloca+      cnormPtr <- Call.ioarray cnorm+      infoPtr <- Call.alloca+      liftIO $ FFI.latbs uploPtr transPtr diagPtr norminPtr nPtr kdPtr abPtr ldabPtr xPtr scalePtr cnormPtr infoPtr+      liftIO $ pure (,)+         <*> peek scalePtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clatdf.f>+latdf ::+   Int {- ^ ijob -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ z -} ->+   IOArray ZeroInt (Complex Float) {- ^ rhs -} ->+   Float {- ^ rdsum -} ->+   Float {- ^ rdscal -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Array ZeroInt CInt {- ^ jpiv -} ->+   IO (Float, Float)+latdf ijob z rhs rdsum rdscal ipiv jpiv = do+   let (zDim0,zDim1) = Call.sizes2 $ Array.shape z+   let rhsDim0 = Call.sizes1 $ MutArray.shape rhs+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let jpivDim0 = Call.sizes1 $ Array.shape jpiv+   let n = zDim0+   let ldz = zDim1+   Call.assert "latdf: n == rhsDim0" (n == rhsDim0)+   Call.assert "latdf: n == ipivDim0" (n == ipivDim0)+   Call.assert "latdf: n == jpivDim0" (n == jpivDim0)+   evalContT $ do+      ijobPtr <- Call.cint ijob+      nPtr <- Call.cint n+      zPtr <- Call.array z+      ldzPtr <- Call.cint ldz+      rhsPtr <- Call.ioarray rhs+      rdsumPtr <- Call.float rdsum+      rdscalPtr <- Call.float rdscal+      ipivPtr <- Call.array ipiv+      jpivPtr <- Call.array jpiv+      liftIO $ FFI.latdf ijobPtr nPtr zPtr ldzPtr rhsPtr rdsumPtr rdscalPtr ipivPtr jpivPtr+      liftIO $ pure (,)+         <*> peek rdsumPtr+         <*> peek rdscalPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clatps.f>+latps ::+   Char {- ^ uplo -} ->+   Char {- ^ trans -} ->+   Char {- ^ diag -} ->+   Char {- ^ normin -} ->+   Array ZeroInt (Complex Float) {- ^ ap -} ->+   IOArray ZeroInt (Complex Float) {- ^ x -} ->+   IOArray ZeroInt Float {- ^ cnorm -} ->+   IO (Float, Int)+latps uplo trans diag normin ap x cnorm = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let xDim0 = Call.sizes1 $ MutArray.shape x+   let cnormDim0 = Call.sizes1 $ MutArray.shape cnorm+   let n = xDim0+   Call.assert "latps: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   Call.assert "latps: n == cnormDim0" (n == cnormDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      transPtr <- Call.char trans+      diagPtr <- Call.char diag+      norminPtr <- Call.char normin+      nPtr <- Call.cint n+      apPtr <- Call.array ap+      xPtr <- Call.ioarray x+      scalePtr <- Call.alloca+      cnormPtr <- Call.ioarray cnorm+      infoPtr <- Call.alloca+      liftIO $ FFI.latps uploPtr transPtr diagPtr norminPtr nPtr apPtr xPtr scalePtr cnormPtr infoPtr+      liftIO $ pure (,)+         <*> peek scalePtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clatrd.f>+latrd ::+   Char {- ^ uplo -} ->+   Int {- ^ nb -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Int {- ^ ldw -} ->+   IO (Array ZeroInt Float, Array ZeroInt (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float))+latrd uplo nb a ldw = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   e <- Call.newArray1 (n-1)+   tau <- Call.newArray1 (n-1)+   w <- Call.newArray2 nb ldw+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nbPtr <- Call.cint nb+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ePtr <- Call.ioarray e+      tauPtr <- Call.ioarray tau+      wPtr <- Call.ioarray w+      ldwPtr <- Call.cint ldw+      liftIO $ FFI.latrd uploPtr nPtr nbPtr aPtr ldaPtr ePtr tauPtr wPtr ldwPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray e+         <*> Call.freezeArray tau+         <*> Call.freezeArray w++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clatrs.f>+latrs ::+   Char {- ^ uplo -} ->+   Char {- ^ trans -} ->+   Char {- ^ diag -} ->+   Char {- ^ normin -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IOArray ZeroInt (Complex Float) {- ^ x -} ->+   IOArray ZeroInt Float {- ^ cnorm -} ->+   IO (Float, Int)+latrs uplo trans diag normin a x cnorm = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let xDim0 = Call.sizes1 $ MutArray.shape x+   let cnormDim0 = Call.sizes1 $ MutArray.shape cnorm+   let n = aDim0+   let lda = aDim1+   Call.assert "latrs: n == xDim0" (n == xDim0)+   Call.assert "latrs: n == cnormDim0" (n == cnormDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      transPtr <- Call.char trans+      diagPtr <- Call.char diag+      norminPtr <- Call.char normin+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      xPtr <- Call.ioarray x+      scalePtr <- Call.alloca+      cnormPtr <- Call.ioarray cnorm+      infoPtr <- Call.alloca+      liftIO $ FFI.latrs uploPtr transPtr diagPtr norminPtr nPtr aPtr ldaPtr xPtr scalePtr cnormPtr infoPtr+      liftIO $ pure (,)+         <*> peek scalePtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clatrz.f>+latrz ::+   Int {- ^ m -} ->+   Int {- ^ l -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IO (Array ZeroInt (Complex Float))+latrz m l a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 m+   work <- Call.newArray1 m+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      lPtr <- Call.cint l+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      liftIO $ FFI.latrz mPtr nPtr lPtr aPtr ldaPtr tauPtr workPtr+      liftIO $ Call.freezeArray tau++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clauu2.f>+lauu2 ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IO (Int)+lauu2 uplo a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      infoPtr <- Call.alloca+      liftIO $ FFI.lauu2 uploPtr nPtr aPtr ldaPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clauum.f>+lauum ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IO (Int)+lauum uplo a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      infoPtr <- Call.alloca+      liftIO $ FFI.lauum uploPtr nPtr aPtr ldaPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpbcon.f>+pbcon ::+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->+   Float {- ^ anorm -} ->+   IO (Float, Int)+pbcon uplo kd ab anorm = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let n = abDim0+   let ldab = abDim1+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      anormPtr <- Call.float anorm+      rcondPtr <- Call.alloca+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.pbcon uploPtr nPtr kdPtr abPtr ldabPtr anormPtr rcondPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,)+         <*> peek rcondPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpbequ.f>+pbequ ::+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->+   IO (Array ZeroInt Float, Float, Float, Int)+pbequ uplo kd ab = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let n = abDim0+   let ldab = abDim1+   s <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      sPtr <- Call.ioarray s+      scondPtr <- Call.alloca+      amaxPtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.pbequ uploPtr nPtr kdPtr abPtr ldabPtr sPtr scondPtr amaxPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray s+         <*> peek scondPtr+         <*> peek amaxPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpbrfs.f>+pbrfs ::+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ afb -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ x -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Int)+pbrfs uplo kd ab afb b x = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let (afbDim0,afbDim1) = Call.sizes2 $ Array.shape afb+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (xDim0,xDim1) = Call.sizes2 $ MutArray.shape x+   let n = abDim0+   let ldab = abDim1+   let ldafb = afbDim1+   let nrhs = bDim0+   let ldb = bDim1+   let ldx = xDim1+   Call.assert "pbrfs: n == afbDim0" (n == afbDim0)+   Call.assert "pbrfs: nrhs == xDim0" (nrhs == xDim0)+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      nrhsPtr <- Call.cint nrhs+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      afbPtr <- Call.array afb+      ldafbPtr <- Call.cint ldafb+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.pbrfs uploPtr nPtr kdPtr nrhsPtr abPtr ldabPtr afbPtr ldafbPtr bPtr ldbPtr xPtr ldxPtr ferrPtr berrPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpbstf.f>+pbstf ::+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->+   IO (Int)+pbstf uplo kd ab = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let n = abDim0+   let ldab = abDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      infoPtr <- Call.alloca+      liftIO $ FFI.pbstf uploPtr nPtr kdPtr abPtr ldabPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpbsv.f>+pbsv ::+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   IO (Int)+pbsv uplo kd ab b = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = abDim0+   let ldab = abDim1+   let nrhs = bDim0+   let ldb = bDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      nrhsPtr <- Call.cint nrhs+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.pbsv uploPtr nPtr kdPtr nrhsPtr abPtr ldabPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpbsvx.f>+pbsvx ::+   Char {- ^ fact -} ->+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ afb -} ->+   Char {- ^ equed -} ->+   IOArray ZeroInt Float {- ^ s -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   Int {- ^ ldx -} ->+   IO (Char, Array (ZeroInt,ZeroInt) (Complex Float), Float, Array ZeroInt Float, Array ZeroInt Float, Int)+pbsvx fact uplo kd ab afb equed s b ldx = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let (afbDim0,afbDim1) = Call.sizes2 $ MutArray.shape afb+   let sDim0 = Call.sizes1 $ MutArray.shape s+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = abDim0+   let ldab = abDim1+   let ldafb = afbDim1+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "pbsvx: n == afbDim0" (n == afbDim0)+   Call.assert "pbsvx: n == sDim0" (n == sDim0)+   x <- Call.newArray2 nrhs ldx+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      factPtr <- Call.char fact+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      nrhsPtr <- Call.cint nrhs+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      afbPtr <- Call.ioarray afb+      ldafbPtr <- Call.cint ldafb+      equedPtr <- Call.char equed+      sPtr <- Call.ioarray s+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      rcondPtr <- Call.alloca+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.pbsvx factPtr uploPtr nPtr kdPtr nrhsPtr abPtr ldabPtr afbPtr ldafbPtr equedPtr sPtr bPtr ldbPtr xPtr ldxPtr rcondPtr ferrPtr berrPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> fmap castCCharToChar (peek equedPtr)+         <*> Call.freezeArray x+         <*> peek rcondPtr+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpbtf2.f>+pbtf2 ::+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->+   IO (Int)+pbtf2 uplo kd ab = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let n = abDim0+   let ldab = abDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      infoPtr <- Call.alloca+      liftIO $ FFI.pbtf2 uploPtr nPtr kdPtr abPtr ldabPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpbtrf.f>+pbtrf ::+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->+   IO (Int)+pbtrf uplo kd ab = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let n = abDim0+   let ldab = abDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      infoPtr <- Call.alloca+      liftIO $ FFI.pbtrf uploPtr nPtr kdPtr abPtr ldabPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpbtrs.f>+pbtrs ::+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   IO (Int)+pbtrs uplo kd ab b = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = abDim0+   let ldab = abDim1+   let nrhs = bDim0+   let ldb = bDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      nrhsPtr <- Call.cint nrhs+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.pbtrs uploPtr nPtr kdPtr nrhsPtr abPtr ldabPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpftrf.f>+pftrf ::+   Char {- ^ transr -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt (Complex Float) {- ^ a -} ->+   IO (Int)+pftrf transr uplo n a = do+   let aDim0 = Call.sizes1 $ MutArray.shape a+   Call.assert "pftrf: n*(n+1)`div`2 == aDim0" (n*(n+1)`div`2 == aDim0)+   evalContT $ do+      transrPtr <- Call.char transr+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      infoPtr <- Call.alloca+      liftIO $ FFI.pftrf transrPtr uploPtr nPtr aPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpftri.f>+pftri ::+   Char {- ^ transr -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt (Complex Float) {- ^ a -} ->+   IO (Int)+pftri transr uplo n a = do+   let aDim0 = Call.sizes1 $ MutArray.shape a+   Call.assert "pftri: n*(n+1)`div`2 == aDim0" (n*(n+1)`div`2 == aDim0)+   evalContT $ do+      transrPtr <- Call.char transr+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      infoPtr <- Call.alloca+      liftIO $ FFI.pftri transrPtr uploPtr nPtr aPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpftrs.f>+pftrs ::+   Char {- ^ transr -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Array ZeroInt (Complex Float) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   IO (Int)+pftrs transr uplo n a b = do+   let aDim0 = Call.sizes1 $ Array.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "pftrs: n*(n+1)`div`2 == aDim0" (n*(n+1)`div`2 == aDim0)+   evalContT $ do+      transrPtr <- Call.char transr+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.array a+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.pftrs transrPtr uploPtr nPtr nrhsPtr aPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpocon.f>+pocon ::+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Float {- ^ anorm -} ->+   IO (Float, Int)+pocon uplo a anorm = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      anormPtr <- Call.float anorm+      rcondPtr <- Call.alloca+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.pocon uploPtr nPtr aPtr ldaPtr anormPtr rcondPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,)+         <*> peek rcondPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpoequ.f>+poequ ::+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IO (Array ZeroInt Float, Float, Float, Int)+poequ a = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   s <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      sPtr <- Call.ioarray s+      scondPtr <- Call.alloca+      amaxPtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.poequ nPtr aPtr ldaPtr sPtr scondPtr amaxPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray s+         <*> peek scondPtr+         <*> peek amaxPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpoequb.f>+poequb ::+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IO (Array ZeroInt Float, Float, Float, Int)+poequb a = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   s <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      sPtr <- Call.ioarray s+      scondPtr <- Call.alloca+      amaxPtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.poequb nPtr aPtr ldaPtr sPtr scondPtr amaxPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray s+         <*> peek scondPtr+         <*> peek amaxPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cporfs.f>+porfs ::+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ af -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ x -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Int)+porfs uplo a af b x = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (afDim0,afDim1) = Call.sizes2 $ Array.shape af+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (xDim0,xDim1) = Call.sizes2 $ MutArray.shape x+   let n = aDim0+   let lda = aDim1+   let ldaf = afDim1+   let nrhs = bDim0+   let ldb = bDim1+   let ldx = xDim1+   Call.assert "porfs: n == afDim0" (n == afDim0)+   Call.assert "porfs: nrhs == xDim0" (nrhs == xDim0)+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      afPtr <- Call.array af+      ldafPtr <- Call.cint ldaf+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.porfs uploPtr nPtr nrhsPtr aPtr ldaPtr afPtr ldafPtr bPtr ldbPtr xPtr ldxPtr ferrPtr berrPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cposv.f>+posv ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   IO (Int)+posv uplo a b = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.posv uploPtr nPtr nrhsPtr aPtr ldaPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cposvx.f>+posvx ::+   Char {- ^ fact -} ->+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ af -} ->+   Char {- ^ equed -} ->+   IOArray ZeroInt Float {- ^ s -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   Int {- ^ ldx -} ->+   IO (Char, Array (ZeroInt,ZeroInt) (Complex Float), Float, Array ZeroInt Float, Array ZeroInt Float, Int)+posvx fact uplo a af equed s b ldx = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (afDim0,afDim1) = Call.sizes2 $ MutArray.shape af+   let sDim0 = Call.sizes1 $ MutArray.shape s+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let ldaf = afDim1+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "posvx: n == afDim0" (n == afDim0)+   Call.assert "posvx: n == sDim0" (n == sDim0)+   x <- Call.newArray2 nrhs ldx+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      factPtr <- Call.char fact+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      afPtr <- Call.ioarray af+      ldafPtr <- Call.cint ldaf+      equedPtr <- Call.char equed+      sPtr <- Call.ioarray s+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      rcondPtr <- Call.alloca+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.posvx factPtr uploPtr nPtr nrhsPtr aPtr ldaPtr afPtr ldafPtr equedPtr sPtr bPtr ldbPtr xPtr ldxPtr rcondPtr ferrPtr berrPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> fmap castCCharToChar (peek equedPtr)+         <*> Call.freezeArray x+         <*> peek rcondPtr+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpotf2.f>+potf2 ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IO (Int)+potf2 uplo a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      infoPtr <- Call.alloca+      liftIO $ FFI.potf2 uploPtr nPtr aPtr ldaPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpotrf.f>+potrf ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IO (Int)+potrf uplo a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      infoPtr <- Call.alloca+      liftIO $ FFI.potrf uploPtr nPtr aPtr ldaPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpotri.f>+potri ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IO (Int)+potri uplo a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      infoPtr <- Call.alloca+      liftIO $ FFI.potri uploPtr nPtr aPtr ldaPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpotrs.f>+potrs ::+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   IO (Int)+potrs uplo a b = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.potrs uploPtr nPtr nrhsPtr aPtr ldaPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cppcon.f>+ppcon ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Array ZeroInt (Complex Float) {- ^ ap -} ->+   Float {- ^ anorm -} ->+   IO (Float, Int)+ppcon uplo n ap anorm = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   Call.assert "ppcon: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.array ap+      anormPtr <- Call.float anorm+      rcondPtr <- Call.alloca+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ppcon uploPtr nPtr apPtr anormPtr rcondPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,)+         <*> peek rcondPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cppequ.f>+ppequ ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Array ZeroInt (Complex Float) {- ^ ap -} ->+   IO (Array ZeroInt Float, Float, Float, Int)+ppequ uplo n ap = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   Call.assert "ppequ: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   s <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.array ap+      sPtr <- Call.ioarray s+      scondPtr <- Call.alloca+      amaxPtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.ppequ uploPtr nPtr apPtr sPtr scondPtr amaxPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray s+         <*> peek scondPtr+         <*> peek amaxPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpprfs.f>+pprfs ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Array ZeroInt (Complex Float) {- ^ ap -} ->+   Array ZeroInt (Complex Float) {- ^ afp -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ x -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Int)+pprfs uplo n ap afp b x = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let afpDim0 = Call.sizes1 $ Array.shape afp+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (xDim0,xDim1) = Call.sizes2 $ MutArray.shape x+   let nrhs = bDim0+   let ldb = bDim1+   let ldx = xDim1+   Call.assert "pprfs: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   Call.assert "pprfs: n*(n+1)`div`2 == afpDim0" (n*(n+1)`div`2 == afpDim0)+   Call.assert "pprfs: nrhs == xDim0" (nrhs == xDim0)+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      apPtr <- Call.array ap+      afpPtr <- Call.array afp+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.pprfs uploPtr nPtr nrhsPtr apPtr afpPtr bPtr ldbPtr xPtr ldxPtr ferrPtr berrPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cppsv.f>+ppsv ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt (Complex Float) {- ^ ap -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   IO (Int)+ppsv uplo n ap b = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "ppsv: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      apPtr <- Call.ioarray ap+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.ppsv uploPtr nPtr nrhsPtr apPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cppsvx.f>+ppsvx ::+   Char {- ^ fact -} ->+   Char {- ^ uplo -} ->+   IOArray ZeroInt (Complex Float) {- ^ ap -} ->+   IOArray ZeroInt (Complex Float) {- ^ afp -} ->+   Char {- ^ equed -} ->+   IOArray ZeroInt Float {- ^ s -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   Int {- ^ ldx -} ->+   IO (Char, Array (ZeroInt,ZeroInt) (Complex Float), Float, Array ZeroInt Float, Array ZeroInt Float, Int)+ppsvx fact uplo ap afp equed s b ldx = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   let afpDim0 = Call.sizes1 $ MutArray.shape afp+   let sDim0 = Call.sizes1 $ MutArray.shape s+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = sDim0+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "ppsvx: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   Call.assert "ppsvx: n*(n+1)`div`2 == afpDim0" (n*(n+1)`div`2 == afpDim0)+   x <- Call.newArray2 nrhs ldx+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      factPtr <- Call.char fact+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      apPtr <- Call.ioarray ap+      afpPtr <- Call.ioarray afp+      equedPtr <- Call.char equed+      sPtr <- Call.ioarray s+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      rcondPtr <- Call.alloca+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ppsvx factPtr uploPtr nPtr nrhsPtr apPtr afpPtr equedPtr sPtr bPtr ldbPtr xPtr ldxPtr rcondPtr ferrPtr berrPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> fmap castCCharToChar (peek equedPtr)+         <*> Call.freezeArray x+         <*> peek rcondPtr+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpptrf.f>+pptrf ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt (Complex Float) {- ^ ap -} ->+   IO (Int)+pptrf uplo n ap = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   Call.assert "pptrf: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      infoPtr <- Call.alloca+      liftIO $ FFI.pptrf uploPtr nPtr apPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpptri.f>+pptri ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt (Complex Float) {- ^ ap -} ->+   IO (Int)+pptri uplo n ap = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   Call.assert "pptri: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      infoPtr <- Call.alloca+      liftIO $ FFI.pptri uploPtr nPtr apPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpptrs.f>+pptrs ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Array ZeroInt (Complex Float) {- ^ ap -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   IO (Int)+pptrs uplo n ap b = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "pptrs: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      apPtr <- Call.array ap+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.pptrs uploPtr nPtr nrhsPtr apPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpstf2.f>+pstf2 ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Float {- ^ tol -} ->+   IO (Array ZeroInt CInt, Int, Int)+pstf2 uplo a tol = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   piv <- Call.newArray1 n+   work <- Call.newArray1 (2*n)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      pivPtr <- Call.ioarray piv+      rankPtr <- Call.alloca+      tolPtr <- Call.float tol+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.pstf2 uploPtr nPtr aPtr ldaPtr pivPtr rankPtr tolPtr workPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray piv+         <*> fmap fromIntegral (peek rankPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpstrf.f>+pstrf ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Float {- ^ tol -} ->+   IO (Array ZeroInt CInt, Int, Int)+pstrf uplo a tol = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   piv <- Call.newArray1 n+   work <- Call.newArray1 (2*n)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      pivPtr <- Call.ioarray piv+      rankPtr <- Call.alloca+      tolPtr <- Call.float tol+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.pstrf uploPtr nPtr aPtr ldaPtr pivPtr rankPtr tolPtr workPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray piv+         <*> fmap fromIntegral (peek rankPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cptcon.f>+ptcon ::+   Array ZeroInt Float {- ^ d -} ->+   Array ZeroInt (Complex Float) {- ^ e -} ->+   Float {- ^ anorm -} ->+   IO (Float, Int)+ptcon d e anorm = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let eDim0 = Call.sizes1 $ Array.shape e+   let n = dDim0+   Call.assert "ptcon: n-1 == eDim0" (n-1 == eDim0)+   rwork <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      dPtr <- Call.array d+      ePtr <- Call.array e+      anormPtr <- Call.float anorm+      rcondPtr <- Call.alloca+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ptcon nPtr dPtr ePtr anormPtr rcondPtr rworkPtr infoPtr+      liftIO $ pure (,)+         <*> peek rcondPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpteqr.f>+pteqr ::+   Char {- ^ compz -} ->+   IOArray ZeroInt Float {- ^ d -} ->+   IOArray ZeroInt Float {- ^ e -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ z -} ->+   IO (Int)+pteqr compz d e z = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = dDim0+   let ldz = zDim1+   Call.assert "pteqr: n-1 == eDim0" (n-1 == eDim0)+   Call.assert "pteqr: n == zDim0" (n == zDim0)+   work <- Call.newArray1 (4*n)+   evalContT $ do+      compzPtr <- Call.char compz+      nPtr <- Call.cint n+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.pteqr compzPtr nPtr dPtr ePtr zPtr ldzPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cptrfs.f>+ptrfs ::+   Char {- ^ uplo -} ->+   Array ZeroInt Float {- ^ d -} ->+   Array ZeroInt (Complex Float) {- ^ e -} ->+   Array ZeroInt Float {- ^ df -} ->+   Array ZeroInt (Complex Float) {- ^ ef -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ x -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Int)+ptrfs uplo d e df ef b x = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let eDim0 = Call.sizes1 $ Array.shape e+   let dfDim0 = Call.sizes1 $ Array.shape df+   let efDim0 = Call.sizes1 $ Array.shape ef+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (xDim0,xDim1) = Call.sizes2 $ MutArray.shape x+   let n = dDim0+   let nrhs = bDim0+   let ldb = bDim1+   let ldx = xDim1+   Call.assert "ptrfs: n-1 == eDim0" (n-1 == eDim0)+   Call.assert "ptrfs: n == dfDim0" (n == dfDim0)+   Call.assert "ptrfs: n-1 == efDim0" (n-1 == efDim0)+   Call.assert "ptrfs: nrhs == xDim0" (nrhs == xDim0)+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 n+   rwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      dPtr <- Call.array d+      ePtr <- Call.array e+      dfPtr <- Call.array df+      efPtr <- Call.array ef+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ptrfs uploPtr nPtr nrhsPtr dPtr ePtr dfPtr efPtr bPtr ldbPtr xPtr ldxPtr ferrPtr berrPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cptsv.f>+ptsv ::+   IOArray ZeroInt Float {- ^ d -} ->+   IOArray ZeroInt (Complex Float) {- ^ e -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   IO (Int)+ptsv d e b = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = dDim0+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "ptsv: n-1 == eDim0" (n-1 == eDim0)+   evalContT $ do+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.ptsv nPtr nrhsPtr dPtr ePtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cptsvx.f>+ptsvx ::+   Char {- ^ fact -} ->+   Array ZeroInt Float {- ^ d -} ->+   Array ZeroInt (Complex Float) {- ^ e -} ->+   IOArray ZeroInt Float {- ^ df -} ->+   IOArray ZeroInt (Complex Float) {- ^ ef -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   Int {- ^ ldx -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Float), Float, Array ZeroInt Float, Array ZeroInt Float, Int)+ptsvx fact d e df ef b ldx = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let eDim0 = Call.sizes1 $ Array.shape e+   let dfDim0 = Call.sizes1 $ MutArray.shape df+   let efDim0 = Call.sizes1 $ MutArray.shape ef+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let n = dDim0+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "ptsvx: n-1 == eDim0" (n-1 == eDim0)+   Call.assert "ptsvx: n == dfDim0" (n == dfDim0)+   Call.assert "ptsvx: n-1 == efDim0" (n-1 == efDim0)+   x <- Call.newArray2 nrhs ldx+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 n+   rwork <- Call.newArray1 n+   evalContT $ do+      factPtr <- Call.char fact+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      dPtr <- Call.array d+      ePtr <- Call.array e+      dfPtr <- Call.ioarray df+      efPtr <- Call.ioarray ef+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      rcondPtr <- Call.alloca+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ptsvx factPtr nPtr nrhsPtr dPtr ePtr dfPtr efPtr bPtr ldbPtr xPtr ldxPtr rcondPtr ferrPtr berrPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,,,)+         <*> Call.freezeArray x+         <*> peek rcondPtr+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpttrf.f>+pttrf ::+   IOArray ZeroInt Float {- ^ d -} ->+   IOArray ZeroInt (Complex Float) {- ^ e -} ->+   IO (Int)+pttrf d e = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let n = dDim0+   Call.assert "pttrf: n-1 == eDim0" (n-1 == eDim0)+   evalContT $ do+      nPtr <- Call.cint n+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      infoPtr <- Call.alloca+      liftIO $ FFI.pttrf nPtr dPtr ePtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpttrs.f>+pttrs ::+   Char {- ^ uplo -} ->+   Array ZeroInt Float {- ^ d -} ->+   Array ZeroInt (Complex Float) {- ^ e -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   IO (Int)+pttrs uplo d e b = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let eDim0 = Call.sizes1 $ Array.shape e+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = dDim0+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "pttrs: n-1 == eDim0" (n-1 == eDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      dPtr <- Call.array d+      ePtr <- Call.array e+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.pttrs uploPtr nPtr nrhsPtr dPtr ePtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cptts2.f>+ptts2 ::+   Int {- ^ iuplo -} ->+   Array ZeroInt Float {- ^ d -} ->+   Array ZeroInt (Complex Float) {- ^ e -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   IO ()+ptts2 iuplo d e b = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let eDim0 = Call.sizes1 $ Array.shape e+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = dDim0+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "ptts2: n-1 == eDim0" (n-1 == eDim0)+   evalContT $ do+      iuploPtr <- Call.cint iuplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      dPtr <- Call.array d+      ePtr <- Call.array e+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      liftIO $ FFI.ptts2 iuploPtr nPtr nrhsPtr dPtr ePtr bPtr ldbPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/crot.f>+rot ::+   IOArray ZeroInt (Complex Float) {- ^ cx -} ->+   Int {- ^ incx -} ->+   IOArray ZeroInt (Complex Float) {- ^ cy -} ->+   Int {- ^ incy -} ->+   Float {- ^ c -} ->+   Complex Float {- ^ s -} ->+   IO ()+rot cx incx cy incy c s = do+   let cxDim0 = Call.sizes1 $ MutArray.shape cx+   let cyDim0 = Call.sizes1 $ MutArray.shape cy+   let n = cxDim0+   Call.assert "rot: n == cyDim0" (n == cyDim0)+   evalContT $ do+      nPtr <- Call.cint n+      cxPtr <- Call.ioarray cx+      incxPtr <- Call.cint incx+      cyPtr <- Call.ioarray cy+      incyPtr <- Call.cint incy+      cPtr <- Call.float c+      sPtr <- Call.complexFloat s+      liftIO $ FFI.rot nPtr cxPtr incxPtr cyPtr incyPtr cPtr sPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/csrscl.f>+rscl ::+   Int {- ^ n -} ->+   Float {- ^ sa -} ->+   IOArray ZeroInt (Complex Float) {- ^ sx -} ->+   Int {- ^ incx -} ->+   IO ()+rscl n sa sx incx = do+   let sxDim0 = Call.sizes1 $ MutArray.shape sx+   let _sxSize = sxDim0+   evalContT $ do+      nPtr <- Call.cint n+      saPtr <- Call.float sa+      sxPtr <- Call.ioarray sx+      incxPtr <- Call.cint incx+      liftIO $ FFI.rscl nPtr saPtr sxPtr incxPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cspcon.f>+spcon ::+   Char {- ^ uplo -} ->+   Array ZeroInt (Complex Float) {- ^ ap -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Float {- ^ anorm -} ->+   IO (Float, Int)+spcon uplo ap ipiv anorm = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = ipivDim0+   Call.assert "spcon: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   work <- Call.newArray1 (2*n)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.array ap+      ipivPtr <- Call.array ipiv+      anormPtr <- Call.float anorm+      rcondPtr <- Call.alloca+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.spcon uploPtr nPtr apPtr ipivPtr anormPtr rcondPtr workPtr infoPtr+      liftIO $ pure (,)+         <*> peek rcondPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cspmv.f>+spmv ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Complex Float {- ^ alpha -} ->+   Array ZeroInt (Complex Float) {- ^ ap -} ->+   Array ZeroInt (Complex Float) {- ^ x -} ->+   Int {- ^ incx -} ->+   Complex Float {- ^ beta -} ->+   IOArray ZeroInt (Complex Float) {- ^ y -} ->+   Int {- ^ incy -} ->+   IO ()+spmv uplo n alpha ap x incx beta y incy = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let xDim0 = Call.sizes1 $ Array.shape x+   let yDim0 = Call.sizes1 $ MutArray.shape y+   let _apSize = apDim0+   let _xSize = xDim0+   let _ySize = yDim0+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      alphaPtr <- Call.complexFloat alpha+      apPtr <- Call.array ap+      xPtr <- Call.array x+      incxPtr <- Call.cint incx+      betaPtr <- Call.complexFloat beta+      yPtr <- Call.ioarray y+      incyPtr <- Call.cint incy+      liftIO $ FFI.spmv uploPtr nPtr alphaPtr apPtr xPtr incxPtr betaPtr yPtr incyPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cspr.f>+spr ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Complex Float {- ^ alpha -} ->+   Array ZeroInt (Complex Float) {- ^ x -} ->+   Int {- ^ incx -} ->+   IOArray ZeroInt (Complex Float) {- ^ ap -} ->+   IO ()+spr uplo n alpha x incx ap = do+   let xDim0 = Call.sizes1 $ Array.shape x+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   let _xSize = xDim0+   let _apSize = apDim0+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      alphaPtr <- Call.complexFloat alpha+      xPtr <- Call.array x+      incxPtr <- Call.cint incx+      apPtr <- Call.ioarray ap+      liftIO $ FFI.spr uploPtr nPtr alphaPtr xPtr incxPtr apPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/csprfs.f>+sprfs ::+   Char {- ^ uplo -} ->+   Array ZeroInt (Complex Float) {- ^ ap -} ->+   Array ZeroInt (Complex Float) {- ^ afp -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ x -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Int)+sprfs uplo ap afp ipiv b x = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let afpDim0 = Call.sizes1 $ Array.shape afp+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (xDim0,xDim1) = Call.sizes2 $ MutArray.shape x+   let n = ipivDim0+   let nrhs = bDim0+   let ldb = bDim1+   let ldx = xDim1+   Call.assert "sprfs: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   Call.assert "sprfs: n*(n+1)`div`2 == afpDim0" (n*(n+1)`div`2 == afpDim0)+   Call.assert "sprfs: nrhs == xDim0" (nrhs == xDim0)+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      apPtr <- Call.array ap+      afpPtr <- Call.array afp+      ipivPtr <- Call.array ipiv+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.sprfs uploPtr nPtr nrhsPtr apPtr afpPtr ipivPtr bPtr ldbPtr xPtr ldxPtr ferrPtr berrPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cspsv.f>+spsv ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt (Complex Float) {- ^ ap -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   IO (Array ZeroInt CInt, Int)+spsv uplo n ap b = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "spsv: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   ipiv <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      apPtr <- Call.ioarray ap+      ipivPtr <- Call.ioarray ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.spsv uploPtr nPtr nrhsPtr apPtr ipivPtr bPtr ldbPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cspsvx.f>+spsvx ::+   Char {- ^ fact -} ->+   Char {- ^ uplo -} ->+   Array ZeroInt (Complex Float) {- ^ ap -} ->+   IOArray ZeroInt (Complex Float) {- ^ afp -} ->+   IOArray ZeroInt CInt {- ^ ipiv -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   Int {- ^ ldx -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Float), Float, Array ZeroInt Float, Array ZeroInt Float, Int)+spsvx fact uplo ap afp ipiv b ldx = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let afpDim0 = Call.sizes1 $ MutArray.shape afp+   let ipivDim0 = Call.sizes1 $ MutArray.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let n = ipivDim0+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "spsvx: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   Call.assert "spsvx: n*(n+1)`div`2 == afpDim0" (n*(n+1)`div`2 == afpDim0)+   x <- Call.newArray2 nrhs ldx+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      factPtr <- Call.char fact+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      apPtr <- Call.array ap+      afpPtr <- Call.ioarray afp+      ipivPtr <- Call.ioarray ipiv+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      rcondPtr <- Call.alloca+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.spsvx factPtr uploPtr nPtr nrhsPtr apPtr afpPtr ipivPtr bPtr ldbPtr xPtr ldxPtr rcondPtr ferrPtr berrPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,,,)+         <*> Call.freezeArray x+         <*> peek rcondPtr+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/csptrf.f>+sptrf ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt (Complex Float) {- ^ ap -} ->+   IO (Array ZeroInt CInt, Int)+sptrf uplo n ap = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   Call.assert "sptrf: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   ipiv <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      ipivPtr <- Call.ioarray ipiv+      infoPtr <- Call.alloca+      liftIO $ FFI.sptrf uploPtr nPtr apPtr ipivPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/csptri.f>+sptri ::+   Char {- ^ uplo -} ->+   IOArray ZeroInt (Complex Float) {- ^ ap -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   IO (Int)+sptri uplo ap ipiv = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = ipivDim0+   Call.assert "sptri: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   work <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      ipivPtr <- Call.array ipiv+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.sptri uploPtr nPtr apPtr ipivPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/csptrs.f>+sptrs ::+   Char {- ^ uplo -} ->+   Array ZeroInt (Complex Float) {- ^ ap -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   IO (Int)+sptrs uplo ap ipiv b = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = ipivDim0+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "sptrs: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      apPtr <- Call.array ap+      ipivPtr <- Call.array ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.sptrs uploPtr nPtr nrhsPtr apPtr ipivPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cstedc.f>+stedc ::+   Char {- ^ compz -} ->+   IOArray ZeroInt Float {- ^ d -} ->+   IOArray ZeroInt Float {- ^ e -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ z -} ->+   Int {- ^ lwork -} ->+   Int {- ^ lrwork -} ->+   Int {- ^ liwork -} ->+   IO (Int)+stedc compz d e z lwork lrwork liwork = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = dDim0+   let ldz = zDim1+   Call.assert "stedc: n-1 == eDim0" (n-1 == eDim0)+   Call.assert "stedc: n == zDim0" (n == zDim0)+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 (maximum[1,lrwork])+   iwork <- Call.newArray1 (maximum[1,liwork])+   evalContT $ do+      compzPtr <- Call.char compz+      nPtr <- Call.cint n+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      lrworkPtr <- Call.cint lrwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      infoPtr <- Call.alloca+      liftIO $ FFI.stedc compzPtr nPtr dPtr ePtr zPtr ldzPtr workPtr lworkPtr rworkPtr lrworkPtr iworkPtr liworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cstegr.f>+stegr ::+   Char {- ^ jobz -} ->+   Char {- ^ range -} ->+   IOArray ZeroInt Float {- ^ d -} ->+   IOArray ZeroInt Float {- ^ e -} ->+   Float {- ^ vl -} ->+   Float {- ^ vu -} ->+   Int {- ^ il -} ->+   Int {- ^ iu -} ->+   Float {- ^ abstol -} ->+   Int {- ^ m -} ->+   Int {- ^ ldz -} ->+   Int {- ^ lwork -} ->+   Int {- ^ liwork -} ->+   IO (Int, Array ZeroInt Float, Array (ZeroInt,ZeroInt) (Complex Float), Array ZeroInt CInt, Int)+stegr jobz range d e vl vu il iu abstol m ldz lwork liwork = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let n = dDim0+   Call.assert "stegr: n == eDim0" (n == eDim0)+   w <- Call.newArray1 n+   z <- Call.newArray2 (maximum[1,m]) ldz+   isuppz <- Call.newArray1 (2*maximum[1,m])+   work <- Call.newArray1 lwork+   iwork <- Call.newArray1 liwork+   evalContT $ do+      jobzPtr <- Call.char jobz+      rangePtr <- Call.char range+      nPtr <- Call.cint n+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      vlPtr <- Call.float vl+      vuPtr <- Call.float vu+      ilPtr <- Call.cint il+      iuPtr <- Call.cint iu+      abstolPtr <- Call.float abstol+      mPtr <- Call.alloca+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      isuppzPtr <- Call.ioarray isuppz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      infoPtr <- Call.alloca+      liftIO $ FFI.stegr jobzPtr rangePtr nPtr dPtr ePtr vlPtr vuPtr ilPtr iuPtr abstolPtr mPtr wPtr zPtr ldzPtr isuppzPtr workPtr lworkPtr iworkPtr liworkPtr infoPtr+      liftIO $ pure (,,,,)+         <*> fmap fromIntegral (peek mPtr)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> Call.freezeArray isuppz+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cstein.f>+stein ::+   Array ZeroInt Float {- ^ d -} ->+   Array ZeroInt Float {- ^ e -} ->+   Int {- ^ m -} ->+   Array ZeroInt Float {- ^ w -} ->+   Array ZeroInt CInt {- ^ iblock -} ->+   Array ZeroInt CInt {- ^ isplit -} ->+   Int {- ^ ldz -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Float), Array ZeroInt CInt, Int)+stein d e m w iblock isplit ldz = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let eDim0 = Call.sizes1 $ Array.shape e+   let wDim0 = Call.sizes1 $ Array.shape w+   let iblockDim0 = Call.sizes1 $ Array.shape iblock+   let isplitDim0 = Call.sizes1 $ Array.shape isplit+   let n = dDim0+   Call.assert "stein: n-1 == eDim0" (n-1 == eDim0)+   Call.assert "stein: n == wDim0" (n == wDim0)+   Call.assert "stein: n == iblockDim0" (n == iblockDim0)+   Call.assert "stein: n == isplitDim0" (n == isplitDim0)+   z <- Call.newArray2 m ldz+   work <- Call.newArray1 (5*n)+   iwork <- Call.newArray1 n+   ifail <- Call.newArray1 m+   evalContT $ do+      nPtr <- Call.cint n+      dPtr <- Call.array d+      ePtr <- Call.array e+      mPtr <- Call.cint m+      wPtr <- Call.array w+      iblockPtr <- Call.array iblock+      isplitPtr <- Call.array isplit+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      ifailPtr <- Call.ioarray ifail+      infoPtr <- Call.alloca+      liftIO $ FFI.stein nPtr dPtr ePtr mPtr wPtr iblockPtr isplitPtr zPtr ldzPtr workPtr iworkPtr ifailPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray z+         <*> Call.freezeArray ifail+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cstemr.f>+stemr ::+   Char {- ^ jobz -} ->+   Char {- ^ range -} ->+   IOArray ZeroInt Float {- ^ d -} ->+   IOArray ZeroInt Float {- ^ e -} ->+   Float {- ^ vl -} ->+   Float {- ^ vu -} ->+   Int {- ^ il -} ->+   Int {- ^ iu -} ->+   Int {- ^ m -} ->+   Int {- ^ ldz -} ->+   Int {- ^ nzc -} ->+   Bool {- ^ tryrac -} ->+   Int {- ^ lwork -} ->+   Int {- ^ liwork -} ->+   IO (Int, Array ZeroInt Float, Array (ZeroInt,ZeroInt) (Complex Float), Array ZeroInt CInt, Bool, Int)+stemr jobz range d e vl vu il iu m ldz nzc tryrac lwork liwork = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let n = dDim0+   Call.assert "stemr: n == eDim0" (n == eDim0)+   w <- Call.newArray1 n+   z <- Call.newArray2 (maximum[1,m]) ldz+   isuppz <- Call.newArray1 (2*maximum[1,m])+   work <- Call.newArray1 lwork+   iwork <- Call.newArray1 liwork+   evalContT $ do+      jobzPtr <- Call.char jobz+      rangePtr <- Call.char range+      nPtr <- Call.cint n+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      vlPtr <- Call.float vl+      vuPtr <- Call.float vu+      ilPtr <- Call.cint il+      iuPtr <- Call.cint iu+      mPtr <- Call.alloca+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      nzcPtr <- Call.cint nzc+      isuppzPtr <- Call.ioarray isuppz+      tryracPtr <- Call.bool tryrac+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      infoPtr <- Call.alloca+      liftIO $ FFI.stemr jobzPtr rangePtr nPtr dPtr ePtr vlPtr vuPtr ilPtr iuPtr mPtr wPtr zPtr ldzPtr nzcPtr isuppzPtr tryracPtr workPtr lworkPtr iworkPtr liworkPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> fmap fromIntegral (peek mPtr)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> Call.freezeArray isuppz+         <*> peek tryracPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/csteqr.f>+steqr ::+   Char {- ^ compz -} ->+   IOArray ZeroInt Float {- ^ d -} ->+   IOArray ZeroInt Float {- ^ e -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ z -} ->+   IO (Int)+steqr compz d e z = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = dDim0+   let ldz = zDim1+   Call.assert "steqr: n-1 == eDim0" (n-1 == eDim0)+   Call.assert "steqr: n == zDim0" (n == zDim0)+   work <- Call.newArray1 (maximum[1,2*n-2])+   evalContT $ do+      compzPtr <- Call.char compz+      nPtr <- Call.cint n+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.steqr compzPtr nPtr dPtr ePtr zPtr ldzPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/scsum1.f>+sum1 ::+   Array ZeroInt (Complex Float) {- ^ cx -} ->+   Int {- ^ incx -} ->+   IO Float+sum1 cx incx = do+   let cxDim0 = Call.sizes1 $ Array.shape cx+   let n = cxDim0+   evalContT $ do+      nPtr <- Call.cint n+      cxPtr <- Call.array cx+      incxPtr <- Call.cint incx+      liftIO $ FFI.sum1 nPtr cxPtr incxPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/csycon.f>+sycon ::+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Float {- ^ anorm -} ->+   IO (Float, Int)+sycon uplo a ipiv anorm = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = aDim0+   let lda = aDim1+   Call.assert "sycon: n == ipivDim0" (n == ipivDim0)+   work <- Call.newArray1 (2*n)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.array ipiv+      anormPtr <- Call.float anorm+      rcondPtr <- Call.alloca+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.sycon uploPtr nPtr aPtr ldaPtr ipivPtr anormPtr rcondPtr workPtr infoPtr+      liftIO $ pure (,)+         <*> peek rcondPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/csyconv.f>+syconv ::+   Char {- ^ uplo -} ->+   Char {- ^ way -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   IO (Array ZeroInt (Complex Float), Int)+syconv uplo way a ipiv = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = aDim0+   let lda = aDim1+   Call.assert "syconv: n == ipivDim0" (n == ipivDim0)+   e <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      wayPtr <- Call.char way+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.array ipiv+      ePtr <- Call.ioarray e+      infoPtr <- Call.alloca+      liftIO $ FFI.syconv uploPtr wayPtr nPtr aPtr ldaPtr ipivPtr ePtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray e+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/csyequb.f>+syequb ::+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IO (Array ZeroInt Float, Float, Float, Int)+syequb uplo a = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   s <- Call.newArray1 n+   work <- Call.newArray1 (2*n)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      sPtr <- Call.ioarray s+      scondPtr <- Call.alloca+      amaxPtr <- Call.alloca+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.syequb uploPtr nPtr aPtr ldaPtr sPtr scondPtr amaxPtr workPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray s+         <*> peek scondPtr+         <*> peek amaxPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/csymv.f>+symv ::+   Char {- ^ uplo -} ->+   Complex Float {- ^ alpha -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Array ZeroInt (Complex Float) {- ^ x -} ->+   Int {- ^ incx -} ->+   Complex Float {- ^ beta -} ->+   IOArray ZeroInt (Complex Float) {- ^ y -} ->+   Int {- ^ incy -} ->+   IO ()+symv uplo alpha a x incx beta y incy = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let xDim0 = Call.sizes1 $ Array.shape x+   let yDim0 = Call.sizes1 $ MutArray.shape y+   let n = aDim0+   let lda = aDim1+   let _xSize = xDim0+   let _ySize = yDim0+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      alphaPtr <- Call.complexFloat alpha+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      xPtr <- Call.array x+      incxPtr <- Call.cint incx+      betaPtr <- Call.complexFloat beta+      yPtr <- Call.ioarray y+      incyPtr <- Call.cint incy+      liftIO $ FFI.symv uploPtr nPtr alphaPtr aPtr ldaPtr xPtr incxPtr betaPtr yPtr incyPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/csyr.f>+syr ::+   Char {- ^ uplo -} ->+   Complex Float {- ^ alpha -} ->+   Array ZeroInt (Complex Float) {- ^ x -} ->+   Int {- ^ incx -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IO ()+syr uplo alpha x incx a = do+   let xDim0 = Call.sizes1 $ Array.shape x+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let _xSize = xDim0+   let n = aDim0+   let lda = aDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      alphaPtr <- Call.complexFloat alpha+      xPtr <- Call.array x+      incxPtr <- Call.cint incx+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      liftIO $ FFI.syr uploPtr nPtr alphaPtr xPtr incxPtr aPtr ldaPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/csyrfs.f>+syrfs ::+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ af -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ x -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Int)+syrfs uplo a af ipiv b x = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (afDim0,afDim1) = Call.sizes2 $ Array.shape af+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (xDim0,xDim1) = Call.sizes2 $ MutArray.shape x+   let n = aDim0+   let lda = aDim1+   let ldaf = afDim1+   let nrhs = bDim0+   let ldb = bDim1+   let ldx = xDim1+   Call.assert "syrfs: n == afDim0" (n == afDim0)+   Call.assert "syrfs: n == ipivDim0" (n == ipivDim0)+   Call.assert "syrfs: nrhs == xDim0" (nrhs == xDim0)+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      afPtr <- Call.array af+      ldafPtr <- Call.cint ldaf+      ipivPtr <- Call.array ipiv+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.syrfs uploPtr nPtr nrhsPtr aPtr ldaPtr afPtr ldafPtr ipivPtr bPtr ldbPtr xPtr ldxPtr ferrPtr berrPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/csysv.f>+sysv ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt CInt, Int)+sysv uplo a b lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   ipiv <- Call.newArray1 n+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.ioarray ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.sysv uploPtr nPtr nrhsPtr aPtr ldaPtr ipivPtr bPtr ldbPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/csysvx.f>+sysvx ::+   Char {- ^ fact -} ->+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ af -} ->+   IOArray ZeroInt CInt {- ^ ipiv -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   Int {- ^ ldx -} ->+   Int {- ^ lwork -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Float), Float, Array ZeroInt Float, Array ZeroInt Float, Int)+sysvx fact uplo a af ipiv b ldx lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (afDim0,afDim1) = Call.sizes2 $ MutArray.shape af+   let ipivDim0 = Call.sizes1 $ MutArray.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let n = aDim0+   let lda = aDim1+   let ldaf = afDim1+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "sysvx: n == afDim0" (n == afDim0)+   Call.assert "sysvx: n == ipivDim0" (n == ipivDim0)+   x <- Call.newArray2 nrhs ldx+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 n+   evalContT $ do+      factPtr <- Call.char fact+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      afPtr <- Call.ioarray af+      ldafPtr <- Call.cint ldaf+      ipivPtr <- Call.ioarray ipiv+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      rcondPtr <- Call.alloca+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.sysvx factPtr uploPtr nPtr nrhsPtr aPtr ldaPtr afPtr ldafPtr ipivPtr bPtr ldbPtr xPtr ldxPtr rcondPtr ferrPtr berrPtr workPtr lworkPtr rworkPtr infoPtr+      liftIO $ pure (,,,,)+         <*> Call.freezeArray x+         <*> peek rcondPtr+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/csyswapr.f>+syswapr ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Int {- ^ i1 -} ->+   Int {- ^ i2 -} ->+   IO ()+syswapr uplo a i1 i2 = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      i1Ptr <- Call.cint i1+      i2Ptr <- Call.cint i2+      liftIO $ FFI.syswapr uploPtr nPtr aPtr ldaPtr i1Ptr i2Ptr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/csytf2.f>+sytf2 ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IO (Array ZeroInt CInt, Int)+sytf2 uplo a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   ipiv <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.ioarray ipiv+      infoPtr <- Call.alloca+      liftIO $ FFI.sytf2 uploPtr nPtr aPtr ldaPtr ipivPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/csytrf.f>+sytrf ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt CInt, Int)+sytrf uplo a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   ipiv <- Call.newArray1 n+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.ioarray ipiv+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.sytrf uploPtr nPtr aPtr ldaPtr ipivPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/csytri.f>+sytri ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   IO (Int)+sytri uplo a ipiv = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = aDim0+   let lda = aDim1+   Call.assert "sytri: n == ipivDim0" (n == ipivDim0)+   work <- Call.newArray1 (2*n)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.array ipiv+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.sytri uploPtr nPtr aPtr ldaPtr ipivPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/csytri2.f>+sytri2 ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Int {- ^ nb -} ->+   Int {- ^ lwork -} ->+   IO (Int)+sytri2 uplo a ipiv nb lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = aDim0+   let lda = aDim1+   Call.assert "sytri2: n == ipivDim0" (n == ipivDim0)+   work <- Call.newArray1 (n+nb+1)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.array ipiv+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.sytri2 uploPtr nPtr aPtr ldaPtr ipivPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/csytri2x.f>+sytri2x ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Int {- ^ nb -} ->+   IO (Int)+sytri2x uplo a ipiv nb = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = aDim0+   let lda = aDim1+   Call.assert "sytri2x: n == ipivDim0" (n == ipivDim0)+   work <- Call.newArray2 (nb+3) (n+nb+1)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.array ipiv+      workPtr <- Call.ioarray work+      nbPtr <- Call.cint nb+      infoPtr <- Call.alloca+      liftIO $ FFI.sytri2x uploPtr nPtr aPtr ldaPtr ipivPtr workPtr nbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/csytrs.f>+sytrs ::+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   IO (Int)+sytrs uplo a ipiv b = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "sytrs: n == ipivDim0" (n == ipivDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.array ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.sytrs uploPtr nPtr nrhsPtr aPtr ldaPtr ipivPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/csytrs2.f>+sytrs2 ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   IO (Int)+sytrs2 uplo a ipiv b = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "sytrs2: n == ipivDim0" (n == ipivDim0)+   work <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.array ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.sytrs2 uploPtr nPtr nrhsPtr aPtr ldaPtr ipivPtr bPtr ldbPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctbcon.f>+tbcon ::+   Char {- ^ norm -} ->+   Char {- ^ uplo -} ->+   Char {- ^ diag -} ->+   Int {- ^ kd -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->+   IO (Float, Int)+tbcon norm uplo diag kd ab = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let n = abDim0+   let ldab = abDim1+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      normPtr <- Call.char norm+      uploPtr <- Call.char uplo+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      rcondPtr <- Call.alloca+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.tbcon normPtr uploPtr diagPtr nPtr kdPtr abPtr ldabPtr rcondPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,)+         <*> peek rcondPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctbrfs.f>+tbrfs ::+   Char {- ^ uplo -} ->+   Char {- ^ trans -} ->+   Char {- ^ diag -} ->+   Int {- ^ kd -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ x -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Int)+tbrfs uplo trans diag kd ab b x = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (xDim0,xDim1) = Call.sizes2 $ Array.shape x+   let n = abDim0+   let ldab = abDim1+   let nrhs = bDim0+   let ldb = bDim1+   let ldx = xDim1+   Call.assert "tbrfs: nrhs == xDim0" (nrhs == xDim0)+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      transPtr <- Call.char trans+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      nrhsPtr <- Call.cint nrhs+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.array x+      ldxPtr <- Call.cint ldx+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.tbrfs uploPtr transPtr diagPtr nPtr kdPtr nrhsPtr abPtr ldabPtr bPtr ldbPtr xPtr ldxPtr ferrPtr berrPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctbtrs.f>+tbtrs ::+   Char {- ^ uplo -} ->+   Char {- ^ trans -} ->+   Char {- ^ diag -} ->+   Int {- ^ kd -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   IO (Int)+tbtrs uplo trans diag kd ab b = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = abDim0+   let ldab = abDim1+   let nrhs = bDim0+   let ldb = bDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      transPtr <- Call.char trans+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      nrhsPtr <- Call.cint nrhs+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.tbtrs uploPtr transPtr diagPtr nPtr kdPtr nrhsPtr abPtr ldabPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctfsm.f>+tfsm ::+   Char {- ^ transr -} ->+   Char {- ^ side -} ->+   Char {- ^ uplo -} ->+   Char {- ^ trans -} ->+   Char {- ^ diag -} ->+   Int {- ^ m -} ->+   Complex Float {- ^ alpha -} ->+   Array ZeroInt (Complex Float) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   IO ()+tfsm transr side uplo trans diag m alpha a b = do+   let aDim0 = Call.sizes1 $ Array.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = bDim0+   let ldb = bDim1+   Call.assert "tfsm: n*(n+1)`div`2 == aDim0" (n*(n+1)`div`2 == aDim0)+   evalContT $ do+      transrPtr <- Call.char transr+      sidePtr <- Call.char side+      uploPtr <- Call.char uplo+      transPtr <- Call.char trans+      diagPtr <- Call.char diag+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      alphaPtr <- Call.complexFloat alpha+      aPtr <- Call.array a+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      liftIO $ FFI.tfsm transrPtr sidePtr uploPtr transPtr diagPtr mPtr nPtr alphaPtr aPtr bPtr ldbPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctftri.f>+tftri ::+   Char {- ^ transr -} ->+   Char {- ^ uplo -} ->+   Char {- ^ diag -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt (Complex Float) {- ^ a -} ->+   IO (Int)+tftri transr uplo diag n a = do+   let aDim0 = Call.sizes1 $ MutArray.shape a+   Call.assert "tftri: n*(n+1)`div`2 == aDim0" (n*(n+1)`div`2 == aDim0)+   evalContT $ do+      transrPtr <- Call.char transr+      uploPtr <- Call.char uplo+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      infoPtr <- Call.alloca+      liftIO $ FFI.tftri transrPtr uploPtr diagPtr nPtr aPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctfttp.f>+tfttp ::+   Char {- ^ transr -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Array ZeroInt (Complex Float) {- ^ arf -} ->+   IO (Array ZeroInt (Complex Float), Int)+tfttp transr uplo n arf = do+   let arfDim0 = Call.sizes1 $ Array.shape arf+   Call.assert "tfttp: n*(n+1)`div`2 == arfDim0" (n*(n+1)`div`2 == arfDim0)+   ap <- Call.newArray1 (n*(n+1)`div`2)+   evalContT $ do+      transrPtr <- Call.char transr+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      arfPtr <- Call.array arf+      apPtr <- Call.ioarray ap+      infoPtr <- Call.alloca+      liftIO $ FFI.tfttp transrPtr uploPtr nPtr arfPtr apPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ap+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctfttr.f>+tfttr ::+   Char {- ^ transr -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Array ZeroInt (Complex Float) {- ^ arf -} ->+   Int {- ^ lda -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Float), Int)+tfttr transr uplo n arf lda = do+   let arfDim0 = Call.sizes1 $ Array.shape arf+   Call.assert "tfttr: n*(n+1)`div`2 == arfDim0" (n*(n+1)`div`2 == arfDim0)+   a <- Call.newArray2 n lda+   evalContT $ do+      transrPtr <- Call.char transr+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      arfPtr <- Call.array arf+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      infoPtr <- Call.alloca+      liftIO $ FFI.tfttr transrPtr uploPtr nPtr arfPtr aPtr ldaPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray a+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctgevc.f>+tgevc ::+   Char {- ^ side -} ->+   Char {- ^ howmny -} ->+   Array ZeroInt Bool {- ^ select -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ s -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ p -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ vl -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ vr -} ->+   IO (Int, Int)+tgevc side howmny select s p vl vr = do+   let selectDim0 = Call.sizes1 $ Array.shape select+   let (sDim0,sDim1) = Call.sizes2 $ Array.shape s+   let (pDim0,pDim1) = Call.sizes2 $ Array.shape p+   let (vlDim0,vlDim1) = Call.sizes2 $ MutArray.shape vl+   let (vrDim0,vrDim1) = Call.sizes2 $ MutArray.shape vr+   let n = selectDim0+   let lds = sDim1+   let ldp = pDim1+   let mm = vlDim0+   let ldvl = vlDim1+   let ldvr = vrDim1+   Call.assert "tgevc: n == sDim0" (n == sDim0)+   Call.assert "tgevc: n == pDim0" (n == pDim0)+   Call.assert "tgevc: mm == vrDim0" (mm == vrDim0)+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 (2*n)+   evalContT $ do+      sidePtr <- Call.char side+      howmnyPtr <- Call.char howmny+      selectPtr <- Call.array select+      nPtr <- Call.cint n+      sPtr <- Call.array s+      ldsPtr <- Call.cint lds+      pPtr <- Call.array p+      ldpPtr <- Call.cint ldp+      vlPtr <- Call.ioarray vl+      ldvlPtr <- Call.cint ldvl+      vrPtr <- Call.ioarray vr+      ldvrPtr <- Call.cint ldvr+      mmPtr <- Call.cint mm+      mPtr <- Call.alloca+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.tgevc sidePtr howmnyPtr selectPtr nPtr sPtr ldsPtr pPtr ldpPtr vlPtr ldvlPtr vrPtr ldvrPtr mmPtr mPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,)+         <*> fmap fromIntegral (peek mPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctgex2.f>+tgex2 ::+   Bool {- ^ wantq -} ->+   Bool {- ^ wantz -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ q -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ z -} ->+   Int {- ^ j1 -} ->+   IO (Int)+tgex2 wantq wantz a b q z j1 = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   let ldq = qDim1+   let ldz = zDim1+   Call.assert "tgex2: n == bDim0" (n == bDim0)+   Call.assert "tgex2: n == qDim0" (n == qDim0)+   Call.assert "tgex2: n == zDim0" (n == zDim0)+   evalContT $ do+      wantqPtr <- Call.bool wantq+      wantzPtr <- Call.bool wantz+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      j1Ptr <- Call.cint j1+      infoPtr <- Call.alloca+      liftIO $ FFI.tgex2 wantqPtr wantzPtr nPtr aPtr ldaPtr bPtr ldbPtr qPtr ldqPtr zPtr ldzPtr j1Ptr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctgexc.f>+tgexc ::+   Bool {- ^ wantq -} ->+   Bool {- ^ wantz -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ q -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ z -} ->+   Int {- ^ ifst -} ->+   Int {- ^ ilst -} ->+   IO (Int, Int)+tgexc wantq wantz a b q z ifst ilst = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   let ldq = qDim1+   let ldz = zDim1+   Call.assert "tgexc: n == bDim0" (n == bDim0)+   Call.assert "tgexc: n == qDim0" (n == qDim0)+   Call.assert "tgexc: n == zDim0" (n == zDim0)+   evalContT $ do+      wantqPtr <- Call.bool wantq+      wantzPtr <- Call.bool wantz+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      ifstPtr <- Call.cint ifst+      ilstPtr <- Call.cint ilst+      infoPtr <- Call.alloca+      liftIO $ FFI.tgexc wantqPtr wantzPtr nPtr aPtr ldaPtr bPtr ldbPtr qPtr ldqPtr zPtr ldzPtr ifstPtr ilstPtr infoPtr+      liftIO $ pure (,)+         <*> fmap fromIntegral (peek ilstPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctgsen.f>+tgsen ::+   Int {- ^ ijob -} ->+   Bool {- ^ wantq -} ->+   Bool {- ^ wantz -} ->+   Array ZeroInt Bool {- ^ select -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ q -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ z -} ->+   Int {- ^ lwork -} ->+   Int {- ^ liwork -} ->+   IO (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int, Float, Float, Array ZeroInt Float, Int)+tgsen ijob wantq wantz select a b q z lwork liwork = do+   let selectDim0 = Call.sizes1 $ Array.shape select+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = selectDim0+   let lda = aDim1+   let ldb = bDim1+   let ldq = qDim1+   let ldz = zDim1+   Call.assert "tgsen: n == aDim0" (n == aDim0)+   Call.assert "tgsen: n == bDim0" (n == bDim0)+   Call.assert "tgsen: n == qDim0" (n == qDim0)+   Call.assert "tgsen: n == zDim0" (n == zDim0)+   alpha <- Call.newArray1 n+   beta <- Call.newArray1 n+   dif <- Call.newArray1 2+   work <- Call.newArray1 (maximum[1,lwork])+   iwork <- Call.newArray1 (maximum[1,liwork])+   evalContT $ do+      ijobPtr <- Call.cint ijob+      wantqPtr <- Call.bool wantq+      wantzPtr <- Call.bool wantz+      selectPtr <- Call.array select+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      alphaPtr <- Call.ioarray alpha+      betaPtr <- Call.ioarray beta+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      mPtr <- Call.alloca+      plPtr <- Call.alloca+      prPtr <- Call.alloca+      difPtr <- Call.ioarray dif+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      infoPtr <- Call.alloca+      liftIO $ FFI.tgsen ijobPtr wantqPtr wantzPtr selectPtr nPtr aPtr ldaPtr bPtr ldbPtr alphaPtr betaPtr qPtr ldqPtr zPtr ldzPtr mPtr plPtr prPtr difPtr workPtr lworkPtr iworkPtr liworkPtr infoPtr+      liftIO $ pure (,,,,,,)+         <*> Call.freezeArray alpha+         <*> Call.freezeArray beta+         <*> fmap fromIntegral (peek mPtr)+         <*> peek plPtr+         <*> peek prPtr+         <*> Call.freezeArray dif+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctgsja.f>+tgsja ::+   Char {- ^ jobu -} ->+   Char {- ^ jobv -} ->+   Char {- ^ jobq -} ->+   Int {- ^ k -} ->+   Int {- ^ l -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   Float {- ^ tola -} ->+   Float {- ^ tolb -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ u -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ v -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ q -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)+tgsja jobu jobv jobq k l a b tola tolb u v q = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let (uDim0,uDim1) = Call.sizes2 $ MutArray.shape u+   let (vDim0,vDim1) = Call.sizes2 $ MutArray.shape v+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   let m = uDim0+   let ldu = uDim1+   let p = vDim0+   let ldv = vDim1+   let ldq = qDim1+   Call.assert "tgsja: n == bDim0" (n == bDim0)+   Call.assert "tgsja: n == qDim0" (n == qDim0)+   alpha <- Call.newArray1 n+   beta <- Call.newArray1 n+   work <- Call.newArray1 (2*n)+   evalContT $ do+      jobuPtr <- Call.char jobu+      jobvPtr <- Call.char jobv+      jobqPtr <- Call.char jobq+      mPtr <- Call.cint m+      pPtr <- Call.cint p+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      lPtr <- Call.cint l+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      tolaPtr <- Call.float tola+      tolbPtr <- Call.float tolb+      alphaPtr <- Call.ioarray alpha+      betaPtr <- Call.ioarray beta+      uPtr <- Call.ioarray u+      lduPtr <- Call.cint ldu+      vPtr <- Call.ioarray v+      ldvPtr <- Call.cint ldv+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      workPtr <- Call.ioarray work+      ncyclePtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.tgsja jobuPtr jobvPtr jobqPtr mPtr pPtr nPtr kPtr lPtr aPtr ldaPtr bPtr ldbPtr tolaPtr tolbPtr alphaPtr betaPtr uPtr lduPtr vPtr ldvPtr qPtr ldqPtr workPtr ncyclePtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray alpha+         <*> Call.freezeArray beta+         <*> fmap fromIntegral (peek ncyclePtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctgsna.f>+tgsna ::+   Char {- ^ job -} ->+   Char {- ^ howmny -} ->+   Array ZeroInt Bool {- ^ select -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ vl -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ vr -} ->+   Int {- ^ mm -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)+tgsna job howmny select a b vl vr mm lwork = do+   let selectDim0 = Call.sizes1 $ Array.shape select+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (vlDim0,vlDim1) = Call.sizes2 $ Array.shape vl+   let (vrDim0,vrDim1) = Call.sizes2 $ Array.shape vr+   let n = selectDim0+   let lda = aDim1+   let ldb = bDim1+   let m = vlDim0+   let ldvl = vlDim1+   let ldvr = vrDim1+   Call.assert "tgsna: n == aDim0" (n == aDim0)+   Call.assert "tgsna: n == bDim0" (n == bDim0)+   Call.assert "tgsna: m == vrDim0" (m == vrDim0)+   s <- Call.newArray1 mm+   dif <- Call.newArray1 mm+   work <- Call.newArray1 (maximum[1,lwork])+   iwork <- Call.newArray1 (n+2)+   evalContT $ do+      jobPtr <- Call.char job+      howmnyPtr <- Call.char howmny+      selectPtr <- Call.array select+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      vlPtr <- Call.array vl+      ldvlPtr <- Call.cint ldvl+      vrPtr <- Call.array vr+      ldvrPtr <- Call.cint ldvr+      sPtr <- Call.ioarray s+      difPtr <- Call.ioarray dif+      mmPtr <- Call.cint mm+      mPtr <- Call.alloca+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.tgsna jobPtr howmnyPtr selectPtr nPtr aPtr ldaPtr bPtr ldbPtr vlPtr ldvlPtr vrPtr ldvrPtr sPtr difPtr mmPtr mPtr workPtr lworkPtr iworkPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray s+         <*> Call.freezeArray dif+         <*> fmap fromIntegral (peek mPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctgsy2.f>+tgsy2 ::+   Char {- ^ trans -} ->+   Int {- ^ ijob -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ c -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ d -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ e -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ f -} ->+   Float {- ^ rdsum -} ->+   Float {- ^ rdscal -} ->+   IO (Float, Float, Float, Int)+tgsy2 trans ijob a b c d e f rdsum rdscal = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let (dDim0,dDim1) = Call.sizes2 $ Array.shape d+   let (eDim0,eDim1) = Call.sizes2 $ Array.shape e+   let (fDim0,fDim1) = Call.sizes2 $ MutArray.shape f+   let m = aDim0+   let lda = aDim1+   let n = bDim0+   let ldb = bDim1+   let ldc = cDim1+   let ldd = dDim1+   let lde = eDim1+   let ldf = fDim1+   Call.assert "tgsy2: n == cDim0" (n == cDim0)+   Call.assert "tgsy2: m == dDim0" (m == dDim0)+   Call.assert "tgsy2: n == eDim0" (n == eDim0)+   Call.assert "tgsy2: n == fDim0" (n == fDim0)+   evalContT $ do+      transPtr <- Call.char trans+      ijobPtr <- Call.cint ijob+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      dPtr <- Call.array d+      lddPtr <- Call.cint ldd+      ePtr <- Call.array e+      ldePtr <- Call.cint lde+      fPtr <- Call.ioarray f+      ldfPtr <- Call.cint ldf+      scalePtr <- Call.alloca+      rdsumPtr <- Call.float rdsum+      rdscalPtr <- Call.float rdscal+      infoPtr <- Call.alloca+      liftIO $ FFI.tgsy2 transPtr ijobPtr mPtr nPtr aPtr ldaPtr bPtr ldbPtr cPtr ldcPtr dPtr lddPtr ePtr ldePtr fPtr ldfPtr scalePtr rdsumPtr rdscalPtr infoPtr+      liftIO $ pure (,,,)+         <*> peek scalePtr+         <*> peek rdsumPtr+         <*> peek rdscalPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctgsyl.f>+tgsyl ::+   Char {- ^ trans -} ->+   Int {- ^ ijob -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ c -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ d -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ e -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ f -} ->+   Int {- ^ lwork -} ->+   IO (Float, Float, Int)+tgsyl trans ijob a b c d e f lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let (dDim0,dDim1) = Call.sizes2 $ Array.shape d+   let (eDim0,eDim1) = Call.sizes2 $ Array.shape e+   let (fDim0,fDim1) = Call.sizes2 $ MutArray.shape f+   let m = aDim0+   let lda = aDim1+   let n = bDim0+   let ldb = bDim1+   let ldc = cDim1+   let ldd = dDim1+   let lde = eDim1+   let ldf = fDim1+   Call.assert "tgsyl: n == cDim0" (n == cDim0)+   Call.assert "tgsyl: m == dDim0" (m == dDim0)+   Call.assert "tgsyl: n == eDim0" (n == eDim0)+   Call.assert "tgsyl: n == fDim0" (n == fDim0)+   work <- Call.newArray1 (maximum[1,lwork])+   iwork <- Call.newArray1 (m+n+2)+   evalContT $ do+      transPtr <- Call.char trans+      ijobPtr <- Call.cint ijob+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      dPtr <- Call.array d+      lddPtr <- Call.cint ldd+      ePtr <- Call.array e+      ldePtr <- Call.cint lde+      fPtr <- Call.ioarray f+      ldfPtr <- Call.cint ldf+      scalePtr <- Call.alloca+      difPtr <- Call.alloca+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.tgsyl transPtr ijobPtr mPtr nPtr aPtr ldaPtr bPtr ldbPtr cPtr ldcPtr dPtr lddPtr ePtr ldePtr fPtr ldfPtr scalePtr difPtr workPtr lworkPtr iworkPtr infoPtr+      liftIO $ pure (,,)+         <*> peek scalePtr+         <*> peek difPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctpcon.f>+tpcon ::+   Char {- ^ norm -} ->+   Char {- ^ uplo -} ->+   Char {- ^ diag -} ->+   Int {- ^ n -} ->+   Array ZeroInt (Complex Float) {- ^ ap -} ->+   IO (Float, Int)+tpcon norm uplo diag n ap = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   Call.assert "tpcon: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      normPtr <- Call.char norm+      uploPtr <- Call.char uplo+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      apPtr <- Call.array ap+      rcondPtr <- Call.alloca+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.tpcon normPtr uploPtr diagPtr nPtr apPtr rcondPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,)+         <*> peek rcondPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctprfs.f>+tprfs ::+   Char {- ^ uplo -} ->+   Char {- ^ trans -} ->+   Char {- ^ diag -} ->+   Int {- ^ n -} ->+   Array ZeroInt (Complex Float) {- ^ ap -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ x -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Int)+tprfs uplo trans diag n ap b x = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (xDim0,xDim1) = Call.sizes2 $ Array.shape x+   let nrhs = bDim0+   let ldb = bDim1+   let ldx = xDim1+   Call.assert "tprfs: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   Call.assert "tprfs: nrhs == xDim0" (nrhs == xDim0)+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      transPtr <- Call.char trans+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      apPtr <- Call.array ap+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.array x+      ldxPtr <- Call.cint ldx+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.tprfs uploPtr transPtr diagPtr nPtr nrhsPtr apPtr bPtr ldbPtr xPtr ldxPtr ferrPtr berrPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctptri.f>+tptri ::+   Char {- ^ uplo -} ->+   Char {- ^ diag -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt (Complex Float) {- ^ ap -} ->+   IO (Int)+tptri uplo diag n ap = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   Call.assert "tptri: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      infoPtr <- Call.alloca+      liftIO $ FFI.tptri uploPtr diagPtr nPtr apPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctptrs.f>+tptrs ::+   Char {- ^ uplo -} ->+   Char {- ^ trans -} ->+   Char {- ^ diag -} ->+   Int {- ^ n -} ->+   Array ZeroInt (Complex Float) {- ^ ap -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   IO (Int)+tptrs uplo trans diag n ap b = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "tptrs: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      transPtr <- Call.char trans+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      apPtr <- Call.array ap+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.tptrs uploPtr transPtr diagPtr nPtr nrhsPtr apPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctpttf.f>+tpttf ::+   Char {- ^ transr -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Array ZeroInt (Complex Float) {- ^ ap -} ->+   IO (Array ZeroInt (Complex Float), Int)+tpttf transr uplo n ap = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   Call.assert "tpttf: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   arf <- Call.newArray1 (n*(n+1)`div`2)+   evalContT $ do+      transrPtr <- Call.char transr+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.array ap+      arfPtr <- Call.ioarray arf+      infoPtr <- Call.alloca+      liftIO $ FFI.tpttf transrPtr uploPtr nPtr apPtr arfPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray arf+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctpttr.f>+tpttr ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Array ZeroInt (Complex Float) {- ^ ap -} ->+   Int {- ^ lda -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Float), Int)+tpttr uplo n ap lda = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   Call.assert "tpttr: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   a <- Call.newArray2 n lda+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.array ap+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      infoPtr <- Call.alloca+      liftIO $ FFI.tpttr uploPtr nPtr apPtr aPtr ldaPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray a+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctrcon.f>+trcon ::+   Char {- ^ norm -} ->+   Char {- ^ uplo -} ->+   Char {- ^ diag -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IO (Float, Int)+trcon norm uplo diag a = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      normPtr <- Call.char norm+      uploPtr <- Call.char uplo+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      rcondPtr <- Call.alloca+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.trcon normPtr uploPtr diagPtr nPtr aPtr ldaPtr rcondPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,)+         <*> peek rcondPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctrevc.f>+trevc ::+   Char {- ^ side -} ->+   Char {- ^ howmny -} ->+   Array ZeroInt Bool {- ^ select -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ t -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ vl -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ vr -} ->+   IO (Int, Int)+trevc side howmny select t vl vr = do+   let selectDim0 = Call.sizes1 $ Array.shape select+   let (tDim0,tDim1) = Call.sizes2 $ MutArray.shape t+   let (vlDim0,vlDim1) = Call.sizes2 $ MutArray.shape vl+   let (vrDim0,vrDim1) = Call.sizes2 $ MutArray.shape vr+   let n = selectDim0+   let ldt = tDim1+   let mm = vlDim0+   let ldvl = vlDim1+   let ldvr = vrDim1+   Call.assert "trevc: n == tDim0" (n == tDim0)+   Call.assert "trevc: mm == vrDim0" (mm == vrDim0)+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      sidePtr <- Call.char side+      howmnyPtr <- Call.char howmny+      selectPtr <- Call.array select+      nPtr <- Call.cint n+      tPtr <- Call.ioarray t+      ldtPtr <- Call.cint ldt+      vlPtr <- Call.ioarray vl+      ldvlPtr <- Call.cint ldvl+      vrPtr <- Call.ioarray vr+      ldvrPtr <- Call.cint ldvr+      mmPtr <- Call.cint mm+      mPtr <- Call.alloca+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.trevc sidePtr howmnyPtr selectPtr nPtr tPtr ldtPtr vlPtr ldvlPtr vrPtr ldvrPtr mmPtr mPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,)+         <*> fmap fromIntegral (peek mPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctrexc.f>+trexc ::+   Char {- ^ compq -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ t -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ q -} ->+   Int {- ^ ifst -} ->+   Int {- ^ ilst -} ->+   IO (Int)+trexc compq t q ifst ilst = do+   let (tDim0,tDim1) = Call.sizes2 $ MutArray.shape t+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let n = tDim0+   let ldt = tDim1+   let ldq = qDim1+   Call.assert "trexc: n == qDim0" (n == qDim0)+   evalContT $ do+      compqPtr <- Call.char compq+      nPtr <- Call.cint n+      tPtr <- Call.ioarray t+      ldtPtr <- Call.cint ldt+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      ifstPtr <- Call.cint ifst+      ilstPtr <- Call.cint ilst+      infoPtr <- Call.alloca+      liftIO $ FFI.trexc compqPtr nPtr tPtr ldtPtr qPtr ldqPtr ifstPtr ilstPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctrrfs.f>+trrfs ::+   Char {- ^ uplo -} ->+   Char {- ^ trans -} ->+   Char {- ^ diag -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ x -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Int)+trrfs uplo trans diag a b x = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (xDim0,xDim1) = Call.sizes2 $ Array.shape x+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   let ldx = xDim1+   Call.assert "trrfs: nrhs == xDim0" (nrhs == xDim0)+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (2*n)+   rwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      transPtr <- Call.char trans+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.array x+      ldxPtr <- Call.cint ldx+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.trrfs uploPtr transPtr diagPtr nPtr nrhsPtr aPtr ldaPtr bPtr ldbPtr xPtr ldxPtr ferrPtr berrPtr workPtr rworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctrsen.f>+trsen ::+   Char {- ^ job -} ->+   Char {- ^ compq -} ->+   Array ZeroInt Bool {- ^ select -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ t -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ q -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt (Complex Float), Int, Float, Float, Int)+trsen job compq select t q lwork = do+   let selectDim0 = Call.sizes1 $ Array.shape select+   let (tDim0,tDim1) = Call.sizes2 $ MutArray.shape t+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let n = selectDim0+   let ldt = tDim1+   let ldq = qDim1+   Call.assert "trsen: n == tDim0" (n == tDim0)+   Call.assert "trsen: n == qDim0" (n == qDim0)+   w <- Call.newArray1 n+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      jobPtr <- Call.char job+      compqPtr <- Call.char compq+      selectPtr <- Call.array select+      nPtr <- Call.cint n+      tPtr <- Call.ioarray t+      ldtPtr <- Call.cint ldt+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      wPtr <- Call.ioarray w+      mPtr <- Call.alloca+      sPtr <- Call.alloca+      sepPtr <- Call.alloca+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.trsen jobPtr compqPtr selectPtr nPtr tPtr ldtPtr qPtr ldqPtr wPtr mPtr sPtr sepPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,,,,)+         <*> Call.freezeArray w+         <*> fmap fromIntegral (peek mPtr)+         <*> peek sPtr+         <*> peek sepPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctrsna.f>+trsna ::+   Char {- ^ job -} ->+   Char {- ^ howmny -} ->+   Array ZeroInt Bool {- ^ select -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ t -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ vl -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ vr -} ->+   Int {- ^ mm -} ->+   Int {- ^ ldwork -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)+trsna job howmny select t vl vr mm ldwork = do+   let selectDim0 = Call.sizes1 $ Array.shape select+   let (tDim0,tDim1) = Call.sizes2 $ Array.shape t+   let (vlDim0,vlDim1) = Call.sizes2 $ Array.shape vl+   let (vrDim0,vrDim1) = Call.sizes2 $ Array.shape vr+   let n = selectDim0+   let ldt = tDim1+   let m = vlDim0+   let ldvl = vlDim1+   let ldvr = vrDim1+   Call.assert "trsna: n == tDim0" (n == tDim0)+   Call.assert "trsna: m == vrDim0" (m == vrDim0)+   s <- Call.newArray1 mm+   sep <- Call.newArray1 mm+   work <- Call.newArray2 (n+6) ldwork+   rwork <- Call.newArray1 n+   evalContT $ do+      jobPtr <- Call.char job+      howmnyPtr <- Call.char howmny+      selectPtr <- Call.array select+      nPtr <- Call.cint n+      tPtr <- Call.array t+      ldtPtr <- Call.cint ldt+      vlPtr <- Call.array vl+      ldvlPtr <- Call.cint ldvl+      vrPtr <- Call.array vr+      ldvrPtr <- Call.cint ldvr+      sPtr <- Call.ioarray s+      sepPtr <- Call.ioarray sep+      mmPtr <- Call.cint mm+      mPtr <- Call.alloca+      workPtr <- Call.ioarray work+      ldworkPtr <- Call.cint ldwork+      rworkPtr <- Call.ioarray rwork+      infoPtr <- Call.alloca+      liftIO $ FFI.trsna jobPtr howmnyPtr selectPtr nPtr tPtr ldtPtr vlPtr ldvlPtr vrPtr ldvrPtr sPtr sepPtr mmPtr mPtr workPtr ldworkPtr rworkPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray s+         <*> Call.freezeArray sep+         <*> fmap fromIntegral (peek mPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctrsyl.f>+trsyl ::+   Char {- ^ trana -} ->+   Char {- ^ tranb -} ->+   Int {- ^ isgn -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ c -} ->+   IO (Float, Int)+trsyl trana tranb isgn a b c = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let m = aDim0+   let lda = aDim1+   let n = bDim0+   let ldb = bDim1+   let ldc = cDim1+   Call.assert "trsyl: n == cDim0" (n == cDim0)+   evalContT $ do+      tranaPtr <- Call.char trana+      tranbPtr <- Call.char tranb+      isgnPtr <- Call.cint isgn+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      scalePtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.trsyl tranaPtr tranbPtr isgnPtr mPtr nPtr aPtr ldaPtr bPtr ldbPtr cPtr ldcPtr scalePtr infoPtr+      liftIO $ pure (,)+         <*> peek scalePtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctrti2.f>+trti2 ::+   Char {- ^ uplo -} ->+   Char {- ^ diag -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IO (Int)+trti2 uplo diag a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      infoPtr <- Call.alloca+      liftIO $ FFI.trti2 uploPtr diagPtr nPtr aPtr ldaPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctrtri.f>+trtri ::+   Char {- ^ uplo -} ->+   Char {- ^ diag -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IO (Int)+trtri uplo diag a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      infoPtr <- Call.alloca+      liftIO $ FFI.trtri uploPtr diagPtr nPtr aPtr ldaPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctrtrs.f>+trtrs ::+   Char {- ^ uplo -} ->+   Char {- ^ trans -} ->+   Char {- ^ diag -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->+   IO (Int)+trtrs uplo trans diag a b = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      transPtr <- Call.char trans+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.trtrs uploPtr transPtr diagPtr nPtr nrhsPtr aPtr ldaPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctrttf.f>+trttf ::+   Char {- ^ transr -} ->+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IO (Array ZeroInt (Complex Float), Int)+trttf transr uplo a = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   arf <- Call.newArray1 (n*(n+1)`div`2)+   evalContT $ do+      transrPtr <- Call.char transr+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      arfPtr <- Call.ioarray arf+      infoPtr <- Call.alloca+      liftIO $ FFI.trttf transrPtr uploPtr nPtr aPtr ldaPtr arfPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray arf+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctrttp.f>+trttp ::+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   IO (Array ZeroInt (Complex Float), Int)+trttp uplo a = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   ap <- Call.newArray1 (n*(n+1)`div`2)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      apPtr <- Call.ioarray ap+      infoPtr <- Call.alloca+      liftIO $ FFI.trttp uploPtr nPtr aPtr ldaPtr apPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ap+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctzrzf.f>+tzrzf ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt (Complex Float), Int)+tzrzf m a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 m+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.tzrzf mPtr nPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cunbdb.f>+unbdb ::+   Char {- ^ trans -} ->+   Char {- ^ signs -} ->+   Int {- ^ m -} ->+   Int {- ^ p -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ x11 -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ x12 -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ x21 -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ x22 -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)+unbdb trans signs m p x11 x12 x21 x22 lwork = do+   let (x11Dim0,x11Dim1) = Call.sizes2 $ MutArray.shape x11+   let (x12Dim0,x12Dim1) = Call.sizes2 $ MutArray.shape x12+   let (x21Dim0,x21Dim1) = Call.sizes2 $ MutArray.shape x21+   let (x22Dim0,x22Dim1) = Call.sizes2 $ MutArray.shape x22+   let q = x11Dim0+   let ldx11 = x11Dim1+   let ldx12 = x12Dim1+   let ldx21 = x21Dim1+   let ldx22 = x22Dim1+   Call.assert "unbdb: m-q == x12Dim0" (m-q == x12Dim0)+   Call.assert "unbdb: q == x21Dim0" (q == x21Dim0)+   Call.assert "unbdb: m-q == x22Dim0" (m-q == x22Dim0)+   theta <- Call.newArray1 q+   phi <- Call.newArray1 (q-1)+   taup1 <- Call.newArray1 p+   taup2 <- Call.newArray1 (m-p)+   tauq1 <- Call.newArray1 q+   tauq2 <- Call.newArray1 (m-q)+   work <- Call.newArray1 lwork+   evalContT $ do+      transPtr <- Call.char trans+      signsPtr <- Call.char signs+      mPtr <- Call.cint m+      pPtr <- Call.cint p+      qPtr <- Call.cint q+      x11Ptr <- Call.ioarray x11+      ldx11Ptr <- Call.cint ldx11+      x12Ptr <- Call.ioarray x12+      ldx12Ptr <- Call.cint ldx12+      x21Ptr <- Call.ioarray x21+      ldx21Ptr <- Call.cint ldx21+      x22Ptr <- Call.ioarray x22+      ldx22Ptr <- Call.cint ldx22+      thetaPtr <- Call.ioarray theta+      phiPtr <- Call.ioarray phi+      taup1Ptr <- Call.ioarray taup1+      taup2Ptr <- Call.ioarray taup2+      tauq1Ptr <- Call.ioarray tauq1+      tauq2Ptr <- Call.ioarray tauq2+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.unbdb transPtr signsPtr mPtr pPtr qPtr x11Ptr ldx11Ptr x12Ptr ldx12Ptr x21Ptr ldx21Ptr x22Ptr ldx22Ptr thetaPtr phiPtr taup1Ptr taup2Ptr tauq1Ptr tauq2Ptr workPtr lworkPtr infoPtr+      liftIO $ pure (,,,,,,)+         <*> Call.freezeArray theta+         <*> Call.freezeArray phi+         <*> Call.freezeArray taup1+         <*> Call.freezeArray taup2+         <*> Call.freezeArray tauq1+         <*> Call.freezeArray tauq2+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cuncsd.f>+uncsd ::+   Char {- ^ jobu1 -} ->+   Char {- ^ jobu2 -} ->+   Char {- ^ jobv1t -} ->+   Char {- ^ jobv2t -} ->+   Char {- ^ trans -} ->+   Char {- ^ signs -} ->+   Int {- ^ m -} ->+   Int {- ^ p -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ x11 -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ x12 -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ x21 -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ x22 -} ->+   Int {- ^ r -} ->+   Int {- ^ ldu1 -} ->+   Int {- ^ ldu2 -} ->+   Int {- ^ ldv1t -} ->+   Int {- ^ ldv2t -} ->+   Int {- ^ lwork -} ->+   Int {- ^ rworkSize -} ->+   Int {- ^ lrwork -} ->+   IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Int)+uncsd jobu1 jobu2 jobv1t jobv2t trans signs m p x11 x12 x21 x22 r ldu1 ldu2 ldv1t ldv2t lwork rworkSize lrwork = do+   let (x11Dim0,x11Dim1) = Call.sizes2 $ MutArray.shape x11+   let (x12Dim0,x12Dim1) = Call.sizes2 $ MutArray.shape x12+   let (x21Dim0,x21Dim1) = Call.sizes2 $ MutArray.shape x21+   let (x22Dim0,x22Dim1) = Call.sizes2 $ MutArray.shape x22+   let q = x11Dim0+   let ldx11 = x11Dim1+   let ldx12 = x12Dim1+   let ldx21 = x21Dim1+   let ldx22 = x22Dim1+   Call.assert "uncsd: m-q == x12Dim0" (m-q == x12Dim0)+   Call.assert "uncsd: q == x21Dim0" (q == x21Dim0)+   Call.assert "uncsd: m-q == x22Dim0" (m-q == x22Dim0)+   theta <- Call.newArray1 r+   u1 <- Call.newArray2 p ldu1+   u2 <- Call.newArray2 (m-p) ldu2+   v1t <- Call.newArray2 q ldv1t+   v2t <- Call.newArray2 (m-q) ldv2t+   work <- Call.newArray1 (maximum[1,lwork])+   rwork <- Call.newArray1 rworkSize+   iwork <- Call.newArray1 (m-minimum[p,m-p,q,m-q])+   evalContT $ do+      jobu1Ptr <- Call.char jobu1+      jobu2Ptr <- Call.char jobu2+      jobv1tPtr <- Call.char jobv1t+      jobv2tPtr <- Call.char jobv2t+      transPtr <- Call.char trans+      signsPtr <- Call.char signs+      mPtr <- Call.cint m+      pPtr <- Call.cint p+      qPtr <- Call.cint q+      x11Ptr <- Call.ioarray x11+      ldx11Ptr <- Call.cint ldx11+      x12Ptr <- Call.ioarray x12+      ldx12Ptr <- Call.cint ldx12+      x21Ptr <- Call.ioarray x21+      ldx21Ptr <- Call.cint ldx21+      x22Ptr <- Call.ioarray x22+      ldx22Ptr <- Call.cint ldx22+      thetaPtr <- Call.ioarray theta+      u1Ptr <- Call.ioarray u1+      ldu1Ptr <- Call.cint ldu1+      u2Ptr <- Call.ioarray u2+      ldu2Ptr <- Call.cint ldu2+      v1tPtr <- Call.ioarray v1t+      ldv1tPtr <- Call.cint ldv1t+      v2tPtr <- Call.ioarray v2t+      ldv2tPtr <- Call.cint ldv2t+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      rworkPtr <- Call.ioarray rwork+      lrworkPtr <- Call.cint lrwork+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.uncsd jobu1Ptr jobu2Ptr jobv1tPtr jobv2tPtr transPtr signsPtr mPtr pPtr qPtr x11Ptr ldx11Ptr x12Ptr ldx12Ptr x21Ptr ldx21Ptr x22Ptr ldx22Ptr thetaPtr u1Ptr ldu1Ptr u2Ptr ldu2Ptr v1tPtr ldv1tPtr v2tPtr ldv2tPtr workPtr lworkPtr rworkPtr lrworkPtr iworkPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> Call.freezeArray theta+         <*> Call.freezeArray u1+         <*> Call.freezeArray u2+         <*> Call.freezeArray v1t+         <*> Call.freezeArray v2t+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cung2l.f>+ung2l ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Array ZeroInt (Complex Float) {- ^ tau -} ->+   IO (Int)+ung2l m a tau = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let n = aDim0+   let lda = aDim1+   let k = tauDim0+   work <- Call.newArray1 n+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.ung2l mPtr nPtr kPtr aPtr ldaPtr tauPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cung2r.f>+ung2r ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Array ZeroInt (Complex Float) {- ^ tau -} ->+   IO (Int)+ung2r m a tau = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let n = aDim0+   let lda = aDim1+   let k = tauDim0+   work <- Call.newArray1 n+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.ung2r mPtr nPtr kPtr aPtr ldaPtr tauPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cungbr.f>+ungbr ::+   Char {- ^ vect -} ->+   Int {- ^ m -} ->+   Int {- ^ k -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Array ZeroInt (Complex Float) {- ^ tau -} ->+   Int {- ^ lwork -} ->+   IO (Int)+ungbr vect m k a tau lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let n = aDim0+   let lda = aDim1+   let _tauSize = tauDim0+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      vectPtr <- Call.char vect+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ungbr vectPtr mPtr nPtr kPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cunghr.f>+unghr ::+   Int {- ^ ilo -} ->+   Int {- ^ ihi -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Array ZeroInt (Complex Float) {- ^ tau -} ->+   Int {- ^ lwork -} ->+   IO (Int)+unghr ilo ihi a tau lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let n = aDim0+   let lda = aDim1+   Call.assert "unghr: n-1 == tauDim0" (n-1 == tauDim0)+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      nPtr <- Call.cint n+      iloPtr <- Call.cint ilo+      ihiPtr <- Call.cint ihi+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.unghr nPtr iloPtr ihiPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cungl2.f>+ungl2 ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Array ZeroInt (Complex Float) {- ^ tau -} ->+   IO (Int)+ungl2 m a tau = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let n = aDim0+   let lda = aDim1+   let k = tauDim0+   work <- Call.newArray1 m+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.ungl2 mPtr nPtr kPtr aPtr ldaPtr tauPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cunglq.f>+unglq ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Array ZeroInt (Complex Float) {- ^ tau -} ->+   Int {- ^ lwork -} ->+   IO (Int)+unglq m a tau lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let n = aDim0+   let lda = aDim1+   let k = tauDim0+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.unglq mPtr nPtr kPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cungql.f>+ungql ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Array ZeroInt (Complex Float) {- ^ tau -} ->+   Int {- ^ lwork -} ->+   IO (Int)+ungql m a tau lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let n = aDim0+   let lda = aDim1+   let k = tauDim0+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ungql mPtr nPtr kPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cungqr.f>+ungqr ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Array ZeroInt (Complex Float) {- ^ tau -} ->+   Int {- ^ lwork -} ->+   IO (Int)+ungqr m a tau lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let n = aDim0+   let lda = aDim1+   let k = tauDim0+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ungqr mPtr nPtr kPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cungr2.f>+ungr2 ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Array ZeroInt (Complex Float) {- ^ tau -} ->+   IO (Int)+ungr2 m a tau = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let n = aDim0+   let lda = aDim1+   let k = tauDim0+   work <- Call.newArray1 m+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.ungr2 mPtr nPtr kPtr aPtr ldaPtr tauPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cungrq.f>+ungrq ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Array ZeroInt (Complex Float) {- ^ tau -} ->+   Int {- ^ lwork -} ->+   IO (Int)+ungrq m a tau lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let n = aDim0+   let lda = aDim1+   let k = tauDim0+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ungrq mPtr nPtr kPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cungtr.f>+ungtr ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Array ZeroInt (Complex Float) {- ^ tau -} ->+   Int {- ^ lwork -} ->+   IO (Int)+ungtr uplo a tau lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let n = aDim0+   let lda = aDim1+   Call.assert "ungtr: n-1 == tauDim0" (n-1 == tauDim0)+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ungtr uploPtr nPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cunm2l.f>+unm2l ::+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Array ZeroInt (Complex Float) {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ c -} ->+   Int {- ^ workSize -} ->+   IO (Int)+unm2l side trans m a tau c workSize = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let k = aDim0+   let lda = aDim1+   let n = cDim0+   let ldc = cDim1+   Call.assert "unm2l: k == tauDim0" (k == tauDim0)+   work <- Call.newArray1 workSize+   evalContT $ do+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.unm2l sidePtr transPtr mPtr nPtr kPtr aPtr ldaPtr tauPtr cPtr ldcPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cunm2r.f>+unm2r ::+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Array ZeroInt (Complex Float) {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ c -} ->+   Int {- ^ workSize -} ->+   IO (Int)+unm2r side trans m a tau c workSize = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let k = aDim0+   let lda = aDim1+   let n = cDim0+   let ldc = cDim1+   Call.assert "unm2r: k == tauDim0" (k == tauDim0)+   work <- Call.newArray1 workSize+   evalContT $ do+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.unm2r sidePtr transPtr mPtr nPtr kPtr aPtr ldaPtr tauPtr cPtr ldcPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cunmbr.f>+unmbr ::+   Char {- ^ vect -} ->+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Int {- ^ k -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Array ZeroInt (Complex Float) {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ c -} ->+   Int {- ^ lwork -} ->+   IO (Int)+unmbr vect side trans m k a tau c lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _aSize = aDim0+   let lda = aDim1+   let n = cDim0+   let ldc = cDim1+   Call.ignore "unmbr: minimum[nq,k] == tauDim0" tauDim0+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      vectPtr <- Call.char vect+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.unmbr vectPtr sidePtr transPtr mPtr nPtr kPtr aPtr ldaPtr tauPtr cPtr ldcPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cunmhr.f>+unmhr ::+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Int {- ^ ilo -} ->+   Int {- ^ ihi -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Array ZeroInt (Complex Float) {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ c -} ->+   Int {- ^ lwork -} ->+   IO (Int)+unmhr side trans m ilo ihi a tau c lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _aSize = aDim0+   let lda = aDim1+   let _tauSize = tauDim0+   let n = cDim0+   let ldc = cDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      iloPtr <- Call.cint ilo+      ihiPtr <- Call.cint ihi+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.unmhr sidePtr transPtr mPtr nPtr iloPtr ihiPtr aPtr ldaPtr tauPtr cPtr ldcPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cunml2.f>+unml2 ::+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Array ZeroInt (Complex Float) {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ c -} ->+   Int {- ^ workSize -} ->+   IO (Int)+unml2 side trans m a tau c workSize = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _aSize = aDim0+   let lda = aDim1+   let k = tauDim0+   let n = cDim0+   let ldc = cDim1+   work <- Call.newArray1 workSize+   evalContT $ do+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.unml2 sidePtr transPtr mPtr nPtr kPtr aPtr ldaPtr tauPtr cPtr ldcPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cunmlq.f>+unmlq ::+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Array ZeroInt (Complex Float) {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ c -} ->+   Int {- ^ lwork -} ->+   IO (Int)+unmlq side trans m a tau c lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _aSize = aDim0+   let lda = aDim1+   let k = tauDim0+   let n = cDim0+   let ldc = cDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.unmlq sidePtr transPtr mPtr nPtr kPtr aPtr ldaPtr tauPtr cPtr ldcPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cunmql.f>+unmql ::+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Array ZeroInt (Complex Float) {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ c -} ->+   Int {- ^ lwork -} ->+   IO (Int)+unmql side trans m a tau c lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let k = aDim0+   let lda = aDim1+   let n = cDim0+   let ldc = cDim1+   Call.assert "unmql: k == tauDim0" (k == tauDim0)+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.unmql sidePtr transPtr mPtr nPtr kPtr aPtr ldaPtr tauPtr cPtr ldcPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cunmqr.f>+unmqr ::+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Array ZeroInt (Complex Float) {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ c -} ->+   Int {- ^ lwork -} ->+   IO (Int)+unmqr side trans m a tau c lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let k = aDim0+   let lda = aDim1+   let n = cDim0+   let ldc = cDim1+   Call.assert "unmqr: k == tauDim0" (k == tauDim0)+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.unmqr sidePtr transPtr mPtr nPtr kPtr aPtr ldaPtr tauPtr cPtr ldcPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cunmr2.f>+unmr2 ::+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Array ZeroInt (Complex Float) {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ c -} ->+   Int {- ^ workSize -} ->+   IO (Int)+unmr2 side trans m a tau c workSize = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _aSize = aDim0+   let lda = aDim1+   let k = tauDim0+   let n = cDim0+   let ldc = cDim1+   work <- Call.newArray1 workSize+   evalContT $ do+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.unmr2 sidePtr transPtr mPtr nPtr kPtr aPtr ldaPtr tauPtr cPtr ldcPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cunmr3.f>+unmr3 ::+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Int {- ^ l -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Array ZeroInt (Complex Float) {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ c -} ->+   Int {- ^ workSize -} ->+   IO (Int)+unmr3 side trans m l a tau c workSize = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _aSize = aDim0+   let lda = aDim1+   let k = tauDim0+   let n = cDim0+   let ldc = cDim1+   work <- Call.newArray1 workSize+   evalContT $ do+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      lPtr <- Call.cint l+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.unmr3 sidePtr transPtr mPtr nPtr kPtr lPtr aPtr ldaPtr tauPtr cPtr ldcPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cunmrq.f>+unmrq ::+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Array ZeroInt (Complex Float) {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ c -} ->+   Int {- ^ lwork -} ->+   IO (Int)+unmrq side trans m a tau c lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _aSize = aDim0+   let lda = aDim1+   let k = tauDim0+   let n = cDim0+   let ldc = cDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.unmrq sidePtr transPtr mPtr nPtr kPtr aPtr ldaPtr tauPtr cPtr ldcPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cunmrz.f>+unmrz ::+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Int {- ^ l -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Array ZeroInt (Complex Float) {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ c -} ->+   Int {- ^ lwork -} ->+   IO (Int)+unmrz side trans m l a tau c lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _aSize = aDim0+   let lda = aDim1+   let k = tauDim0+   let n = cDim0+   let ldc = cDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      lPtr <- Call.cint l+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.unmrz sidePtr transPtr mPtr nPtr kPtr lPtr aPtr ldaPtr tauPtr cPtr ldcPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cunmtr.f>+unmtr ::+   Char {- ^ side -} ->+   Char {- ^ uplo -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->+   Array ZeroInt (Complex Float) {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ c -} ->+   Int {- ^ lwork -} ->+   IO (Int)+unmtr side uplo trans m a tau c lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _aSize = aDim0+   let lda = aDim1+   let _tauSize = tauDim0+   let n = cDim0+   let ldc = cDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      sidePtr <- Call.char side+      uploPtr <- Call.char uplo+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.unmtr sidePtr uploPtr transPtr mPtr nPtr aPtr ldaPtr tauPtr cPtr ldcPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cupgtr.f>+upgtr ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Array ZeroInt (Complex Float) {- ^ ap -} ->+   Array ZeroInt (Complex Float) {- ^ tau -} ->+   Int {- ^ ldq -} ->+   IO (Array (ZeroInt,ZeroInt) (Complex Float), Int)+upgtr uplo n ap tau ldq = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let tauDim0 = Call.sizes1 $ Array.shape tau+   Call.assert "upgtr: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   Call.assert "upgtr: n-1 == tauDim0" (n-1 == tauDim0)+   q <- Call.newArray2 n ldq+   work <- Call.newArray1 (n-1)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.array ap+      tauPtr <- Call.array tau+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.upgtr uploPtr nPtr apPtr tauPtr qPtr ldqPtr workPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray q+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cupmtr.f>+upmtr ::+   Char {- ^ side -} ->+   Char {- ^ uplo -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Array ZeroInt (Complex Float) {- ^ ap -} ->+   Array ZeroInt (Complex Float) {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ c -} ->+   Int {- ^ workSize -} ->+   IO (Int)+upmtr side uplo trans m ap tau c workSize = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _apSize = apDim0+   let _tauSize = tauDim0+   let n = cDim0+   let ldc = cDim1+   work <- Call.newArray1 workSize+   evalContT $ do+      sidePtr <- Call.char side+      uploPtr <- Call.char uplo+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      apPtr <- Call.array ap+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.upmtr sidePtr uploPtr transPtr mPtr nPtr apPtr tauPtr cPtr ldcPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)
+ src/Numeric/LAPACK/ComfortArray/Demo.hs view
@@ -0,0 +1,32 @@+module Numeric.LAPACK.ComfortArray.Demo where++import qualified Numeric.LAPACK.ComfortArray.Float as Lapack+import Numeric.Netlib.ComfortArray.Utility (ZeroInt)++import qualified Data.Array.Comfort.Storable.Mutable as MutArray+import qualified Data.Array.Comfort.Storable as Array+import qualified Data.Array.Comfort.Shape as Shape+import Data.Array.Comfort.Storable (Array)++import Control.Monad (liftM2)++++gels ::+   Array (ZeroInt,ZeroInt) Float -> Array (ZeroInt,ZeroInt) Float ->+   IO (Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float)+gels a b = do+   ioa <- MutArray.thaw a+   iob <- MutArray.thaw b+   print =<< Lapack.gels 'N' 3 ioa iob 100+   liftM2 (,)+      (MutArray.freeze ioa)+      (MutArray.freeze iob)++main :: IO ()+main =+   let z3 = Shape.ZeroBased 3+   in print =<<+      gels+         (Array.fromList (z3,z3) [1,2,3,0,1,4,0,0,1])+         (Array.fromList (z3,z3) [1,0,0,0,1,0,0,0,1])
+ src/Numeric/LAPACK/ComfortArray/Double.hs view
@@ -0,0 +1,13572 @@+-- Do not edit! Automatically generated by create-lapack-ffi.+module Numeric.LAPACK.ComfortArray.Double where++import qualified Numeric.LAPACK.FFI.Double as FFI+import qualified Numeric.Netlib.ComfortArray.Utility as Call+import Numeric.Netlib.ComfortArray.Utility (ZeroInt, (^!))++import qualified Data.Array.Comfort.Storable.Mutable as MutArray+import qualified Data.Array.Comfort.Storable as Array+import Data.Array.Comfort.Storable.Mutable (IOArray)+import Data.Array.Comfort.Storable (Array)++import Foreign.Storable (peek)+import Foreign.Ptr (Ptr, FunPtr)+import Foreign.C.String (castCCharToChar)+import Foreign.C.Types (CInt)++import Control.Monad.Trans.Cont (evalContT)+import Control.Monad.IO.Class (liftIO)+import Control.Applicative (pure, (<*>))+++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dbbcsd.f>+bbcsd ::+   Char {- ^ jobu1 -} ->+   Char {- ^ jobu2 -} ->+   Char {- ^ jobv1t -} ->+   Char {- ^ jobv2t -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   IOArray ZeroInt Double {- ^ theta -} ->+   IOArray ZeroInt Double {- ^ phi -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ u1 -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ u2 -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ v1t -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ v2t -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Int)+bbcsd jobu1 jobu2 jobv1t jobv2t trans m theta phi u1 u2 v1t v2t lwork = do+   let thetaDim0 = Call.sizes1 $ MutArray.shape theta+   let phiDim0 = Call.sizes1 $ MutArray.shape phi+   let (u1Dim0,u1Dim1) = Call.sizes2 $ MutArray.shape u1+   let (u2Dim0,u2Dim1) = Call.sizes2 $ MutArray.shape u2+   let (v1tDim0,v1tDim1) = Call.sizes2 $ MutArray.shape v1t+   let (v2tDim0,v2tDim1) = Call.sizes2 $ MutArray.shape v2t+   let q = thetaDim0+   let p = u1Dim0+   let ldu1 = u1Dim1+   let ldu2 = u2Dim1+   let ldv1t = v1tDim1+   let ldv2t = v2tDim1+   Call.assert "bbcsd: q-1 == phiDim0" (q-1 == phiDim0)+   Call.assert "bbcsd: m-p == u2Dim0" (m-p == u2Dim0)+   Call.assert "bbcsd: q == v1tDim0" (q == v1tDim0)+   Call.assert "bbcsd: m-q == v2tDim0" (m-q == v2tDim0)+   b11d <- Call.newArray1 q+   b11e <- Call.newArray1 (q-1)+   b12d <- Call.newArray1 q+   b12e <- Call.newArray1 (q-1)+   b21d <- Call.newArray1 q+   b21e <- Call.newArray1 (q-1)+   b22d <- Call.newArray1 q+   b22e <- Call.newArray1 (q-1)+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      jobu1Ptr <- Call.char jobu1+      jobu2Ptr <- Call.char jobu2+      jobv1tPtr <- Call.char jobv1t+      jobv2tPtr <- Call.char jobv2t+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      pPtr <- Call.cint p+      qPtr <- Call.cint q+      thetaPtr <- Call.ioarray theta+      phiPtr <- Call.ioarray phi+      u1Ptr <- Call.ioarray u1+      ldu1Ptr <- Call.cint ldu1+      u2Ptr <- Call.ioarray u2+      ldu2Ptr <- Call.cint ldu2+      v1tPtr <- Call.ioarray v1t+      ldv1tPtr <- Call.cint ldv1t+      v2tPtr <- Call.ioarray v2t+      ldv2tPtr <- Call.cint ldv2t+      b11dPtr <- Call.ioarray b11d+      b11ePtr <- Call.ioarray b11e+      b12dPtr <- Call.ioarray b12d+      b12ePtr <- Call.ioarray b12e+      b21dPtr <- Call.ioarray b21d+      b21ePtr <- Call.ioarray b21e+      b22dPtr <- Call.ioarray b22d+      b22ePtr <- Call.ioarray b22e+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.bbcsd jobu1Ptr jobu2Ptr jobv1tPtr jobv2tPtr transPtr mPtr pPtr qPtr thetaPtr phiPtr u1Ptr ldu1Ptr u2Ptr ldu2Ptr v1tPtr ldv1tPtr v2tPtr ldv2tPtr b11dPtr b11ePtr b12dPtr b12ePtr b21dPtr b21ePtr b22dPtr b22ePtr workPtr lworkPtr infoPtr+      liftIO $ pure (,,,,,,,,)+         <*> Call.freezeArray b11d+         <*> Call.freezeArray b11e+         <*> Call.freezeArray b12d+         <*> Call.freezeArray b12e+         <*> Call.freezeArray b21d+         <*> Call.freezeArray b21e+         <*> Call.freezeArray b22d+         <*> Call.freezeArray b22e+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dbdsdc.f>+bdsdc ::+   Char {- ^ uplo -} ->+   Char {- ^ compq -} ->+   IOArray ZeroInt Double {- ^ d -} ->+   IOArray ZeroInt Double {- ^ e -} ->+   Int {- ^ ldu -} ->+   Int {- ^ ldvt -} ->+   Int {- ^ ldq -} ->+   Int {- ^ ldiq -} ->+   Int {- ^ lwork -} ->+   IO (Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double, Array ZeroInt Double, Array ZeroInt CInt, Int)+bdsdc uplo compq d e ldu ldvt ldq ldiq lwork = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let n = dDim0+   Call.assert "bdsdc: n-1 == eDim0" (n-1 == eDim0)+   u <- Call.newArray2 n ldu+   vt <- Call.newArray2 n ldvt+   q <- Call.newArray1 ldq+   iq <- Call.newArray1 ldiq+   work <- Call.newArray1 (maximum[1,lwork])+   iwork <- Call.newArray1 (8*n)+   evalContT $ do+      uploPtr <- Call.char uplo+      compqPtr <- Call.char compq+      nPtr <- Call.cint n+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      uPtr <- Call.ioarray u+      lduPtr <- Call.cint ldu+      vtPtr <- Call.ioarray vt+      ldvtPtr <- Call.cint ldvt+      qPtr <- Call.ioarray q+      iqPtr <- Call.ioarray iq+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.bdsdc uploPtr compqPtr nPtr dPtr ePtr uPtr lduPtr vtPtr ldvtPtr qPtr iqPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,,,,)+         <*> Call.freezeArray u+         <*> Call.freezeArray vt+         <*> Call.freezeArray q+         <*> Call.freezeArray iq+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dbdsqr.f>+bdsqr ::+   Char {- ^ uplo -} ->+   Int {- ^ nru -} ->+   IOArray ZeroInt Double {- ^ d -} ->+   IOArray ZeroInt Double {- ^ e -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ vt -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ u -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ c -} ->+   IO (Int)+bdsqr uplo nru d e vt u c = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let (vtDim0,vtDim1) = Call.sizes2 $ MutArray.shape vt+   let (uDim0,uDim1) = Call.sizes2 $ MutArray.shape u+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let n = dDim0+   let ncvt = vtDim0+   let ldvt = vtDim1+   let ldu = uDim1+   let ncc = cDim0+   let ldc = cDim1+   Call.assert "bdsqr: n-1 == eDim0" (n-1 == eDim0)+   Call.assert "bdsqr: n == uDim0" (n == uDim0)+   work <- Call.newArray1 (4*n)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      ncvtPtr <- Call.cint ncvt+      nruPtr <- Call.cint nru+      nccPtr <- Call.cint ncc+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      vtPtr <- Call.ioarray vt+      ldvtPtr <- Call.cint ldvt+      uPtr <- Call.ioarray u+      lduPtr <- Call.cint ldu+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.bdsqr uploPtr nPtr ncvtPtr nruPtr nccPtr dPtr ePtr vtPtr ldvtPtr uPtr lduPtr cPtr ldcPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ddisna.f>+disna ::+   Char {- ^ job -} ->+   Int {- ^ m -} ->+   Int {- ^ n -} ->+   Array ZeroInt Double {- ^ d -} ->+   Int {- ^ sepSize -} ->+   IO (Array ZeroInt Double, Int)+disna job m n d sepSize = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let _dSize = dDim0+   sep <- Call.newArray1 sepSize+   evalContT $ do+      jobPtr <- Call.char job+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      dPtr <- Call.array d+      sepPtr <- Call.ioarray sep+      infoPtr <- Call.alloca+      liftIO $ FFI.disna jobPtr mPtr nPtr dPtr sepPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray sep+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgbbrd.f>+gbbrd ::+   Char {- ^ vect -} ->+   Int {- ^ m -} ->+   Int {- ^ kl -} ->+   Int {- ^ ku -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ ab -} ->+   Int {- ^ ldq -} ->+   Int {- ^ ldpt -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ c -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double, Int)+gbbrd vect m kl ku ab ldq ldpt c = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let n = abDim0+   let ldab = abDim1+   let ncc = cDim0+   let ldc = cDim1+   d <- Call.newArray1 (minimum[m,n])+   e <- Call.newArray1 (minimum[m,n]-1)+   q <- Call.newArray2 m ldq+   pt <- Call.newArray2 n ldpt+   work <- Call.newArray1 (2*maximum[m,n])+   evalContT $ do+      vectPtr <- Call.char vect+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      nccPtr <- Call.cint ncc+      klPtr <- Call.cint kl+      kuPtr <- Call.cint ku+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      ptPtr <- Call.ioarray pt+      ldptPtr <- Call.cint ldpt+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.gbbrd vectPtr mPtr nPtr nccPtr klPtr kuPtr abPtr ldabPtr dPtr ePtr qPtr ldqPtr ptPtr ldptPtr cPtr ldcPtr workPtr infoPtr+      liftIO $ pure (,,,,)+         <*> Call.freezeArray d+         <*> Call.freezeArray e+         <*> Call.freezeArray q+         <*> Call.freezeArray pt+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgbcon.f>+gbcon ::+   Char {- ^ norm -} ->+   Int {- ^ kl -} ->+   Int {- ^ ku -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ ab -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Double {- ^ anorm -} ->+   IO (Double, Int)+gbcon norm kl ku ab ipiv anorm = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = abDim0+   let ldab = abDim1+   Call.assert "gbcon: n == ipivDim0" (n == ipivDim0)+   work <- Call.newArray1 (3*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      normPtr <- Call.char norm+      nPtr <- Call.cint n+      klPtr <- Call.cint kl+      kuPtr <- Call.cint ku+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      ipivPtr <- Call.array ipiv+      anormPtr <- Call.double anorm+      rcondPtr <- Call.alloca+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gbcon normPtr nPtr klPtr kuPtr abPtr ldabPtr ipivPtr anormPtr rcondPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,)+         <*> peek rcondPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgbequ.f>+gbequ ::+   Int {- ^ m -} ->+   Int {- ^ kl -} ->+   Int {- ^ ku -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ ab -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Double, Double, Double, Int)+gbequ m kl ku ab = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let n = abDim0+   let ldab = abDim1+   r <- Call.newArray1 m+   c <- Call.newArray1 n+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      klPtr <- Call.cint kl+      kuPtr <- Call.cint ku+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      rPtr <- Call.ioarray r+      cPtr <- Call.ioarray c+      rowcndPtr <- Call.alloca+      colcndPtr <- Call.alloca+      amaxPtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.gbequ mPtr nPtr klPtr kuPtr abPtr ldabPtr rPtr cPtr rowcndPtr colcndPtr amaxPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> Call.freezeArray r+         <*> Call.freezeArray c+         <*> peek rowcndPtr+         <*> peek colcndPtr+         <*> peek amaxPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgbequb.f>+gbequb ::+   Int {- ^ m -} ->+   Int {- ^ kl -} ->+   Int {- ^ ku -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ ab -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Double, Double, Double, Int)+gbequb m kl ku ab = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let n = abDim0+   let ldab = abDim1+   r <- Call.newArray1 m+   c <- Call.newArray1 n+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      klPtr <- Call.cint kl+      kuPtr <- Call.cint ku+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      rPtr <- Call.ioarray r+      cPtr <- Call.ioarray c+      rowcndPtr <- Call.alloca+      colcndPtr <- Call.alloca+      amaxPtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.gbequb mPtr nPtr klPtr kuPtr abPtr ldabPtr rPtr cPtr rowcndPtr colcndPtr amaxPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> Call.freezeArray r+         <*> Call.freezeArray c+         <*> peek rowcndPtr+         <*> peek colcndPtr+         <*> peek amaxPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgbrfs.f>+gbrfs ::+   Char {- ^ trans -} ->+   Int {- ^ kl -} ->+   Int {- ^ ku -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ ab -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ afb -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ x -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Int)+gbrfs trans kl ku ab afb ipiv b x = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let (afbDim0,afbDim1) = Call.sizes2 $ Array.shape afb+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (xDim0,xDim1) = Call.sizes2 $ MutArray.shape x+   let n = abDim0+   let ldab = abDim1+   let ldafb = afbDim1+   let nrhs = bDim0+   let ldb = bDim1+   let ldx = xDim1+   Call.assert "gbrfs: n == afbDim0" (n == afbDim0)+   Call.assert "gbrfs: n == ipivDim0" (n == ipivDim0)+   Call.assert "gbrfs: nrhs == xDim0" (nrhs == xDim0)+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (3*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      transPtr <- Call.char trans+      nPtr <- Call.cint n+      klPtr <- Call.cint kl+      kuPtr <- Call.cint ku+      nrhsPtr <- Call.cint nrhs+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      afbPtr <- Call.array afb+      ldafbPtr <- Call.cint ldafb+      ipivPtr <- Call.array ipiv+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gbrfs transPtr nPtr klPtr kuPtr nrhsPtr abPtr ldabPtr afbPtr ldafbPtr ipivPtr bPtr ldbPtr xPtr ldxPtr ferrPtr berrPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgbsv.f>+gbsv ::+   Int {- ^ kl -} ->+   Int {- ^ ku -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ ab -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   IO (Array ZeroInt CInt, Int)+gbsv kl ku ab b = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = abDim0+   let ldab = abDim1+   let nrhs = bDim0+   let ldb = bDim1+   ipiv <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      klPtr <- Call.cint kl+      kuPtr <- Call.cint ku+      nrhsPtr <- Call.cint nrhs+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      ipivPtr <- Call.ioarray ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.gbsv nPtr klPtr kuPtr nrhsPtr abPtr ldabPtr ipivPtr bPtr ldbPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgbsvx.f>+gbsvx ::+   Char {- ^ fact -} ->+   Char {- ^ trans -} ->+   Int {- ^ kl -} ->+   Int {- ^ ku -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ ab -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ afb -} ->+   IOArray ZeroInt CInt {- ^ ipiv -} ->+   Char {- ^ equed -} ->+   IOArray ZeroInt Double {- ^ r -} ->+   IOArray ZeroInt Double {- ^ c -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   Int {- ^ ldx -} ->+   IO (Char, Array (ZeroInt,ZeroInt) Double, Double, Array ZeroInt Double, Array ZeroInt Double, Int)+gbsvx fact trans kl ku ab afb ipiv equed r c b ldx = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let (afbDim0,afbDim1) = Call.sizes2 $ MutArray.shape afb+   let ipivDim0 = Call.sizes1 $ MutArray.shape ipiv+   let rDim0 = Call.sizes1 $ MutArray.shape r+   let cDim0 = Call.sizes1 $ MutArray.shape c+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = abDim0+   let ldab = abDim1+   let ldafb = afbDim1+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "gbsvx: n == afbDim0" (n == afbDim0)+   Call.assert "gbsvx: n == ipivDim0" (n == ipivDim0)+   Call.assert "gbsvx: n == rDim0" (n == rDim0)+   Call.assert "gbsvx: n == cDim0" (n == cDim0)+   x <- Call.newArray2 nrhs ldx+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (3*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      factPtr <- Call.char fact+      transPtr <- Call.char trans+      nPtr <- Call.cint n+      klPtr <- Call.cint kl+      kuPtr <- Call.cint ku+      nrhsPtr <- Call.cint nrhs+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      afbPtr <- Call.ioarray afb+      ldafbPtr <- Call.cint ldafb+      ipivPtr <- Call.ioarray ipiv+      equedPtr <- Call.char equed+      rPtr <- Call.ioarray r+      cPtr <- Call.ioarray c+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      rcondPtr <- Call.alloca+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gbsvx factPtr transPtr nPtr klPtr kuPtr nrhsPtr abPtr ldabPtr afbPtr ldafbPtr ipivPtr equedPtr rPtr cPtr bPtr ldbPtr xPtr ldxPtr rcondPtr ferrPtr berrPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> fmap castCCharToChar (peek equedPtr)+         <*> Call.freezeArray x+         <*> peek rcondPtr+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgbtf2.f>+gbtf2 ::+   Int {- ^ m -} ->+   Int {- ^ kl -} ->+   Int {- ^ ku -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ ab -} ->+   IO (Array ZeroInt CInt, Int)+gbtf2 m kl ku ab = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let n = abDim0+   let ldab = abDim1+   ipiv <- Call.newArray1 (minimum[m,n])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      klPtr <- Call.cint kl+      kuPtr <- Call.cint ku+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      ipivPtr <- Call.ioarray ipiv+      infoPtr <- Call.alloca+      liftIO $ FFI.gbtf2 mPtr nPtr klPtr kuPtr abPtr ldabPtr ipivPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgbtrf.f>+gbtrf ::+   Int {- ^ m -} ->+   Int {- ^ kl -} ->+   Int {- ^ ku -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ ab -} ->+   IO (Array ZeroInt CInt, Int)+gbtrf m kl ku ab = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let n = abDim0+   let ldab = abDim1+   ipiv <- Call.newArray1 (minimum[m,n])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      klPtr <- Call.cint kl+      kuPtr <- Call.cint ku+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      ipivPtr <- Call.ioarray ipiv+      infoPtr <- Call.alloca+      liftIO $ FFI.gbtrf mPtr nPtr klPtr kuPtr abPtr ldabPtr ipivPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgbtrs.f>+gbtrs ::+   Char {- ^ trans -} ->+   Int {- ^ kl -} ->+   Int {- ^ ku -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ ab -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   IO (Int)+gbtrs trans kl ku ab ipiv b = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = abDim0+   let ldab = abDim1+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "gbtrs: n == ipivDim0" (n == ipivDim0)+   evalContT $ do+      transPtr <- Call.char trans+      nPtr <- Call.cint n+      klPtr <- Call.cint kl+      kuPtr <- Call.cint ku+      nrhsPtr <- Call.cint nrhs+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      ipivPtr <- Call.array ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.gbtrs transPtr nPtr klPtr kuPtr nrhsPtr abPtr ldabPtr ipivPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgebak.f>+gebak ::+   Char {- ^ job -} ->+   Char {- ^ side -} ->+   Int {- ^ ilo -} ->+   Int {- ^ ihi -} ->+   Array ZeroInt Double {- ^ scale -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ v -} ->+   IO (Int)+gebak job side ilo ihi scale v = do+   let scaleDim0 = Call.sizes1 $ Array.shape scale+   let (vDim0,vDim1) = Call.sizes2 $ MutArray.shape v+   let n = scaleDim0+   let m = vDim0+   let ldv = vDim1+   evalContT $ do+      jobPtr <- Call.char job+      sidePtr <- Call.char side+      nPtr <- Call.cint n+      iloPtr <- Call.cint ilo+      ihiPtr <- Call.cint ihi+      scalePtr <- Call.array scale+      mPtr <- Call.cint m+      vPtr <- Call.ioarray v+      ldvPtr <- Call.cint ldv+      infoPtr <- Call.alloca+      liftIO $ FFI.gebak jobPtr sidePtr nPtr iloPtr ihiPtr scalePtr mPtr vPtr ldvPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgebal.f>+gebal ::+   Char {- ^ job -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IO (Int, Int, Array ZeroInt Double, Int)+gebal job a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   scale <- Call.newArray1 n+   evalContT $ do+      jobPtr <- Call.char job+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      iloPtr <- Call.alloca+      ihiPtr <- Call.alloca+      scalePtr <- Call.ioarray scale+      infoPtr <- Call.alloca+      liftIO $ FFI.gebal jobPtr nPtr aPtr ldaPtr iloPtr ihiPtr scalePtr infoPtr+      liftIO $ pure (,,,)+         <*> fmap fromIntegral (peek iloPtr)+         <*> fmap fromIntegral (peek ihiPtr)+         <*> Call.freezeArray scale+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgebd2.f>+gebd2 ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Int)+gebd2 m a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   d <- Call.newArray1 (minimum[m,n])+   e <- Call.newArray1 (minimum[m,n]-1)+   tauq <- Call.newArray1 (minimum[m,n])+   taup <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 (maximum[m,n])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      tauqPtr <- Call.ioarray tauq+      taupPtr <- Call.ioarray taup+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.gebd2 mPtr nPtr aPtr ldaPtr dPtr ePtr tauqPtr taupPtr workPtr infoPtr+      liftIO $ pure (,,,,)+         <*> Call.freezeArray d+         <*> Call.freezeArray e+         <*> Call.freezeArray tauq+         <*> Call.freezeArray taup+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgebrd.f>+gebrd ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Int)+gebrd m a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   d <- Call.newArray1 (minimum[m,n])+   e <- Call.newArray1 (minimum[m,n]-1)+   tauq <- Call.newArray1 (minimum[m,n])+   taup <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      tauqPtr <- Call.ioarray tauq+      taupPtr <- Call.ioarray taup+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gebrd mPtr nPtr aPtr ldaPtr dPtr ePtr tauqPtr taupPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,,,,)+         <*> Call.freezeArray d+         <*> Call.freezeArray e+         <*> Call.freezeArray tauq+         <*> Call.freezeArray taup+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgecon.f>+gecon ::+   Char {- ^ norm -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Double {- ^ anorm -} ->+   IO (Double, Int)+gecon norm a anorm = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   work <- Call.newArray1 (4*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      normPtr <- Call.char norm+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      anormPtr <- Call.double anorm+      rcondPtr <- Call.alloca+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gecon normPtr nPtr aPtr ldaPtr anormPtr rcondPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,)+         <*> peek rcondPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgeequ.f>+geequ ::+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Double, Double, Double, Int)+geequ m a = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   r <- Call.newArray1 m+   c <- Call.newArray1 n+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      rPtr <- Call.ioarray r+      cPtr <- Call.ioarray c+      rowcndPtr <- Call.alloca+      colcndPtr <- Call.alloca+      amaxPtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.geequ mPtr nPtr aPtr ldaPtr rPtr cPtr rowcndPtr colcndPtr amaxPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> Call.freezeArray r+         <*> Call.freezeArray c+         <*> peek rowcndPtr+         <*> peek colcndPtr+         <*> peek amaxPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgeequb.f>+geequb ::+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Double, Double, Double, Int)+geequb m a = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   r <- Call.newArray1 m+   c <- Call.newArray1 n+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      rPtr <- Call.ioarray r+      cPtr <- Call.ioarray c+      rowcndPtr <- Call.alloca+      colcndPtr <- Call.alloca+      amaxPtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.geequb mPtr nPtr aPtr ldaPtr rPtr cPtr rowcndPtr colcndPtr amaxPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> Call.freezeArray r+         <*> Call.freezeArray c+         <*> peek rowcndPtr+         <*> peek colcndPtr+         <*> peek amaxPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgees.f>+gees ::+   Char {- ^ jobvs -} ->+   Char {- ^ sort -} ->+   FunPtr (Ptr Double -> Ptr Double -> IO Bool) {- ^ select -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Int {- ^ ldvs -} ->+   Int {- ^ lwork -} ->+   IO (Int, Array ZeroInt Double, Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Int)+gees jobvs sort select a ldvs lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   wr <- Call.newArray1 n+   wi <- Call.newArray1 n+   vs <- Call.newArray2 n ldvs+   work <- Call.newArray1 (maximum[1,lwork])+   bwork <- Call.newArray1 n+   evalContT $ do+      jobvsPtr <- Call.char jobvs+      sortPtr <- Call.char sort+      selectPtr <- pure select+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      sdimPtr <- Call.alloca+      wrPtr <- Call.ioarray wr+      wiPtr <- Call.ioarray wi+      vsPtr <- Call.ioarray vs+      ldvsPtr <- Call.cint ldvs+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      bworkPtr <- Call.ioarray bwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gees jobvsPtr sortPtr selectPtr nPtr aPtr ldaPtr sdimPtr wrPtr wiPtr vsPtr ldvsPtr workPtr lworkPtr bworkPtr infoPtr+      liftIO $ pure (,,,,)+         <*> fmap fromIntegral (peek sdimPtr)+         <*> Call.freezeArray wr+         <*> Call.freezeArray wi+         <*> Call.freezeArray vs+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgeesx.f>+geesx ::+   Char {- ^ jobvs -} ->+   Char {- ^ sort -} ->+   FunPtr (Ptr Double -> Ptr Double -> IO Bool) {- ^ select -} ->+   Char {- ^ sense -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Int {- ^ ldvs -} ->+   Int {- ^ lwork -} ->+   Int {- ^ liwork -} ->+   IO (Int, Array ZeroInt Double, Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Double, Double, Int)+geesx jobvs sort select sense a ldvs lwork liwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   wr <- Call.newArray1 n+   wi <- Call.newArray1 n+   vs <- Call.newArray2 n ldvs+   work <- Call.newArray1 (maximum[1,lwork])+   iwork <- Call.newArray1 (maximum[1,liwork])+   bwork <- Call.newArray1 n+   evalContT $ do+      jobvsPtr <- Call.char jobvs+      sortPtr <- Call.char sort+      selectPtr <- pure select+      sensePtr <- Call.char sense+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      sdimPtr <- Call.alloca+      wrPtr <- Call.ioarray wr+      wiPtr <- Call.ioarray wi+      vsPtr <- Call.ioarray vs+      ldvsPtr <- Call.cint ldvs+      rcondePtr <- Call.alloca+      rcondvPtr <- Call.alloca+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      bworkPtr <- Call.ioarray bwork+      infoPtr <- Call.alloca+      liftIO $ FFI.geesx jobvsPtr sortPtr selectPtr sensePtr nPtr aPtr ldaPtr sdimPtr wrPtr wiPtr vsPtr ldvsPtr rcondePtr rcondvPtr workPtr lworkPtr iworkPtr liworkPtr bworkPtr infoPtr+      liftIO $ pure (,,,,,,)+         <*> fmap fromIntegral (peek sdimPtr)+         <*> Call.freezeArray wr+         <*> Call.freezeArray wi+         <*> Call.freezeArray vs+         <*> peek rcondePtr+         <*> peek rcondvPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgeev.f>+geev ::+   Char {- ^ jobvl -} ->+   Char {- ^ jobvr -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Int {- ^ ldvl -} ->+   Int {- ^ ldvr -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double, Int)+geev jobvl jobvr a ldvl ldvr lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   wr <- Call.newArray1 n+   wi <- Call.newArray1 n+   vl <- Call.newArray2 n ldvl+   vr <- Call.newArray2 n ldvr+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      jobvlPtr <- Call.char jobvl+      jobvrPtr <- Call.char jobvr+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      wrPtr <- Call.ioarray wr+      wiPtr <- Call.ioarray wi+      vlPtr <- Call.ioarray vl+      ldvlPtr <- Call.cint ldvl+      vrPtr <- Call.ioarray vr+      ldvrPtr <- Call.cint ldvr+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.geev jobvlPtr jobvrPtr nPtr aPtr ldaPtr wrPtr wiPtr vlPtr ldvlPtr vrPtr ldvrPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,,,,)+         <*> Call.freezeArray wr+         <*> Call.freezeArray wi+         <*> Call.freezeArray vl+         <*> Call.freezeArray vr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgeevx.f>+geevx ::+   Char {- ^ balanc -} ->+   Char {- ^ jobvl -} ->+   Char {- ^ jobvr -} ->+   Char {- ^ sense -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Int {- ^ ldvl -} ->+   Int {- ^ ldvr -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double, Int, Int, Array ZeroInt Double, Double, Array ZeroInt Double, Array ZeroInt Double, Int)+geevx balanc jobvl jobvr sense a ldvl ldvr lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   wr <- Call.newArray1 n+   wi <- Call.newArray1 n+   vl <- Call.newArray2 n ldvl+   vr <- Call.newArray2 n ldvr+   scale <- Call.newArray1 n+   rconde <- Call.newArray1 n+   rcondv <- Call.newArray1 n+   work <- Call.newArray1 (maximum[1,lwork])+   iwork <- Call.newArray1 (2*n-2)+   evalContT $ do+      balancPtr <- Call.char balanc+      jobvlPtr <- Call.char jobvl+      jobvrPtr <- Call.char jobvr+      sensePtr <- Call.char sense+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      wrPtr <- Call.ioarray wr+      wiPtr <- Call.ioarray wi+      vlPtr <- Call.ioarray vl+      ldvlPtr <- Call.cint ldvl+      vrPtr <- Call.ioarray vr+      ldvrPtr <- Call.cint ldvr+      iloPtr <- Call.alloca+      ihiPtr <- Call.alloca+      scalePtr <- Call.ioarray scale+      abnrmPtr <- Call.alloca+      rcondePtr <- Call.ioarray rconde+      rcondvPtr <- Call.ioarray rcondv+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.geevx balancPtr jobvlPtr jobvrPtr sensePtr nPtr aPtr ldaPtr wrPtr wiPtr vlPtr ldvlPtr vrPtr ldvrPtr iloPtr ihiPtr scalePtr abnrmPtr rcondePtr rcondvPtr workPtr lworkPtr iworkPtr infoPtr+      liftIO $ pure (,,,,,,,,,,)+         <*> Call.freezeArray wr+         <*> Call.freezeArray wi+         <*> Call.freezeArray vl+         <*> Call.freezeArray vr+         <*> fmap fromIntegral (peek iloPtr)+         <*> fmap fromIntegral (peek ihiPtr)+         <*> Call.freezeArray scale+         <*> peek abnrmPtr+         <*> Call.freezeArray rconde+         <*> Call.freezeArray rcondv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgehd2.f>+gehd2 ::+   Int {- ^ ilo -} ->+   Int {- ^ ihi -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IO (Array ZeroInt Double, Int)+gehd2 ilo ihi a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 (n-1)+   work <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      iloPtr <- Call.cint ilo+      ihiPtr <- Call.cint ihi+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.gehd2 nPtr iloPtr ihiPtr aPtr ldaPtr tauPtr workPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgehrd.f>+gehrd ::+   Int {- ^ ilo -} ->+   Int {- ^ ihi -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Double, Int)+gehrd ilo ihi a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 (n-1)+   work <- Call.newArray1 lwork+   evalContT $ do+      nPtr <- Call.cint n+      iloPtr <- Call.cint ilo+      ihiPtr <- Call.cint ihi+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gehrd nPtr iloPtr ihiPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgejsv.f>+gejsv ::+   Char {- ^ joba -} ->+   Char {- ^ jobu -} ->+   Char {- ^ jobv -} ->+   Char {- ^ jobr -} ->+   Char {- ^ jobt -} ->+   Char {- ^ jobp -} ->+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Int {- ^ ldu -} ->+   Int {- ^ ldv -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double, Int)+gejsv joba jobu jobv jobr jobt jobp m a ldu ldv lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   sva <- Call.newArray1 n+   u <- Call.newArray2 n ldu+   v <- Call.newArray2 n ldv+   work <- Call.newArray1 lwork+   iwork <- Call.newArray1 (m+3*n)+   evalContT $ do+      jobaPtr <- Call.char joba+      jobuPtr <- Call.char jobu+      jobvPtr <- Call.char jobv+      jobrPtr <- Call.char jobr+      jobtPtr <- Call.char jobt+      jobpPtr <- Call.char jobp+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      svaPtr <- Call.ioarray sva+      uPtr <- Call.ioarray u+      lduPtr <- Call.cint ldu+      vPtr <- Call.ioarray v+      ldvPtr <- Call.cint ldv+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gejsv jobaPtr jobuPtr jobvPtr jobrPtr jobtPtr jobpPtr mPtr nPtr aPtr ldaPtr svaPtr uPtr lduPtr vPtr ldvPtr workPtr lworkPtr iworkPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray sva+         <*> Call.freezeArray u+         <*> Call.freezeArray v+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgelq2.f>+gelq2 ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IO (Array ZeroInt Double, Int)+gelq2 m a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 m+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.gelq2 mPtr nPtr aPtr ldaPtr tauPtr workPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgelqf.f>+gelqf ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Double, Int)+gelqf m a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gelqf mPtr nPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgels.f>+gels ::+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   Int {- ^ lwork -} ->+   IO (Int)+gels trans m a b lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gels transPtr mPtr nPtr nrhsPtr aPtr ldaPtr bPtr ldbPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgelsd.f>+gelsd ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   Double {- ^ rcond -} ->+   Int {- ^ lwork -} ->+   Int {- ^ liwork -} ->+   IO (Array ZeroInt Double, Int, Int)+gelsd m a b rcond lwork liwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   s <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 (maximum[1,lwork])+   iwork <- Call.newArray1 (maximum[1,liwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      sPtr <- Call.ioarray s+      rcondPtr <- Call.double rcond+      rankPtr <- Call.alloca+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gelsd mPtr nPtr nrhsPtr aPtr ldaPtr bPtr ldbPtr sPtr rcondPtr rankPtr workPtr lworkPtr iworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray s+         <*> fmap fromIntegral (peek rankPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgelss.f>+gelss ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   Double {- ^ rcond -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Double, Int, Int)+gelss m a b rcond lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   s <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      sPtr <- Call.ioarray s+      rcondPtr <- Call.double rcond+      rankPtr <- Call.alloca+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gelss mPtr nPtr nrhsPtr aPtr ldaPtr bPtr ldbPtr sPtr rcondPtr rankPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray s+         <*> fmap fromIntegral (peek rankPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgelsy.f>+gelsy ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   IOArray ZeroInt CInt {- ^ jpvt -} ->+   Double {- ^ rcond -} ->+   Int {- ^ lwork -} ->+   IO (Int, Int)+gelsy m a b jpvt rcond lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let jpvtDim0 = Call.sizes1 $ MutArray.shape jpvt+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "gelsy: n == jpvtDim0" (n == jpvtDim0)+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      jpvtPtr <- Call.ioarray jpvt+      rcondPtr <- Call.double rcond+      rankPtr <- Call.alloca+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gelsy mPtr nPtr nrhsPtr aPtr ldaPtr bPtr ldbPtr jpvtPtr rcondPtr rankPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> fmap fromIntegral (peek rankPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgeql2.f>+geql2 ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IO (Array ZeroInt Double, Int)+geql2 m a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 n+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.geql2 mPtr nPtr aPtr ldaPtr tauPtr workPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgeqlf.f>+geqlf ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Double, Int)+geqlf m a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.geqlf mPtr nPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgeqp3.f>+geqp3 ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IOArray ZeroInt CInt {- ^ jpvt -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Double, Int)+geqp3 m a jpvt lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let jpvtDim0 = Call.sizes1 $ MutArray.shape jpvt+   let n = aDim0+   let lda = aDim1+   Call.assert "geqp3: n == jpvtDim0" (n == jpvtDim0)+   tau <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      jpvtPtr <- Call.ioarray jpvt+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.geqp3 mPtr nPtr aPtr ldaPtr jpvtPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgeqr2.f>+geqr2 ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IO (Array ZeroInt Double, Int)+geqr2 m a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 n+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.geqr2 mPtr nPtr aPtr ldaPtr tauPtr workPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgeqr2p.f>+geqr2p ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IO (Array ZeroInt Double, Int)+geqr2p m a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 n+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.geqr2p mPtr nPtr aPtr ldaPtr tauPtr workPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgeqrf.f>+geqrf ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Double, Int)+geqrf m a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.geqrf mPtr nPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgeqrfp.f>+geqrfp ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Double, Int)+geqrfp m a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.geqrfp mPtr nPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgerfs.f>+gerfs ::+   Char {- ^ trans -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ af -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ x -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Int)+gerfs trans a af ipiv b x = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (afDim0,afDim1) = Call.sizes2 $ Array.shape af+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (xDim0,xDim1) = Call.sizes2 $ MutArray.shape x+   let n = aDim0+   let lda = aDim1+   let ldaf = afDim1+   let nrhs = bDim0+   let ldb = bDim1+   let ldx = xDim1+   Call.assert "gerfs: n == afDim0" (n == afDim0)+   Call.assert "gerfs: n == ipivDim0" (n == ipivDim0)+   Call.assert "gerfs: nrhs == xDim0" (nrhs == xDim0)+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (3*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      transPtr <- Call.char trans+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      afPtr <- Call.array af+      ldafPtr <- Call.cint ldaf+      ipivPtr <- Call.array ipiv+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gerfs transPtr nPtr nrhsPtr aPtr ldaPtr afPtr ldafPtr ipivPtr bPtr ldbPtr xPtr ldxPtr ferrPtr berrPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgerq2.f>+gerq2 ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IO (Array ZeroInt Double, Int)+gerq2 m a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 m+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.gerq2 mPtr nPtr aPtr ldaPtr tauPtr workPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgerqf.f>+gerqf ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Double, Int)+gerqf m a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gerqf mPtr nPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgesc2.f>+gesc2 ::+   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IOArray ZeroInt Double {- ^ rhs -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Array ZeroInt CInt {- ^ jpiv -} ->+   IO (Double)+gesc2 a rhs ipiv jpiv = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let rhsDim0 = Call.sizes1 $ MutArray.shape rhs+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let jpivDim0 = Call.sizes1 $ Array.shape jpiv+   let n = aDim0+   let lda = aDim1+   Call.assert "gesc2: n == rhsDim0" (n == rhsDim0)+   Call.assert "gesc2: n == ipivDim0" (n == ipivDim0)+   Call.assert "gesc2: n == jpivDim0" (n == jpivDim0)+   evalContT $ do+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      rhsPtr <- Call.ioarray rhs+      ipivPtr <- Call.array ipiv+      jpivPtr <- Call.array jpiv+      scalePtr <- Call.alloca+      liftIO $ FFI.gesc2 nPtr aPtr ldaPtr rhsPtr ipivPtr jpivPtr scalePtr+      liftIO $ peek scalePtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgesdd.f>+gesdd ::+   Char {- ^ jobz -} ->+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Int {- ^ ucol -} ->+   Int {- ^ ldu -} ->+   Int {- ^ ldvt -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double, Int)+gesdd jobz m a ucol ldu ldvt lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   s <- Call.newArray1 (minimum[m,n])+   u <- Call.newArray2 ucol ldu+   vt <- Call.newArray2 n ldvt+   work <- Call.newArray1 (maximum[1,lwork])+   iwork <- Call.newArray1 (8*minimum[m,n])+   evalContT $ do+      jobzPtr <- Call.char jobz+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      sPtr <- Call.ioarray s+      uPtr <- Call.ioarray u+      lduPtr <- Call.cint ldu+      vtPtr <- Call.ioarray vt+      ldvtPtr <- Call.cint ldvt+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gesdd jobzPtr mPtr nPtr aPtr ldaPtr sPtr uPtr lduPtr vtPtr ldvtPtr workPtr lworkPtr iworkPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray s+         <*> Call.freezeArray u+         <*> Call.freezeArray vt+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgesv.f>+gesv ::+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   IO (Array ZeroInt CInt, Int)+gesv a b = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   ipiv <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.ioarray ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.gesv nPtr nrhsPtr aPtr ldaPtr ipivPtr bPtr ldbPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgesvd.f>+gesvd ::+   Char {- ^ jobu -} ->+   Char {- ^ jobvt -} ->+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Int {- ^ ucol -} ->+   Int {- ^ ldu -} ->+   Int {- ^ ldvt -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double, Int)+gesvd jobu jobvt m a ucol ldu ldvt lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   s <- Call.newArray1 (minimum[m,n])+   u <- Call.newArray2 ucol ldu+   vt <- Call.newArray2 n ldvt+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      jobuPtr <- Call.char jobu+      jobvtPtr <- Call.char jobvt+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      sPtr <- Call.ioarray s+      uPtr <- Call.ioarray u+      lduPtr <- Call.cint ldu+      vtPtr <- Call.ioarray vt+      ldvtPtr <- Call.cint ldvt+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gesvd jobuPtr jobvtPtr mPtr nPtr aPtr ldaPtr sPtr uPtr lduPtr vtPtr ldvtPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray s+         <*> Call.freezeArray u+         <*> Call.freezeArray vt+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgesvj.f>+gesvj ::+   Char {- ^ joba -} ->+   Char {- ^ jobu -} ->+   Char {- ^ jobv -} ->+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Int {- ^ mv -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ v -} ->+   IOArray ZeroInt Double {- ^ work -} ->+   IO (Array ZeroInt Double, Int)+gesvj joba jobu jobv m a mv v work = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (vDim0,vDim1) = Call.sizes2 $ MutArray.shape v+   let workDim0 = Call.sizes1 $ MutArray.shape work+   let n = aDim0+   let lda = aDim1+   let ldv = vDim1+   let lwork = workDim0+   Call.assert "gesvj: n == vDim0" (n == vDim0)+   sva <- Call.newArray1 n+   evalContT $ do+      jobaPtr <- Call.char joba+      jobuPtr <- Call.char jobu+      jobvPtr <- Call.char jobv+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      svaPtr <- Call.ioarray sva+      mvPtr <- Call.cint mv+      vPtr <- Call.ioarray v+      ldvPtr <- Call.cint ldv+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gesvj jobaPtr jobuPtr jobvPtr mPtr nPtr aPtr ldaPtr svaPtr mvPtr vPtr ldvPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray sva+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgesvx.f>+gesvx ::+   Char {- ^ fact -} ->+   Char {- ^ trans -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ af -} ->+   IOArray ZeroInt CInt {- ^ ipiv -} ->+   Char {- ^ equed -} ->+   IOArray ZeroInt Double {- ^ r -} ->+   IOArray ZeroInt Double {- ^ c -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   Int {- ^ ldx -} ->+   IO (Char, Array (ZeroInt,ZeroInt) Double, Double, Array ZeroInt Double, Array ZeroInt Double, Int)+gesvx fact trans a af ipiv equed r c b ldx = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (afDim0,afDim1) = Call.sizes2 $ MutArray.shape af+   let ipivDim0 = Call.sizes1 $ MutArray.shape ipiv+   let rDim0 = Call.sizes1 $ MutArray.shape r+   let cDim0 = Call.sizes1 $ MutArray.shape c+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let ldaf = afDim1+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "gesvx: n == afDim0" (n == afDim0)+   Call.assert "gesvx: n == ipivDim0" (n == ipivDim0)+   Call.assert "gesvx: n == rDim0" (n == rDim0)+   Call.assert "gesvx: n == cDim0" (n == cDim0)+   x <- Call.newArray2 nrhs ldx+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (4*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      factPtr <- Call.char fact+      transPtr <- Call.char trans+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      afPtr <- Call.ioarray af+      ldafPtr <- Call.cint ldaf+      ipivPtr <- Call.ioarray ipiv+      equedPtr <- Call.char equed+      rPtr <- Call.ioarray r+      cPtr <- Call.ioarray c+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      rcondPtr <- Call.alloca+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gesvx factPtr transPtr nPtr nrhsPtr aPtr ldaPtr afPtr ldafPtr ipivPtr equedPtr rPtr cPtr bPtr ldbPtr xPtr ldxPtr rcondPtr ferrPtr berrPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> fmap castCCharToChar (peek equedPtr)+         <*> Call.freezeArray x+         <*> peek rcondPtr+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgetc2.f>+getc2 ::+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IO (Array ZeroInt CInt, Array ZeroInt CInt, Int)+getc2 a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   ipiv <- Call.newArray1 n+   jpiv <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.ioarray ipiv+      jpivPtr <- Call.ioarray jpiv+      infoPtr <- Call.alloca+      liftIO $ FFI.getc2 nPtr aPtr ldaPtr ipivPtr jpivPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ipiv+         <*> Call.freezeArray jpiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgetf2.f>+getf2 ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IO (Array ZeroInt CInt, Int)+getf2 m a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   ipiv <- Call.newArray1 (minimum[m,n])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.ioarray ipiv+      infoPtr <- Call.alloca+      liftIO $ FFI.getf2 mPtr nPtr aPtr ldaPtr ipivPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgetrf.f>+getrf ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IO (Array ZeroInt CInt, Int)+getrf m a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   ipiv <- Call.newArray1 (minimum[m,n])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.ioarray ipiv+      infoPtr <- Call.alloca+      liftIO $ FFI.getrf mPtr nPtr aPtr ldaPtr ipivPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgetri.f>+getri ::+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Int {- ^ lwork -} ->+   IO (Int)+getri a ipiv lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = aDim0+   let lda = aDim1+   Call.assert "getri: n == ipivDim0" (n == ipivDim0)+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.array ipiv+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.getri nPtr aPtr ldaPtr ipivPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgetrs.f>+getrs ::+   Char {- ^ trans -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   IO (Int)+getrs trans a ipiv b = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "getrs: n == ipivDim0" (n == ipivDim0)+   evalContT $ do+      transPtr <- Call.char trans+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.array ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.getrs transPtr nPtr nrhsPtr aPtr ldaPtr ipivPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dggbak.f>+ggbak ::+   Char {- ^ job -} ->+   Char {- ^ side -} ->+   Int {- ^ ilo -} ->+   Int {- ^ ihi -} ->+   Array ZeroInt Double {- ^ lscale -} ->+   Array ZeroInt Double {- ^ rscale -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ v -} ->+   IO (Int)+ggbak job side ilo ihi lscale rscale v = do+   let lscaleDim0 = Call.sizes1 $ Array.shape lscale+   let rscaleDim0 = Call.sizes1 $ Array.shape rscale+   let (vDim0,vDim1) = Call.sizes2 $ MutArray.shape v+   let n = lscaleDim0+   let m = vDim0+   let ldv = vDim1+   Call.assert "ggbak: n == rscaleDim0" (n == rscaleDim0)+   evalContT $ do+      jobPtr <- Call.char job+      sidePtr <- Call.char side+      nPtr <- Call.cint n+      iloPtr <- Call.cint ilo+      ihiPtr <- Call.cint ihi+      lscalePtr <- Call.array lscale+      rscalePtr <- Call.array rscale+      mPtr <- Call.cint m+      vPtr <- Call.ioarray v+      ldvPtr <- Call.cint ldv+      infoPtr <- Call.alloca+      liftIO $ FFI.ggbak jobPtr sidePtr nPtr iloPtr ihiPtr lscalePtr rscalePtr mPtr vPtr ldvPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dggbal.f>+ggbal ::+   Char {- ^ job -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   Int {- ^ lwork -} ->+   IO (Int, Int, Array ZeroInt Double, Array ZeroInt Double, Int)+ggbal job a b lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   Call.assert "ggbal: n == bDim0" (n == bDim0)+   lscale <- Call.newArray1 n+   rscale <- Call.newArray1 n+   work <- Call.newArray1 lwork+   evalContT $ do+      jobPtr <- Call.char job+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      iloPtr <- Call.alloca+      ihiPtr <- Call.alloca+      lscalePtr <- Call.ioarray lscale+      rscalePtr <- Call.ioarray rscale+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.ggbal jobPtr nPtr aPtr ldaPtr bPtr ldbPtr iloPtr ihiPtr lscalePtr rscalePtr workPtr infoPtr+      liftIO $ pure (,,,,)+         <*> fmap fromIntegral (peek iloPtr)+         <*> fmap fromIntegral (peek ihiPtr)+         <*> Call.freezeArray lscale+         <*> Call.freezeArray rscale+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgges.f>+gges ::+   Char {- ^ jobvsl -} ->+   Char {- ^ jobvsr -} ->+   Char {- ^ sort -} ->+   FunPtr (Ptr Double -> Ptr Double -> Ptr Double -> IO Bool) {- ^ selctg -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   Int {- ^ ldvsl -} ->+   Int {- ^ ldvsr -} ->+   Int {- ^ lwork -} ->+   IO (Int, Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double, Int)+gges jobvsl jobvsr sort selctg a b ldvsl ldvsr lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   Call.assert "gges: n == bDim0" (n == bDim0)+   alphar <- Call.newArray1 n+   alphai <- Call.newArray1 n+   beta <- Call.newArray1 n+   vsl <- Call.newArray2 n ldvsl+   vsr <- Call.newArray2 n ldvsr+   work <- Call.newArray1 (maximum[1,lwork])+   bwork <- Call.newArray1 n+   evalContT $ do+      jobvslPtr <- Call.char jobvsl+      jobvsrPtr <- Call.char jobvsr+      sortPtr <- Call.char sort+      selctgPtr <- pure selctg+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      sdimPtr <- Call.alloca+      alpharPtr <- Call.ioarray alphar+      alphaiPtr <- Call.ioarray alphai+      betaPtr <- Call.ioarray beta+      vslPtr <- Call.ioarray vsl+      ldvslPtr <- Call.cint ldvsl+      vsrPtr <- Call.ioarray vsr+      ldvsrPtr <- Call.cint ldvsr+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      bworkPtr <- Call.ioarray bwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gges jobvslPtr jobvsrPtr sortPtr selctgPtr nPtr aPtr ldaPtr bPtr ldbPtr sdimPtr alpharPtr alphaiPtr betaPtr vslPtr ldvslPtr vsrPtr ldvsrPtr workPtr lworkPtr bworkPtr infoPtr+      liftIO $ pure (,,,,,,)+         <*> fmap fromIntegral (peek sdimPtr)+         <*> Call.freezeArray alphar+         <*> Call.freezeArray alphai+         <*> Call.freezeArray beta+         <*> Call.freezeArray vsl+         <*> Call.freezeArray vsr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dggesx.f>+ggesx ::+   Char {- ^ jobvsl -} ->+   Char {- ^ jobvsr -} ->+   Char {- ^ sort -} ->+   FunPtr (Ptr Double -> Ptr Double -> Ptr Double -> IO Bool) {- ^ selctg -} ->+   Char {- ^ sense -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   Int {- ^ ldvsl -} ->+   Int {- ^ ldvsr -} ->+   Int {- ^ lwork -} ->+   Int {- ^ liwork -} ->+   IO (Int, Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double, Array ZeroInt Double, Array ZeroInt Double, Int)+ggesx jobvsl jobvsr sort selctg sense a b ldvsl ldvsr lwork liwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   Call.assert "ggesx: n == bDim0" (n == bDim0)+   alphar <- Call.newArray1 n+   alphai <- Call.newArray1 n+   beta <- Call.newArray1 n+   vsl <- Call.newArray2 n ldvsl+   vsr <- Call.newArray2 n ldvsr+   rconde <- Call.newArray1 2+   rcondv <- Call.newArray1 2+   work <- Call.newArray1 (maximum[1,lwork])+   iwork <- Call.newArray1 (maximum[1,liwork])+   bwork <- Call.newArray1 n+   evalContT $ do+      jobvslPtr <- Call.char jobvsl+      jobvsrPtr <- Call.char jobvsr+      sortPtr <- Call.char sort+      selctgPtr <- pure selctg+      sensePtr <- Call.char sense+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      sdimPtr <- Call.alloca+      alpharPtr <- Call.ioarray alphar+      alphaiPtr <- Call.ioarray alphai+      betaPtr <- Call.ioarray beta+      vslPtr <- Call.ioarray vsl+      ldvslPtr <- Call.cint ldvsl+      vsrPtr <- Call.ioarray vsr+      ldvsrPtr <- Call.cint ldvsr+      rcondePtr <- Call.ioarray rconde+      rcondvPtr <- Call.ioarray rcondv+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      bworkPtr <- Call.ioarray bwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ggesx jobvslPtr jobvsrPtr sortPtr selctgPtr sensePtr nPtr aPtr ldaPtr bPtr ldbPtr sdimPtr alpharPtr alphaiPtr betaPtr vslPtr ldvslPtr vsrPtr ldvsrPtr rcondePtr rcondvPtr workPtr lworkPtr iworkPtr liworkPtr bworkPtr infoPtr+      liftIO $ pure (,,,,,,,,)+         <*> fmap fromIntegral (peek sdimPtr)+         <*> Call.freezeArray alphar+         <*> Call.freezeArray alphai+         <*> Call.freezeArray beta+         <*> Call.freezeArray vsl+         <*> Call.freezeArray vsr+         <*> Call.freezeArray rconde+         <*> Call.freezeArray rcondv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dggev.f>+ggev ::+   Char {- ^ jobvl -} ->+   Char {- ^ jobvr -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   Int {- ^ ldvl -} ->+   Int {- ^ ldvr -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double, Int)+ggev jobvl jobvr a b ldvl ldvr lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   Call.assert "ggev: n == bDim0" (n == bDim0)+   alphar <- Call.newArray1 n+   alphai <- Call.newArray1 n+   beta <- Call.newArray1 n+   vl <- Call.newArray2 n ldvl+   vr <- Call.newArray2 n ldvr+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      jobvlPtr <- Call.char jobvl+      jobvrPtr <- Call.char jobvr+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      alpharPtr <- Call.ioarray alphar+      alphaiPtr <- Call.ioarray alphai+      betaPtr <- Call.ioarray beta+      vlPtr <- Call.ioarray vl+      ldvlPtr <- Call.cint ldvl+      vrPtr <- Call.ioarray vr+      ldvrPtr <- Call.cint ldvr+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ggev jobvlPtr jobvrPtr nPtr aPtr ldaPtr bPtr ldbPtr alpharPtr alphaiPtr betaPtr vlPtr ldvlPtr vrPtr ldvrPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> Call.freezeArray alphar+         <*> Call.freezeArray alphai+         <*> Call.freezeArray beta+         <*> Call.freezeArray vl+         <*> Call.freezeArray vr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dggevx.f>+ggevx ::+   Char {- ^ balanc -} ->+   Char {- ^ jobvl -} ->+   Char {- ^ jobvr -} ->+   Char {- ^ sense -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   Int {- ^ ldvl -} ->+   Int {- ^ ldvr -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double, Int, Int, Array ZeroInt Double, Array ZeroInt Double, Double, Double, Array ZeroInt Double, Array ZeroInt Double, Int)+ggevx balanc jobvl jobvr sense a b ldvl ldvr lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   Call.assert "ggevx: n == bDim0" (n == bDim0)+   alphar <- Call.newArray1 n+   alphai <- Call.newArray1 n+   beta <- Call.newArray1 n+   vl <- Call.newArray2 n ldvl+   vr <- Call.newArray2 n ldvr+   lscale <- Call.newArray1 n+   rscale <- Call.newArray1 n+   rconde <- Call.newArray1 n+   rcondv <- Call.newArray1 n+   work <- Call.newArray1 (maximum[1,lwork])+   iwork <- Call.newArray1 (n+6)+   bwork <- Call.newArray1 n+   evalContT $ do+      balancPtr <- Call.char balanc+      jobvlPtr <- Call.char jobvl+      jobvrPtr <- Call.char jobvr+      sensePtr <- Call.char sense+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      alpharPtr <- Call.ioarray alphar+      alphaiPtr <- Call.ioarray alphai+      betaPtr <- Call.ioarray beta+      vlPtr <- Call.ioarray vl+      ldvlPtr <- Call.cint ldvl+      vrPtr <- Call.ioarray vr+      ldvrPtr <- Call.cint ldvr+      iloPtr <- Call.alloca+      ihiPtr <- Call.alloca+      lscalePtr <- Call.ioarray lscale+      rscalePtr <- Call.ioarray rscale+      abnrmPtr <- Call.alloca+      bbnrmPtr <- Call.alloca+      rcondePtr <- Call.ioarray rconde+      rcondvPtr <- Call.ioarray rcondv+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      bworkPtr <- Call.ioarray bwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ggevx balancPtr jobvlPtr jobvrPtr sensePtr nPtr aPtr ldaPtr bPtr ldbPtr alpharPtr alphaiPtr betaPtr vlPtr ldvlPtr vrPtr ldvrPtr iloPtr ihiPtr lscalePtr rscalePtr abnrmPtr bbnrmPtr rcondePtr rcondvPtr workPtr lworkPtr iworkPtr bworkPtr infoPtr+      liftIO $ pure (,,,,,,,,,,,,,)+         <*> Call.freezeArray alphar+         <*> Call.freezeArray alphai+         <*> Call.freezeArray beta+         <*> Call.freezeArray vl+         <*> Call.freezeArray vr+         <*> fmap fromIntegral (peek iloPtr)+         <*> fmap fromIntegral (peek ihiPtr)+         <*> Call.freezeArray lscale+         <*> Call.freezeArray rscale+         <*> peek abnrmPtr+         <*> peek bbnrmPtr+         <*> Call.freezeArray rconde+         <*> Call.freezeArray rcondv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dggglm.f>+ggglm ::+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   IOArray ZeroInt Double {- ^ d -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Int)+ggglm a b d lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let m = aDim0+   let lda = aDim1+   let p = bDim0+   let ldb = bDim1+   let n = dDim0+   x <- Call.newArray1 m+   y <- Call.newArray1 p+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      nPtr <- Call.cint n+      mPtr <- Call.cint m+      pPtr <- Call.cint p+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      dPtr <- Call.ioarray d+      xPtr <- Call.ioarray x+      yPtr <- Call.ioarray y+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ggglm nPtr mPtr pPtr aPtr ldaPtr bPtr ldbPtr dPtr xPtr yPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray x+         <*> Call.freezeArray y+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgghrd.f>+gghrd ::+   Char {- ^ compq -} ->+   Char {- ^ compz -} ->+   Int {- ^ ilo -} ->+   Int {- ^ ihi -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ q -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ z -} ->+   IO (Int)+gghrd compq compz ilo ihi a b q z = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   let ldq = qDim1+   let ldz = zDim1+   Call.assert "gghrd: n == bDim0" (n == bDim0)+   Call.assert "gghrd: n == qDim0" (n == qDim0)+   Call.assert "gghrd: n == zDim0" (n == zDim0)+   evalContT $ do+      compqPtr <- Call.char compq+      compzPtr <- Call.char compz+      nPtr <- Call.cint n+      iloPtr <- Call.cint ilo+      ihiPtr <- Call.cint ihi+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      infoPtr <- Call.alloca+      liftIO $ FFI.gghrd compqPtr compzPtr nPtr iloPtr ihiPtr aPtr ldaPtr bPtr ldbPtr qPtr ldqPtr zPtr ldzPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgglse.f>+gglse ::+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   IOArray ZeroInt Double {- ^ c -} ->+   IOArray ZeroInt Double {- ^ d -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Double, Int)+gglse a b c d lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let cDim0 = Call.sizes1 $ MutArray.shape c+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   let m = cDim0+   let p = dDim0+   Call.assert "gglse: n == bDim0" (n == bDim0)+   x <- Call.newArray1 n+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      pPtr <- Call.cint p+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      cPtr <- Call.ioarray c+      dPtr <- Call.ioarray d+      xPtr <- Call.ioarray x+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gglse mPtr nPtr pPtr aPtr ldaPtr bPtr ldbPtr cPtr dPtr xPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray x+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dggqrf.f>+ggqrf ::+   Int {- ^ n -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Int)+ggqrf n a b lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let m = aDim0+   let lda = aDim1+   let p = bDim0+   let ldb = bDim1+   taua <- Call.newArray1 (minimum[n,m])+   taub <- Call.newArray1 (minimum[n,p])+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      nPtr <- Call.cint n+      mPtr <- Call.cint m+      pPtr <- Call.cint p+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauaPtr <- Call.ioarray taua+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      taubPtr <- Call.ioarray taub+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ggqrf nPtr mPtr pPtr aPtr ldaPtr tauaPtr bPtr ldbPtr taubPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray taua+         <*> Call.freezeArray taub+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dggrqf.f>+ggrqf ::+   Int {- ^ m -} ->+   Int {- ^ p -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Int)+ggrqf m p a b lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   Call.assert "ggrqf: n == bDim0" (n == bDim0)+   taua <- Call.newArray1 (minimum[m,n])+   taub <- Call.newArray1 (minimum[p,n])+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      pPtr <- Call.cint p+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauaPtr <- Call.ioarray taua+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      taubPtr <- Call.ioarray taub+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ggrqf mPtr pPtr nPtr aPtr ldaPtr tauaPtr bPtr ldbPtr taubPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray taua+         <*> Call.freezeArray taub+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgsvj0.f>+gsvj0 ::+   Char {- ^ jobv -} ->+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IOArray ZeroInt Double {- ^ d -} ->+   IOArray ZeroInt Double {- ^ sva -} ->+   Int {- ^ mv -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ v -} ->+   Double {- ^ eps -} ->+   Double {- ^ sfmin -} ->+   Double {- ^ tol -} ->+   Int {- ^ nsweep -} ->+   Int {- ^ lwork -} ->+   IO (Int)+gsvj0 jobv m a d sva mv v eps sfmin tol nsweep lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let svaDim0 = Call.sizes1 $ MutArray.shape sva+   let (vDim0,vDim1) = Call.sizes2 $ MutArray.shape v+   let n = aDim0+   let lda = aDim1+   let ldv = vDim1+   Call.assert "gsvj0: n == dDim0" (n == dDim0)+   Call.assert "gsvj0: n == svaDim0" (n == svaDim0)+   Call.assert "gsvj0: n == vDim0" (n == vDim0)+   work <- Call.newArray1 lwork+   evalContT $ do+      jobvPtr <- Call.char jobv+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      dPtr <- Call.ioarray d+      svaPtr <- Call.ioarray sva+      mvPtr <- Call.cint mv+      vPtr <- Call.ioarray v+      ldvPtr <- Call.cint ldv+      epsPtr <- Call.double eps+      sfminPtr <- Call.double sfmin+      tolPtr <- Call.double tol+      nsweepPtr <- Call.cint nsweep+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gsvj0 jobvPtr mPtr nPtr aPtr ldaPtr dPtr svaPtr mvPtr vPtr ldvPtr epsPtr sfminPtr tolPtr nsweepPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgsvj1.f>+gsvj1 ::+   Char {- ^ jobv -} ->+   Int {- ^ m -} ->+   Int {- ^ n1 -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IOArray ZeroInt Double {- ^ d -} ->+   IOArray ZeroInt Double {- ^ sva -} ->+   Int {- ^ mv -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ v -} ->+   Double {- ^ eps -} ->+   Double {- ^ sfmin -} ->+   Double {- ^ tol -} ->+   Int {- ^ nsweep -} ->+   Int {- ^ lwork -} ->+   IO (Int)+gsvj1 jobv m n1 a d sva mv v eps sfmin tol nsweep lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let svaDim0 = Call.sizes1 $ MutArray.shape sva+   let (vDim0,vDim1) = Call.sizes2 $ MutArray.shape v+   let n = aDim0+   let lda = aDim1+   let ldv = vDim1+   Call.assert "gsvj1: n == dDim0" (n == dDim0)+   Call.assert "gsvj1: n == svaDim0" (n == svaDim0)+   Call.assert "gsvj1: n == vDim0" (n == vDim0)+   work <- Call.newArray1 lwork+   evalContT $ do+      jobvPtr <- Call.char jobv+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      n1Ptr <- Call.cint n1+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      dPtr <- Call.ioarray d+      svaPtr <- Call.ioarray sva+      mvPtr <- Call.cint mv+      vPtr <- Call.ioarray v+      ldvPtr <- Call.cint ldv+      epsPtr <- Call.double eps+      sfminPtr <- Call.double sfmin+      tolPtr <- Call.double tol+      nsweepPtr <- Call.cint nsweep+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gsvj1 jobvPtr mPtr nPtr n1Ptr aPtr ldaPtr dPtr svaPtr mvPtr vPtr ldvPtr epsPtr sfminPtr tolPtr nsweepPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgtcon.f>+gtcon ::+   Char {- ^ norm -} ->+   Array ZeroInt Double {- ^ dl -} ->+   Array ZeroInt Double {- ^ d -} ->+   Array ZeroInt Double {- ^ du -} ->+   Array ZeroInt Double {- ^ du2 -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Double {- ^ anorm -} ->+   IO (Double, Int)+gtcon norm dl d du du2 ipiv anorm = do+   let dlDim0 = Call.sizes1 $ Array.shape dl+   let dDim0 = Call.sizes1 $ Array.shape d+   let duDim0 = Call.sizes1 $ Array.shape du+   let du2Dim0 = Call.sizes1 $ Array.shape du2+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = dDim0+   Call.assert "gtcon: n-1 == dlDim0" (n-1 == dlDim0)+   Call.assert "gtcon: n-1 == duDim0" (n-1 == duDim0)+   Call.assert "gtcon: n-2 == du2Dim0" (n-2 == du2Dim0)+   Call.assert "gtcon: n == ipivDim0" (n == ipivDim0)+   work <- Call.newArray1 (2*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      normPtr <- Call.char norm+      nPtr <- Call.cint n+      dlPtr <- Call.array dl+      dPtr <- Call.array d+      duPtr <- Call.array du+      du2Ptr <- Call.array du2+      ipivPtr <- Call.array ipiv+      anormPtr <- Call.double anorm+      rcondPtr <- Call.alloca+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gtcon normPtr nPtr dlPtr dPtr duPtr du2Ptr ipivPtr anormPtr rcondPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,)+         <*> peek rcondPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgtrfs.f>+gtrfs ::+   Char {- ^ trans -} ->+   Array ZeroInt Double {- ^ dl -} ->+   Array ZeroInt Double {- ^ d -} ->+   Array ZeroInt Double {- ^ du -} ->+   Array ZeroInt Double {- ^ dlf -} ->+   Array ZeroInt Double {- ^ df -} ->+   Array ZeroInt Double {- ^ duf -} ->+   Array ZeroInt Double {- ^ du2 -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ x -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Int)+gtrfs trans dl d du dlf df duf du2 ipiv b x = do+   let dlDim0 = Call.sizes1 $ Array.shape dl+   let dDim0 = Call.sizes1 $ Array.shape d+   let duDim0 = Call.sizes1 $ Array.shape du+   let dlfDim0 = Call.sizes1 $ Array.shape dlf+   let dfDim0 = Call.sizes1 $ Array.shape df+   let dufDim0 = Call.sizes1 $ Array.shape duf+   let du2Dim0 = Call.sizes1 $ Array.shape du2+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (xDim0,xDim1) = Call.sizes2 $ MutArray.shape x+   let n = dDim0+   let nrhs = bDim0+   let ldb = bDim1+   let ldx = xDim1+   Call.assert "gtrfs: n-1 == dlDim0" (n-1 == dlDim0)+   Call.assert "gtrfs: n-1 == duDim0" (n-1 == duDim0)+   Call.assert "gtrfs: n-1 == dlfDim0" (n-1 == dlfDim0)+   Call.assert "gtrfs: n == dfDim0" (n == dfDim0)+   Call.assert "gtrfs: n-1 == dufDim0" (n-1 == dufDim0)+   Call.assert "gtrfs: n-2 == du2Dim0" (n-2 == du2Dim0)+   Call.assert "gtrfs: n == ipivDim0" (n == ipivDim0)+   Call.assert "gtrfs: nrhs == xDim0" (nrhs == xDim0)+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (3*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      transPtr <- Call.char trans+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      dlPtr <- Call.array dl+      dPtr <- Call.array d+      duPtr <- Call.array du+      dlfPtr <- Call.array dlf+      dfPtr <- Call.array df+      dufPtr <- Call.array duf+      du2Ptr <- Call.array du2+      ipivPtr <- Call.array ipiv+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gtrfs transPtr nPtr nrhsPtr dlPtr dPtr duPtr dlfPtr dfPtr dufPtr du2Ptr ipivPtr bPtr ldbPtr xPtr ldxPtr ferrPtr berrPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgtsv.f>+gtsv ::+   IOArray ZeroInt Double {- ^ dl -} ->+   IOArray ZeroInt Double {- ^ d -} ->+   IOArray ZeroInt Double {- ^ du -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   IO (Int)+gtsv dl d du b = do+   let dlDim0 = Call.sizes1 $ MutArray.shape dl+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let duDim0 = Call.sizes1 $ MutArray.shape du+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = dDim0+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "gtsv: n-1 == dlDim0" (n-1 == dlDim0)+   Call.assert "gtsv: n-1 == duDim0" (n-1 == duDim0)+   evalContT $ do+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      dlPtr <- Call.ioarray dl+      dPtr <- Call.ioarray d+      duPtr <- Call.ioarray du+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.gtsv nPtr nrhsPtr dlPtr dPtr duPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgtsvx.f>+gtsvx ::+   Char {- ^ fact -} ->+   Char {- ^ trans -} ->+   Array ZeroInt Double {- ^ dl -} ->+   Array ZeroInt Double {- ^ d -} ->+   Array ZeroInt Double {- ^ du -} ->+   IOArray ZeroInt Double {- ^ dlf -} ->+   IOArray ZeroInt Double {- ^ df -} ->+   IOArray ZeroInt Double {- ^ duf -} ->+   IOArray ZeroInt Double {- ^ du2 -} ->+   IOArray ZeroInt CInt {- ^ ipiv -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->+   Int {- ^ ldx -} ->+   IO (Array (ZeroInt,ZeroInt) Double, Double, Array ZeroInt Double, Array ZeroInt Double, Int)+gtsvx fact trans dl d du dlf df duf du2 ipiv b ldx = do+   let dlDim0 = Call.sizes1 $ Array.shape dl+   let dDim0 = Call.sizes1 $ Array.shape d+   let duDim0 = Call.sizes1 $ Array.shape du+   let dlfDim0 = Call.sizes1 $ MutArray.shape dlf+   let dfDim0 = Call.sizes1 $ MutArray.shape df+   let dufDim0 = Call.sizes1 $ MutArray.shape duf+   let du2Dim0 = Call.sizes1 $ MutArray.shape du2+   let ipivDim0 = Call.sizes1 $ MutArray.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let n = dDim0+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "gtsvx: n-1 == dlDim0" (n-1 == dlDim0)+   Call.assert "gtsvx: n-1 == duDim0" (n-1 == duDim0)+   Call.assert "gtsvx: n-1 == dlfDim0" (n-1 == dlfDim0)+   Call.assert "gtsvx: n == dfDim0" (n == dfDim0)+   Call.assert "gtsvx: n-1 == dufDim0" (n-1 == dufDim0)+   Call.assert "gtsvx: n-2 == du2Dim0" (n-2 == du2Dim0)+   Call.assert "gtsvx: n == ipivDim0" (n == ipivDim0)+   x <- Call.newArray2 nrhs ldx+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (3*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      factPtr <- Call.char fact+      transPtr <- Call.char trans+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      dlPtr <- Call.array dl+      dPtr <- Call.array d+      duPtr <- Call.array du+      dlfPtr <- Call.ioarray dlf+      dfPtr <- Call.ioarray df+      dufPtr <- Call.ioarray duf+      du2Ptr <- Call.ioarray du2+      ipivPtr <- Call.ioarray ipiv+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      rcondPtr <- Call.alloca+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gtsvx factPtr transPtr nPtr nrhsPtr dlPtr dPtr duPtr dlfPtr dfPtr dufPtr du2Ptr ipivPtr bPtr ldbPtr xPtr ldxPtr rcondPtr ferrPtr berrPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,,,,)+         <*> Call.freezeArray x+         <*> peek rcondPtr+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgttrf.f>+gttrf ::+   IOArray ZeroInt Double {- ^ dl -} ->+   IOArray ZeroInt Double {- ^ d -} ->+   IOArray ZeroInt Double {- ^ du -} ->+   IO (Array ZeroInt Double, Array ZeroInt CInt, Int)+gttrf dl d du = do+   let dlDim0 = Call.sizes1 $ MutArray.shape dl+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let duDim0 = Call.sizes1 $ MutArray.shape du+   let n = dDim0+   Call.assert "gttrf: n-1 == dlDim0" (n-1 == dlDim0)+   Call.assert "gttrf: n-1 == duDim0" (n-1 == duDim0)+   du2 <- Call.newArray1 (n-2)+   ipiv <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      dlPtr <- Call.ioarray dl+      dPtr <- Call.ioarray d+      duPtr <- Call.ioarray du+      du2Ptr <- Call.ioarray du2+      ipivPtr <- Call.ioarray ipiv+      infoPtr <- Call.alloca+      liftIO $ FFI.gttrf nPtr dlPtr dPtr duPtr du2Ptr ipivPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray du2+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgttrs.f>+gttrs ::+   Char {- ^ trans -} ->+   Array ZeroInt Double {- ^ dl -} ->+   Array ZeroInt Double {- ^ d -} ->+   Array ZeroInt Double {- ^ du -} ->+   Array ZeroInt Double {- ^ du2 -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   IO (Int)+gttrs trans dl d du du2 ipiv b = do+   let dlDim0 = Call.sizes1 $ Array.shape dl+   let dDim0 = Call.sizes1 $ Array.shape d+   let duDim0 = Call.sizes1 $ Array.shape du+   let du2Dim0 = Call.sizes1 $ Array.shape du2+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = dDim0+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "gttrs: n-1 == dlDim0" (n-1 == dlDim0)+   Call.assert "gttrs: n-1 == duDim0" (n-1 == duDim0)+   Call.assert "gttrs: n-2 == du2Dim0" (n-2 == du2Dim0)+   Call.assert "gttrs: n == ipivDim0" (n == ipivDim0)+   evalContT $ do+      transPtr <- Call.char trans+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      dlPtr <- Call.array dl+      dPtr <- Call.array d+      duPtr <- Call.array du+      du2Ptr <- Call.array du2+      ipivPtr <- Call.array ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.gttrs transPtr nPtr nrhsPtr dlPtr dPtr duPtr du2Ptr ipivPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgtts2.f>+gtts2 ::+   Int {- ^ itrans -} ->+   Array ZeroInt Double {- ^ dl -} ->+   Array ZeroInt Double {- ^ d -} ->+   Array ZeroInt Double {- ^ du -} ->+   Array ZeroInt Double {- ^ du2 -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   IO ()+gtts2 itrans dl d du du2 ipiv b = do+   let dlDim0 = Call.sizes1 $ Array.shape dl+   let dDim0 = Call.sizes1 $ Array.shape d+   let duDim0 = Call.sizes1 $ Array.shape du+   let du2Dim0 = Call.sizes1 $ Array.shape du2+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = dDim0+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "gtts2: n-1 == dlDim0" (n-1 == dlDim0)+   Call.assert "gtts2: n-1 == duDim0" (n-1 == duDim0)+   Call.assert "gtts2: n-2 == du2Dim0" (n-2 == du2Dim0)+   Call.assert "gtts2: n == ipivDim0" (n == ipivDim0)+   evalContT $ do+      itransPtr <- Call.cint itrans+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      dlPtr <- Call.array dl+      dPtr <- Call.array d+      duPtr <- Call.array du+      du2Ptr <- Call.array du2+      ipivPtr <- Call.array ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      liftIO $ FFI.gtts2 itransPtr nPtr nrhsPtr dlPtr dPtr duPtr du2Ptr ipivPtr bPtr ldbPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsbev.f>+sbev ::+   Char {- ^ jobz -} ->+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ ab -} ->+   Int {- ^ ldz -} ->+   IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Int)+sbev jobz uplo kd ab ldz = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let n = abDim0+   let ldab = abDim1+   w <- Call.newArray1 n+   z <- Call.newArray2 n ldz+   work <- Call.newArray1 (maximum[1,3*n-2])+   evalContT $ do+      jobzPtr <- Call.char jobz+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.sbev jobzPtr uploPtr nPtr kdPtr abPtr ldabPtr wPtr zPtr ldzPtr workPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsbevd.f>+sbevd ::+   Char {- ^ jobz -} ->+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ ab -} ->+   Int {- ^ ldz -} ->+   Int {- ^ workSize -} ->+   Int {- ^ lwork -} ->+   Int {- ^ liwork -} ->+   IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Int)+sbevd jobz uplo kd ab ldz workSize lwork liwork = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let n = abDim0+   let ldab = abDim1+   w <- Call.newArray1 n+   z <- Call.newArray2 n ldz+   work <- Call.newArray1 workSize+   iwork <- Call.newArray1 (maximum[1,liwork])+   evalContT $ do+      jobzPtr <- Call.char jobz+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      infoPtr <- Call.alloca+      liftIO $ FFI.sbevd jobzPtr uploPtr nPtr kdPtr abPtr ldabPtr wPtr zPtr ldzPtr workPtr lworkPtr iworkPtr liworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsbevx.f>+sbevx ::+   Char {- ^ jobz -} ->+   Char {- ^ range -} ->+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ ab -} ->+   Int {- ^ ldq -} ->+   Double {- ^ vl -} ->+   Double {- ^ vu -} ->+   Int {- ^ il -} ->+   Int {- ^ iu -} ->+   Double {- ^ abstol -} ->+   Int {- ^ m -} ->+   Int {- ^ ldz -} ->+   IO (Array (ZeroInt,ZeroInt) Double, Int, Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array ZeroInt CInt, Int)+sbevx jobz range uplo kd ab ldq vl vu il iu abstol m ldz = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let n = abDim0+   let ldab = abDim1+   q <- Call.newArray2 n ldq+   w <- Call.newArray1 n+   z <- Call.newArray2 (maximum[1,m]) ldz+   work <- Call.newArray1 (7*n)+   iwork <- Call.newArray1 (5*n)+   ifail <- Call.newArray1 n+   evalContT $ do+      jobzPtr <- Call.char jobz+      rangePtr <- Call.char range+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      vlPtr <- Call.double vl+      vuPtr <- Call.double vu+      ilPtr <- Call.cint il+      iuPtr <- Call.cint iu+      abstolPtr <- Call.double abstol+      mPtr <- Call.alloca+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      ifailPtr <- Call.ioarray ifail+      infoPtr <- Call.alloca+      liftIO $ FFI.sbevx jobzPtr rangePtr uploPtr nPtr kdPtr abPtr ldabPtr qPtr ldqPtr vlPtr vuPtr ilPtr iuPtr abstolPtr mPtr wPtr zPtr ldzPtr workPtr iworkPtr ifailPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> Call.freezeArray q+         <*> fmap fromIntegral (peek mPtr)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> Call.freezeArray ifail+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsbgst.f>+sbgst ::+   Char {- ^ vect -} ->+   Char {- ^ uplo -} ->+   Int {- ^ ka -} ->+   Int {- ^ kb -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ ab -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ bb -} ->+   Int {- ^ ldx -} ->+   IO (Array (ZeroInt,ZeroInt) Double, Int)+sbgst vect uplo ka kb ab bb ldx = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let (bbDim0,bbDim1) = Call.sizes2 $ Array.shape bb+   let n = abDim0+   let ldab = abDim1+   let ldbb = bbDim1+   Call.assert "sbgst: n == bbDim0" (n == bbDim0)+   x <- Call.newArray2 n ldx+   work <- Call.newArray1 (2*n)+   evalContT $ do+      vectPtr <- Call.char vect+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kaPtr <- Call.cint ka+      kbPtr <- Call.cint kb+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      bbPtr <- Call.array bb+      ldbbPtr <- Call.cint ldbb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.sbgst vectPtr uploPtr nPtr kaPtr kbPtr abPtr ldabPtr bbPtr ldbbPtr xPtr ldxPtr workPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray x+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsbgv.f>+sbgv ::+   Char {- ^ jobz -} ->+   Char {- ^ uplo -} ->+   Int {- ^ ka -} ->+   Int {- ^ kb -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ ab -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ bb -} ->+   Int {- ^ ldz -} ->+   IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Int)+sbgv jobz uplo ka kb ab bb ldz = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let (bbDim0,bbDim1) = Call.sizes2 $ MutArray.shape bb+   let n = abDim0+   let ldab = abDim1+   let ldbb = bbDim1+   Call.assert "sbgv: n == bbDim0" (n == bbDim0)+   w <- Call.newArray1 n+   z <- Call.newArray2 n ldz+   work <- Call.newArray1 (3*n)+   evalContT $ do+      jobzPtr <- Call.char jobz+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kaPtr <- Call.cint ka+      kbPtr <- Call.cint kb+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      bbPtr <- Call.ioarray bb+      ldbbPtr <- Call.cint ldbb+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.sbgv jobzPtr uploPtr nPtr kaPtr kbPtr abPtr ldabPtr bbPtr ldbbPtr wPtr zPtr ldzPtr workPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsbgvd.f>+sbgvd ::+   Char {- ^ jobz -} ->+   Char {- ^ uplo -} ->+   Int {- ^ ka -} ->+   Int {- ^ kb -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ ab -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ bb -} ->+   Int {- ^ ldz -} ->+   Int {- ^ lwork -} ->+   Int {- ^ liwork -} ->+   IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Int)+sbgvd jobz uplo ka kb ab bb ldz lwork liwork = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let (bbDim0,bbDim1) = Call.sizes2 $ MutArray.shape bb+   let n = abDim0+   let ldab = abDim1+   let ldbb = bbDim1+   Call.assert "sbgvd: n == bbDim0" (n == bbDim0)+   w <- Call.newArray1 n+   z <- Call.newArray2 n ldz+   work <- Call.newArray1 (maximum[1,lwork])+   iwork <- Call.newArray1 (maximum[1,liwork])+   evalContT $ do+      jobzPtr <- Call.char jobz+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kaPtr <- Call.cint ka+      kbPtr <- Call.cint kb+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      bbPtr <- Call.ioarray bb+      ldbbPtr <- Call.cint ldbb+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      infoPtr <- Call.alloca+      liftIO $ FFI.sbgvd jobzPtr uploPtr nPtr kaPtr kbPtr abPtr ldabPtr bbPtr ldbbPtr wPtr zPtr ldzPtr workPtr lworkPtr iworkPtr liworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsbgvx.f>+sbgvx ::+   Char {- ^ jobz -} ->+   Char {- ^ range -} ->+   Char {- ^ uplo -} ->+   Int {- ^ ka -} ->+   Int {- ^ kb -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ ab -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ bb -} ->+   Int {- ^ ldq -} ->+   Double {- ^ vl -} ->+   Double {- ^ vu -} ->+   Int {- ^ il -} ->+   Int {- ^ iu -} ->+   Double {- ^ abstol -} ->+   Int {- ^ ldz -} ->+   Int {- ^ m -} ->+   IO (Array (ZeroInt,ZeroInt) Double, Int, Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array ZeroInt CInt, Int)+sbgvx jobz range uplo ka kb ab bb ldq vl vu il iu abstol ldz m = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let (bbDim0,bbDim1) = Call.sizes2 $ MutArray.shape bb+   let n = abDim0+   let ldab = abDim1+   let ldbb = bbDim1+   Call.assert "sbgvx: n == bbDim0" (n == bbDim0)+   q <- Call.newArray2 n ldq+   w <- Call.newArray1 n+   z <- Call.newArray2 n ldz+   work <- Call.newArray1 (7*n)+   iwork <- Call.newArray1 (5*n)+   ifail <- Call.newArray1 m+   evalContT $ do+      jobzPtr <- Call.char jobz+      rangePtr <- Call.char range+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kaPtr <- Call.cint ka+      kbPtr <- Call.cint kb+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      bbPtr <- Call.ioarray bb+      ldbbPtr <- Call.cint ldbb+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      vlPtr <- Call.double vl+      vuPtr <- Call.double vu+      ilPtr <- Call.cint il+      iuPtr <- Call.cint iu+      abstolPtr <- Call.double abstol+      mPtr <- Call.alloca+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      ifailPtr <- Call.ioarray ifail+      infoPtr <- Call.alloca+      liftIO $ FFI.sbgvx jobzPtr rangePtr uploPtr nPtr kaPtr kbPtr abPtr ldabPtr bbPtr ldbbPtr qPtr ldqPtr vlPtr vuPtr ilPtr iuPtr abstolPtr mPtr wPtr zPtr ldzPtr workPtr iworkPtr ifailPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> Call.freezeArray q+         <*> fmap fromIntegral (peek mPtr)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> Call.freezeArray ifail+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsbtrd.f>+sbtrd ::+   Char {- ^ vect -} ->+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ ab -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ q -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Int)+sbtrd vect uplo kd ab q = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let n = abDim0+   let ldab = abDim1+   let ldq = qDim1+   Call.assert "sbtrd: n == qDim0" (n == qDim0)+   d <- Call.newArray1 n+   e <- Call.newArray1 (n-1)+   work <- Call.newArray1 n+   evalContT $ do+      vectPtr <- Call.char vect+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.sbtrd vectPtr uploPtr nPtr kdPtr abPtr ldabPtr dPtr ePtr qPtr ldqPtr workPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray d+         <*> Call.freezeArray e+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsyev.f>+syev ::+   Char {- ^ jobz -} ->+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Double, Int)+syev jobz uplo a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   w <- Call.newArray1 n+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      jobzPtr <- Call.char jobz+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      wPtr <- Call.ioarray w+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.syev jobzPtr uploPtr nPtr aPtr ldaPtr wPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray w+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsyevd.f>+syevd ::+   Char {- ^ jobz -} ->+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Int {- ^ workSize -} ->+   Int {- ^ lwork -} ->+   Int {- ^ liwork -} ->+   IO (Array ZeroInt Double, Int)+syevd jobz uplo a workSize lwork liwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   w <- Call.newArray1 n+   work <- Call.newArray1 workSize+   iwork <- Call.newArray1 (maximum[1,liwork])+   evalContT $ do+      jobzPtr <- Call.char jobz+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      wPtr <- Call.ioarray w+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      infoPtr <- Call.alloca+      liftIO $ FFI.syevd jobzPtr uploPtr nPtr aPtr ldaPtr wPtr workPtr lworkPtr iworkPtr liworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray w+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsyevr.f>+syevr ::+   Char {- ^ jobz -} ->+   Char {- ^ range -} ->+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Double {- ^ vl -} ->+   Double {- ^ vu -} ->+   Int {- ^ il -} ->+   Int {- ^ iu -} ->+   Double {- ^ abstol -} ->+   Int {- ^ m -} ->+   Int {- ^ ldz -} ->+   Int {- ^ lwork -} ->+   Int {- ^ liwork -} ->+   IO (Int, Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array ZeroInt CInt, Int)+syevr jobz range uplo a vl vu il iu abstol m ldz lwork liwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   w <- Call.newArray1 n+   z <- Call.newArray2 (maximum[1,m]) ldz+   isuppz <- Call.newArray1 (2*maximum[1,m])+   work <- Call.newArray1 (maximum[1,lwork])+   iwork <- Call.newArray1 (maximum[1,liwork])+   evalContT $ do+      jobzPtr <- Call.char jobz+      rangePtr <- Call.char range+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      vlPtr <- Call.double vl+      vuPtr <- Call.double vu+      ilPtr <- Call.cint il+      iuPtr <- Call.cint iu+      abstolPtr <- Call.double abstol+      mPtr <- Call.alloca+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      isuppzPtr <- Call.ioarray isuppz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      infoPtr <- Call.alloca+      liftIO $ FFI.syevr jobzPtr rangePtr uploPtr nPtr aPtr ldaPtr vlPtr vuPtr ilPtr iuPtr abstolPtr mPtr wPtr zPtr ldzPtr isuppzPtr workPtr lworkPtr iworkPtr liworkPtr infoPtr+      liftIO $ pure (,,,,)+         <*> fmap fromIntegral (peek mPtr)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> Call.freezeArray isuppz+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsyevx.f>+syevx ::+   Char {- ^ jobz -} ->+   Char {- ^ range -} ->+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Double {- ^ vl -} ->+   Double {- ^ vu -} ->+   Int {- ^ il -} ->+   Int {- ^ iu -} ->+   Double {- ^ abstol -} ->+   Int {- ^ m -} ->+   Int {- ^ ldz -} ->+   Int {- ^ lwork -} ->+   IO (Int, Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array ZeroInt CInt, Int)+syevx jobz range uplo a vl vu il iu abstol m ldz lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   w <- Call.newArray1 n+   z <- Call.newArray2 (maximum[1,m]) ldz+   work <- Call.newArray1 (maximum[1,lwork])+   iwork <- Call.newArray1 (5*n)+   ifail <- Call.newArray1 n+   evalContT $ do+      jobzPtr <- Call.char jobz+      rangePtr <- Call.char range+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      vlPtr <- Call.double vl+      vuPtr <- Call.double vu+      ilPtr <- Call.cint il+      iuPtr <- Call.cint iu+      abstolPtr <- Call.double abstol+      mPtr <- Call.alloca+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      ifailPtr <- Call.ioarray ifail+      infoPtr <- Call.alloca+      liftIO $ FFI.syevx jobzPtr rangePtr uploPtr nPtr aPtr ldaPtr vlPtr vuPtr ilPtr iuPtr abstolPtr mPtr wPtr zPtr ldzPtr workPtr lworkPtr iworkPtr ifailPtr infoPtr+      liftIO $ pure (,,,,)+         <*> fmap fromIntegral (peek mPtr)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> Call.freezeArray ifail+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsygs2.f>+sygs2 ::+   Int {- ^ itype -} ->+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->+   IO (Int)+sygs2 itype uplo a b = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   Call.assert "sygs2: n == bDim0" (n == bDim0)+   evalContT $ do+      itypePtr <- Call.cint itype+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.sygs2 itypePtr uploPtr nPtr aPtr ldaPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsygst.f>+sygst ::+   Int {- ^ itype -} ->+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->+   IO (Int)+sygst itype uplo a b = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   Call.assert "sygst: n == bDim0" (n == bDim0)+   evalContT $ do+      itypePtr <- Call.cint itype+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.sygst itypePtr uploPtr nPtr aPtr ldaPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsygv.f>+sygv ::+   Int {- ^ itype -} ->+   Char {- ^ jobz -} ->+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Double, Int)+sygv itype jobz uplo a b lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   Call.assert "sygv: n == bDim0" (n == bDim0)+   w <- Call.newArray1 n+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      itypePtr <- Call.cint itype+      jobzPtr <- Call.char jobz+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      wPtr <- Call.ioarray w+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.sygv itypePtr jobzPtr uploPtr nPtr aPtr ldaPtr bPtr ldbPtr wPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray w+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsygvd.f>+sygvd ::+   Int {- ^ itype -} ->+   Char {- ^ jobz -} ->+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   Int {- ^ lwork -} ->+   Int {- ^ liwork -} ->+   IO (Array ZeroInt Double, Int)+sygvd itype jobz uplo a b lwork liwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   Call.assert "sygvd: n == bDim0" (n == bDim0)+   w <- Call.newArray1 n+   work <- Call.newArray1 (maximum[1,lwork])+   iwork <- Call.newArray1 (maximum[1,liwork])+   evalContT $ do+      itypePtr <- Call.cint itype+      jobzPtr <- Call.char jobz+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      wPtr <- Call.ioarray w+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      infoPtr <- Call.alloca+      liftIO $ FFI.sygvd itypePtr jobzPtr uploPtr nPtr aPtr ldaPtr bPtr ldbPtr wPtr workPtr lworkPtr iworkPtr liworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray w+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsygvx.f>+sygvx ::+   Int {- ^ itype -} ->+   Char {- ^ jobz -} ->+   Char {- ^ range -} ->+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   Double {- ^ vl -} ->+   Double {- ^ vu -} ->+   Int {- ^ il -} ->+   Int {- ^ iu -} ->+   Double {- ^ abstol -} ->+   Int {- ^ m -} ->+   Int {- ^ ldz -} ->+   Int {- ^ lwork -} ->+   IO (Int, Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array ZeroInt CInt, Int)+sygvx itype jobz range uplo a b vl vu il iu abstol m ldz lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   Call.assert "sygvx: n == bDim0" (n == bDim0)+   w <- Call.newArray1 n+   z <- Call.newArray2 (maximum[1,m]) ldz+   work <- Call.newArray1 (maximum[1,lwork])+   iwork <- Call.newArray1 (5*n)+   ifail <- Call.newArray1 n+   evalContT $ do+      itypePtr <- Call.cint itype+      jobzPtr <- Call.char jobz+      rangePtr <- Call.char range+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      vlPtr <- Call.double vl+      vuPtr <- Call.double vu+      ilPtr <- Call.cint il+      iuPtr <- Call.cint iu+      abstolPtr <- Call.double abstol+      mPtr <- Call.alloca+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      ifailPtr <- Call.ioarray ifail+      infoPtr <- Call.alloca+      liftIO $ FFI.sygvx itypePtr jobzPtr rangePtr uploPtr nPtr aPtr ldaPtr bPtr ldbPtr vlPtr vuPtr ilPtr iuPtr abstolPtr mPtr wPtr zPtr ldzPtr workPtr lworkPtr iworkPtr ifailPtr infoPtr+      liftIO $ pure (,,,,)+         <*> fmap fromIntegral (peek mPtr)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> Call.freezeArray ifail+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsfrk.f>+sfrk ::+   Char {- ^ transr -} ->+   Char {- ^ uplo -} ->+   Char {- ^ trans -} ->+   Int {- ^ n -} ->+   Int {- ^ k -} ->+   Double {- ^ alpha -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Double {- ^ beta -} ->+   IOArray ZeroInt Double {- ^ c -} ->+   IO ()+sfrk transr uplo trans n k alpha a beta c = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let cDim0 = Call.sizes1 $ MutArray.shape c+   let _ka = aDim0+   let lda = aDim1+   let _nt = cDim0+   evalContT $ do+      transrPtr <- Call.char transr+      uploPtr <- Call.char uplo+      transPtr <- Call.char trans+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      alphaPtr <- Call.double alpha+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      betaPtr <- Call.double beta+      cPtr <- Call.ioarray c+      liftIO $ FFI.sfrk transrPtr uploPtr transPtr nPtr kPtr alphaPtr aPtr ldaPtr betaPtr cPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dhgeqz.f>+hgeqz ::+   Char {- ^ job -} ->+   Char {- ^ compq -} ->+   Char {- ^ compz -} ->+   Int {- ^ ilo -} ->+   Int {- ^ ihi -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ h -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ t -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ q -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ z -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Int)+hgeqz job compq compz ilo ihi h t q z lwork = do+   let (hDim0,hDim1) = Call.sizes2 $ MutArray.shape h+   let (tDim0,tDim1) = Call.sizes2 $ MutArray.shape t+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = hDim0+   let ldh = hDim1+   let ldt = tDim1+   let ldq = qDim1+   let ldz = zDim1+   Call.assert "hgeqz: n == tDim0" (n == tDim0)+   Call.assert "hgeqz: n == qDim0" (n == qDim0)+   Call.assert "hgeqz: n == zDim0" (n == zDim0)+   alphar <- Call.newArray1 n+   alphai <- Call.newArray1 n+   beta <- Call.newArray1 n+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      jobPtr <- Call.char job+      compqPtr <- Call.char compq+      compzPtr <- Call.char compz+      nPtr <- Call.cint n+      iloPtr <- Call.cint ilo+      ihiPtr <- Call.cint ihi+      hPtr <- Call.ioarray h+      ldhPtr <- Call.cint ldh+      tPtr <- Call.ioarray t+      ldtPtr <- Call.cint ldt+      alpharPtr <- Call.ioarray alphar+      alphaiPtr <- Call.ioarray alphai+      betaPtr <- Call.ioarray beta+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.hgeqz jobPtr compqPtr compzPtr nPtr iloPtr ihiPtr hPtr ldhPtr tPtr ldtPtr alpharPtr alphaiPtr betaPtr qPtr ldqPtr zPtr ldzPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray alphar+         <*> Call.freezeArray alphai+         <*> Call.freezeArray beta+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dspev.f>+spev ::+   Char {- ^ jobz -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt Double {- ^ ap -} ->+   Int {- ^ ldz -} ->+   IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Int)+spev jobz uplo n ap ldz = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   Call.assert "spev: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   w <- Call.newArray1 n+   z <- Call.newArray2 n ldz+   work <- Call.newArray1 (3*n)+   evalContT $ do+      jobzPtr <- Call.char jobz+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.spev jobzPtr uploPtr nPtr apPtr wPtr zPtr ldzPtr workPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dspevd.f>+spevd ::+   Char {- ^ jobz -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt Double {- ^ ap -} ->+   Int {- ^ ldz -} ->+   Int {- ^ lwork -} ->+   Int {- ^ liwork -} ->+   IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Int)+spevd jobz uplo n ap ldz lwork liwork = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   Call.assert "spevd: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   w <- Call.newArray1 n+   z <- Call.newArray2 n ldz+   work <- Call.newArray1 (maximum[1,lwork])+   iwork <- Call.newArray1 (maximum[1,liwork])+   evalContT $ do+      jobzPtr <- Call.char jobz+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      infoPtr <- Call.alloca+      liftIO $ FFI.spevd jobzPtr uploPtr nPtr apPtr wPtr zPtr ldzPtr workPtr lworkPtr iworkPtr liworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dspevx.f>+spevx ::+   Char {- ^ jobz -} ->+   Char {- ^ range -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt Double {- ^ ap -} ->+   Double {- ^ vl -} ->+   Double {- ^ vu -} ->+   Int {- ^ il -} ->+   Int {- ^ iu -} ->+   Double {- ^ abstol -} ->+   Int {- ^ m -} ->+   Int {- ^ ldz -} ->+   IO (Int, Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array ZeroInt CInt, Int)+spevx jobz range uplo n ap vl vu il iu abstol m ldz = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   Call.assert "spevx: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   w <- Call.newArray1 n+   z <- Call.newArray2 (maximum[1,m]) ldz+   work <- Call.newArray1 (8*n)+   iwork <- Call.newArray1 (5*n)+   ifail <- Call.newArray1 n+   evalContT $ do+      jobzPtr <- Call.char jobz+      rangePtr <- Call.char range+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      vlPtr <- Call.double vl+      vuPtr <- Call.double vu+      ilPtr <- Call.cint il+      iuPtr <- Call.cint iu+      abstolPtr <- Call.double abstol+      mPtr <- Call.alloca+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      ifailPtr <- Call.ioarray ifail+      infoPtr <- Call.alloca+      liftIO $ FFI.spevx jobzPtr rangePtr uploPtr nPtr apPtr vlPtr vuPtr ilPtr iuPtr abstolPtr mPtr wPtr zPtr ldzPtr workPtr iworkPtr ifailPtr infoPtr+      liftIO $ pure (,,,,)+         <*> fmap fromIntegral (peek mPtr)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> Call.freezeArray ifail+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dspgst.f>+spgst ::+   Int {- ^ itype -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt Double {- ^ ap -} ->+   Array ZeroInt Double {- ^ bp -} ->+   IO (Int)+spgst itype uplo n ap bp = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   let bpDim0 = Call.sizes1 $ Array.shape bp+   Call.assert "spgst: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   Call.assert "spgst: n*(n+1)`div`2 == bpDim0" (n*(n+1)`div`2 == bpDim0)+   evalContT $ do+      itypePtr <- Call.cint itype+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      bpPtr <- Call.array bp+      infoPtr <- Call.alloca+      liftIO $ FFI.spgst itypePtr uploPtr nPtr apPtr bpPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dspgv.f>+spgv ::+   Int {- ^ itype -} ->+   Char {- ^ jobz -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt Double {- ^ ap -} ->+   IOArray ZeroInt Double {- ^ bp -} ->+   Int {- ^ ldz -} ->+   IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Int)+spgv itype jobz uplo n ap bp ldz = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   let bpDim0 = Call.sizes1 $ MutArray.shape bp+   Call.assert "spgv: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   Call.assert "spgv: n*(n+1)`div`2 == bpDim0" (n*(n+1)`div`2 == bpDim0)+   w <- Call.newArray1 n+   z <- Call.newArray2 n ldz+   work <- Call.newArray1 (3*n)+   evalContT $ do+      itypePtr <- Call.cint itype+      jobzPtr <- Call.char jobz+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      bpPtr <- Call.ioarray bp+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.spgv itypePtr jobzPtr uploPtr nPtr apPtr bpPtr wPtr zPtr ldzPtr workPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dspgvd.f>+spgvd ::+   Int {- ^ itype -} ->+   Char {- ^ jobz -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt Double {- ^ ap -} ->+   IOArray ZeroInt Double {- ^ bp -} ->+   Int {- ^ ldz -} ->+   Int {- ^ lwork -} ->+   Int {- ^ liwork -} ->+   IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Int)+spgvd itype jobz uplo n ap bp ldz lwork liwork = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   let bpDim0 = Call.sizes1 $ MutArray.shape bp+   Call.assert "spgvd: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   Call.assert "spgvd: n*(n+1)`div`2 == bpDim0" (n*(n+1)`div`2 == bpDim0)+   w <- Call.newArray1 n+   z <- Call.newArray2 n ldz+   work <- Call.newArray1 (maximum[1,lwork])+   iwork <- Call.newArray1 (maximum[1,liwork])+   evalContT $ do+      itypePtr <- Call.cint itype+      jobzPtr <- Call.char jobz+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      bpPtr <- Call.ioarray bp+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      infoPtr <- Call.alloca+      liftIO $ FFI.spgvd itypePtr jobzPtr uploPtr nPtr apPtr bpPtr wPtr zPtr ldzPtr workPtr lworkPtr iworkPtr liworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dspgvx.f>+spgvx ::+   Int {- ^ itype -} ->+   Char {- ^ jobz -} ->+   Char {- ^ range -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt Double {- ^ ap -} ->+   IOArray ZeroInt Double {- ^ bp -} ->+   Double {- ^ vl -} ->+   Double {- ^ vu -} ->+   Int {- ^ il -} ->+   Int {- ^ iu -} ->+   Double {- ^ abstol -} ->+   Int {- ^ m -} ->+   Int {- ^ ldz -} ->+   IO (Int, Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array ZeroInt CInt, Int)+spgvx itype jobz range uplo n ap bp vl vu il iu abstol m ldz = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   let bpDim0 = Call.sizes1 $ MutArray.shape bp+   Call.assert "spgvx: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   Call.assert "spgvx: n*(n+1)`div`2 == bpDim0" (n*(n+1)`div`2 == bpDim0)+   w <- Call.newArray1 n+   z <- Call.newArray2 (maximum[1,m]) ldz+   work <- Call.newArray1 (8*n)+   iwork <- Call.newArray1 (5*n)+   ifail <- Call.newArray1 n+   evalContT $ do+      itypePtr <- Call.cint itype+      jobzPtr <- Call.char jobz+      rangePtr <- Call.char range+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      bpPtr <- Call.ioarray bp+      vlPtr <- Call.double vl+      vuPtr <- Call.double vu+      ilPtr <- Call.cint il+      iuPtr <- Call.cint iu+      abstolPtr <- Call.double abstol+      mPtr <- Call.alloca+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      ifailPtr <- Call.ioarray ifail+      infoPtr <- Call.alloca+      liftIO $ FFI.spgvx itypePtr jobzPtr rangePtr uploPtr nPtr apPtr bpPtr vlPtr vuPtr ilPtr iuPtr abstolPtr mPtr wPtr zPtr ldzPtr workPtr iworkPtr ifailPtr infoPtr+      liftIO $ pure (,,,,)+         <*> fmap fromIntegral (peek mPtr)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> Call.freezeArray ifail+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsptrd.f>+sptrd ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt Double {- ^ ap -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Int)+sptrd uplo n ap = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   Call.assert "sptrd: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   d <- Call.newArray1 n+   e <- Call.newArray1 (n-1)+   tau <- Call.newArray1 (n-1)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      tauPtr <- Call.ioarray tau+      infoPtr <- Call.alloca+      liftIO $ FFI.sptrd uploPtr nPtr apPtr dPtr ePtr tauPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray d+         <*> Call.freezeArray e+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dhsein.f>+hsein ::+   Char {- ^ side -} ->+   Char {- ^ eigsrc -} ->+   Char {- ^ initv -} ->+   IOArray ZeroInt Bool {- ^ select -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ h -} ->+   IOArray ZeroInt Double {- ^ wr -} ->+   Array ZeroInt Double {- ^ wi -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ vl -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ vr -} ->+   IO (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)+hsein side eigsrc initv select h wr wi vl vr = do+   let selectDim0 = Call.sizes1 $ MutArray.shape select+   let (hDim0,hDim1) = Call.sizes2 $ Array.shape h+   let wrDim0 = Call.sizes1 $ MutArray.shape wr+   let wiDim0 = Call.sizes1 $ Array.shape wi+   let (vlDim0,vlDim1) = Call.sizes2 $ MutArray.shape vl+   let (vrDim0,vrDim1) = Call.sizes2 $ MutArray.shape vr+   let n = selectDim0+   let ldh = hDim1+   let mm = vlDim0+   let ldvl = vlDim1+   let ldvr = vrDim1+   Call.assert "hsein: n == hDim0" (n == hDim0)+   Call.assert "hsein: n == wrDim0" (n == wrDim0)+   Call.assert "hsein: n == wiDim0" (n == wiDim0)+   Call.assert "hsein: mm == vrDim0" (mm == vrDim0)+   work <- Call.newArray1 ((n+2)*n)+   ifaill <- Call.newArray1 mm+   ifailr <- Call.newArray1 mm+   evalContT $ do+      sidePtr <- Call.char side+      eigsrcPtr <- Call.char eigsrc+      initvPtr <- Call.char initv+      selectPtr <- Call.ioarray select+      nPtr <- Call.cint n+      hPtr <- Call.array h+      ldhPtr <- Call.cint ldh+      wrPtr <- Call.ioarray wr+      wiPtr <- Call.array wi+      vlPtr <- Call.ioarray vl+      ldvlPtr <- Call.cint ldvl+      vrPtr <- Call.ioarray vr+      ldvrPtr <- Call.cint ldvr+      mmPtr <- Call.cint mm+      mPtr <- Call.alloca+      workPtr <- Call.ioarray work+      ifaillPtr <- Call.ioarray ifaill+      ifailrPtr <- Call.ioarray ifailr+      infoPtr <- Call.alloca+      liftIO $ FFI.hsein sidePtr eigsrcPtr initvPtr selectPtr nPtr hPtr ldhPtr wrPtr wiPtr vlPtr ldvlPtr vrPtr ldvrPtr mmPtr mPtr workPtr ifaillPtr ifailrPtr infoPtr+      liftIO $ pure (,,,)+         <*> fmap fromIntegral (peek mPtr)+         <*> Call.freezeArray ifaill+         <*> Call.freezeArray ifailr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dhseqr.f>+hseqr ::+   Char {- ^ job -} ->+   Char {- ^ compz -} ->+   Int {- ^ ilo -} ->+   Int {- ^ ihi -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ h -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ z -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Int)+hseqr job compz ilo ihi h z lwork = do+   let (hDim0,hDim1) = Call.sizes2 $ MutArray.shape h+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = hDim0+   let ldh = hDim1+   let ldz = zDim1+   Call.assert "hseqr: n == zDim0" (n == zDim0)+   wr <- Call.newArray1 n+   wi <- Call.newArray1 n+   work <- Call.newArray1 lwork+   evalContT $ do+      jobPtr <- Call.char job+      compzPtr <- Call.char compz+      nPtr <- Call.cint n+      iloPtr <- Call.cint ilo+      ihiPtr <- Call.cint ihi+      hPtr <- Call.ioarray h+      ldhPtr <- Call.cint ldh+      wrPtr <- Call.ioarray wr+      wiPtr <- Call.ioarray wi+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.hseqr jobPtr compzPtr nPtr iloPtr ihiPtr hPtr ldhPtr wrPtr wiPtr zPtr ldzPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray wr+         <*> Call.freezeArray wi+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/iladlc.f>+ilalc ::+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IO CInt+ilalc m a = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      liftIO $ FFI.ilalc mPtr nPtr aPtr ldaPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/iladlr.f>+ilalr ::+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IO CInt+ilalr m a = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      liftIO $ FFI.ilalr mPtr nPtr aPtr ldaPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/disnan.f>+isnan ::+   Double {- ^ din -} ->+   IO Bool+isnan din = do+   evalContT $ do+      dinPtr <- Call.double din+      liftIO $ FFI.isnan dinPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlabad.f>+labad ::+   Double {- ^ small -} ->+   Double {- ^ large -} ->+   IO (Double, Double)+labad small large = do+   evalContT $ do+      smallPtr <- Call.double small+      largePtr <- Call.double large+      liftIO $ FFI.labad smallPtr largePtr+      liftIO $ pure (,)+         <*> peek smallPtr+         <*> peek largePtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlabrd.f>+labrd ::+   Int {- ^ m -} ->+   Int {- ^ nb -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Int {- ^ ldx -} ->+   Int {- ^ ldy -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double)+labrd m nb a ldx ldy = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   d <- Call.newArray1 nb+   e <- Call.newArray1 nb+   tauq <- Call.newArray1 nb+   taup <- Call.newArray1 nb+   x <- Call.newArray2 nb ldx+   y <- Call.newArray2 nb ldy+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      nbPtr <- Call.cint nb+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      tauqPtr <- Call.ioarray tauq+      taupPtr <- Call.ioarray taup+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      yPtr <- Call.ioarray y+      ldyPtr <- Call.cint ldy+      liftIO $ FFI.labrd mPtr nPtr nbPtr aPtr ldaPtr dPtr ePtr tauqPtr taupPtr xPtr ldxPtr yPtr ldyPtr+      liftIO $ pure (,,,,,)+         <*> Call.freezeArray d+         <*> Call.freezeArray e+         <*> Call.freezeArray tauq+         <*> Call.freezeArray taup+         <*> Call.freezeArray x+         <*> Call.freezeArray y++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlacn2.f>+lacn2 ::+   IOArray ZeroInt Double {- ^ x -} ->+   Double {- ^ est -} ->+   Int {- ^ kase -} ->+   IOArray ZeroInt CInt {- ^ isave -} ->+   IO (Array ZeroInt Double, Array ZeroInt CInt, Double, Int)+lacn2 x est kase isave = do+   let xDim0 = Call.sizes1 $ MutArray.shape x+   let isaveDim0 = Call.sizes1 $ MutArray.shape isave+   let n = xDim0+   Call.assert "lacn2: 3 == isaveDim0" (3 == isaveDim0)+   v <- Call.newArray1 n+   isgn <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      vPtr <- Call.ioarray v+      xPtr <- Call.ioarray x+      isgnPtr <- Call.ioarray isgn+      estPtr <- Call.double est+      kasePtr <- Call.cint kase+      isavePtr <- Call.ioarray isave+      liftIO $ FFI.lacn2 nPtr vPtr xPtr isgnPtr estPtr kasePtr isavePtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray v+         <*> Call.freezeArray isgn+         <*> peek estPtr+         <*> fmap fromIntegral (peek kasePtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlacon.f>+lacon ::+   IOArray ZeroInt Double {- ^ x -} ->+   Double {- ^ est -} ->+   Int {- ^ kase -} ->+   IO (Array ZeroInt Double, Array ZeroInt CInt, Double, Int)+lacon x est kase = do+   let xDim0 = Call.sizes1 $ MutArray.shape x+   let n = xDim0+   v <- Call.newArray1 n+   isgn <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      vPtr <- Call.ioarray v+      xPtr <- Call.ioarray x+      isgnPtr <- Call.ioarray isgn+      estPtr <- Call.double est+      kasePtr <- Call.cint kase+      liftIO $ FFI.lacon nPtr vPtr xPtr isgnPtr estPtr kasePtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray v+         <*> Call.freezeArray isgn+         <*> peek estPtr+         <*> fmap fromIntegral (peek kasePtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlacpy.f>+lacpy ::+   Char {- ^ uplo -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Int {- ^ ldb -} ->+   IO (Array (ZeroInt,ZeroInt) Double)+lacpy uplo m a ldb = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   b <- Call.newArray2 n ldb+   evalContT $ do+      uploPtr <- Call.char uplo+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      liftIO $ FFI.lacpy uploPtr mPtr nPtr aPtr ldaPtr bPtr ldbPtr+      liftIO $ Call.freezeArray b++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dladiv.f>+ladiv ::+   Double {- ^ a -} ->+   Double {- ^ b -} ->+   Double {- ^ c -} ->+   Double {- ^ d -} ->+   IO (Double, Double)+ladiv a b c d = do+   evalContT $ do+      aPtr <- Call.double a+      bPtr <- Call.double b+      cPtr <- Call.double c+      dPtr <- Call.double d+      pPtr <- Call.alloca+      qPtr <- Call.alloca+      liftIO $ FFI.ladiv aPtr bPtr cPtr dPtr pPtr qPtr+      liftIO $ pure (,)+         <*> peek pPtr+         <*> peek qPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlae2.f>+lae2 ::+   Double {- ^ a -} ->+   Double {- ^ b -} ->+   Double {- ^ c -} ->+   IO (Double, Double)+lae2 a b c = do+   evalContT $ do+      aPtr <- Call.double a+      bPtr <- Call.double b+      cPtr <- Call.double c+      rt1Ptr <- Call.alloca+      rt2Ptr <- Call.alloca+      liftIO $ FFI.lae2 aPtr bPtr cPtr rt1Ptr rt2Ptr+      liftIO $ pure (,)+         <*> peek rt1Ptr+         <*> peek rt2Ptr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaebz.f>+laebz ::+   Int {- ^ ijob -} ->+   Int {- ^ nitmax -} ->+   Int {- ^ nbmin -} ->+   Double {- ^ abstol -} ->+   Double {- ^ reltol -} ->+   Double {- ^ pivmin -} ->+   Array ZeroInt Double {- ^ d -} ->+   Array ZeroInt Double {- ^ e -} ->+   Array ZeroInt Double {- ^ e2 -} ->+   IOArray ZeroInt CInt {- ^ nval -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ ab -} ->+   IOArray ZeroInt Double {- ^ c -} ->+   IOArray (ZeroInt,ZeroInt) CInt {- ^ nab -} ->+   IO (Int, Int)+laebz ijob nitmax nbmin abstol reltol pivmin d e e2 nval ab c nab = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let eDim0 = Call.sizes1 $ Array.shape e+   let e2Dim0 = Call.sizes1 $ Array.shape e2+   let nvalDim0 = Call.sizes1 $ MutArray.shape nval+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let cDim0 = Call.sizes1 $ MutArray.shape c+   let (nabDim0,nabDim1) = Call.sizes2 $ MutArray.shape nab+   let n = dDim0+   let minp = nvalDim0+   let mmax = abDim1+   Call.assert "laebz: n == eDim0" (n == eDim0)+   Call.assert "laebz: n == e2Dim0" (n == e2Dim0)+   Call.assert "laebz: 2 == abDim0" (2 == abDim0)+   Call.assert "laebz: mmax == cDim0" (mmax == cDim0)+   Call.assert "laebz: 2 == nabDim0" (2 == nabDim0)+   Call.assert "laebz: mmax == nabDim1" (mmax == nabDim1)+   work <- Call.newArray1 mmax+   iwork <- Call.newArray1 mmax+   evalContT $ do+      ijobPtr <- Call.cint ijob+      nitmaxPtr <- Call.cint nitmax+      nPtr <- Call.cint n+      mmaxPtr <- Call.cint mmax+      minpPtr <- Call.cint minp+      nbminPtr <- Call.cint nbmin+      abstolPtr <- Call.double abstol+      reltolPtr <- Call.double reltol+      pivminPtr <- Call.double pivmin+      dPtr <- Call.array d+      ePtr <- Call.array e+      e2Ptr <- Call.array e2+      nvalPtr <- Call.ioarray nval+      abPtr <- Call.ioarray ab+      cPtr <- Call.ioarray c+      moutPtr <- Call.alloca+      nabPtr <- Call.ioarray nab+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.laebz ijobPtr nitmaxPtr nPtr mmaxPtr minpPtr nbminPtr abstolPtr reltolPtr pivminPtr dPtr ePtr e2Ptr nvalPtr abPtr cPtr moutPtr nabPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,)+         <*> fmap fromIntegral (peek moutPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaed0.f>+laed0 ::+   Int {- ^ icompq -} ->+   Int {- ^ qsiz -} ->+   IOArray ZeroInt Double {- ^ d -} ->+   Array ZeroInt Double {- ^ e -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ q -} ->+   Int {- ^ ldqs -} ->+   Int {- ^ workSize -} ->+   Int {- ^ iworkSize -} ->+   IO (Array (ZeroInt,ZeroInt) Double, Int)+laed0 icompq qsiz d e q ldqs workSize iworkSize = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ Array.shape e+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let n = dDim0+   let ldq = qDim1+   Call.assert "laed0: n-1 == eDim0" (n-1 == eDim0)+   Call.assert "laed0: n == qDim0" (n == qDim0)+   qstore <- Call.newArray2 n ldqs+   work <- Call.newArray1 workSize+   iwork <- Call.newArray1 iworkSize+   evalContT $ do+      icompqPtr <- Call.cint icompq+      qsizPtr <- Call.cint qsiz+      nPtr <- Call.cint n+      dPtr <- Call.ioarray d+      ePtr <- Call.array e+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      qstorePtr <- Call.ioarray qstore+      ldqsPtr <- Call.cint ldqs+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.laed0 icompqPtr qsizPtr nPtr dPtr ePtr qPtr ldqPtr qstorePtr ldqsPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray qstore+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaed1.f>+laed1 ::+   IOArray ZeroInt Double {- ^ d -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ q -} ->+   IOArray ZeroInt CInt {- ^ indxq -} ->+   Double {- ^ rho -} ->+   Int {- ^ cutpnt -} ->+   IO (Int)+laed1 d q indxq rho cutpnt = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let indxqDim0 = Call.sizes1 $ MutArray.shape indxq+   let n = dDim0+   let ldq = qDim1+   Call.assert "laed1: n == qDim0" (n == qDim0)+   Call.assert "laed1: n == indxqDim0" (n == indxqDim0)+   work <- Call.newArray1 (4*n+n^!2)+   iwork <- Call.newArray1 (4*n)+   evalContT $ do+      nPtr <- Call.cint n+      dPtr <- Call.ioarray d+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      indxqPtr <- Call.ioarray indxq+      rhoPtr <- Call.double rho+      cutpntPtr <- Call.cint cutpnt+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.laed1 nPtr dPtr qPtr ldqPtr indxqPtr rhoPtr cutpntPtr workPtr iworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaed2.f>+laed2 ::+   Int {- ^ n1 -} ->+   IOArray ZeroInt Double {- ^ d -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ q -} ->+   IOArray ZeroInt CInt {- ^ indxq -} ->+   Double {- ^ rho -} ->+   Array ZeroInt Double {- ^ z -} ->+   IO (Int, Double, Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int)+laed2 n1 d q indxq rho z = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let indxqDim0 = Call.sizes1 $ MutArray.shape indxq+   let zDim0 = Call.sizes1 $ Array.shape z+   let n = dDim0+   let ldq = qDim1+   Call.assert "laed2: n == qDim0" (n == qDim0)+   Call.assert "laed2: n == indxqDim0" (n == indxqDim0)+   Call.assert "laed2: n == zDim0" (n == zDim0)+   dlamda <- Call.newArray1 n+   w <- Call.newArray1 n+   q2 <- Call.newArray1 (n1^!2+(n-n1)^!2)+   indx <- Call.newArray1 n+   indxc <- Call.newArray1 n+   indxp <- Call.newArray1 n+   coltyp <- Call.newArray1 n+   evalContT $ do+      kPtr <- Call.alloca+      nPtr <- Call.cint n+      n1Ptr <- Call.cint n1+      dPtr <- Call.ioarray d+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      indxqPtr <- Call.ioarray indxq+      rhoPtr <- Call.double rho+      zPtr <- Call.array z+      dlamdaPtr <- Call.ioarray dlamda+      wPtr <- Call.ioarray w+      q2Ptr <- Call.ioarray q2+      indxPtr <- Call.ioarray indx+      indxcPtr <- Call.ioarray indxc+      indxpPtr <- Call.ioarray indxp+      coltypPtr <- Call.ioarray coltyp+      infoPtr <- Call.alloca+      liftIO $ FFI.laed2 kPtr nPtr n1Ptr dPtr qPtr ldqPtr indxqPtr rhoPtr zPtr dlamdaPtr wPtr q2Ptr indxPtr indxcPtr indxpPtr coltypPtr infoPtr+      liftIO $ pure (,,,,,,,,,)+         <*> fmap fromIntegral (peek kPtr)+         <*> peek rhoPtr+         <*> Call.freezeArray dlamda+         <*> Call.freezeArray w+         <*> Call.freezeArray q2+         <*> Call.freezeArray indx+         <*> Call.freezeArray indxc+         <*> Call.freezeArray indxp+         <*> Call.freezeArray coltyp+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaed3.f>+laed3 ::+   Int {- ^ n1 -} ->+   Int {- ^ ldq -} ->+   Double {- ^ rho -} ->+   IOArray ZeroInt Double {- ^ dlamda -} ->+   Array ZeroInt Double {- ^ q2 -} ->+   Array ZeroInt CInt {- ^ indx -} ->+   Array ZeroInt CInt {- ^ ctot -} ->+   IOArray ZeroInt Double {- ^ w -} ->+   IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array ZeroInt Double, Int)+laed3 n1 ldq rho dlamda q2 indx ctot w = do+   let dlamdaDim0 = Call.sizes1 $ MutArray.shape dlamda+   let q2Dim0 = Call.sizes1 $ Array.shape q2+   let indxDim0 = Call.sizes1 $ Array.shape indx+   let ctotDim0 = Call.sizes1 $ Array.shape ctot+   let wDim0 = Call.sizes1 $ MutArray.shape w+   let k = dlamdaDim0+   let n = indxDim0+   Call.ignore "laed3: ldq2*n == q2Dim0" q2Dim0+   Call.assert "laed3: 4 == ctotDim0" (4 == ctotDim0)+   Call.assert "laed3: k == wDim0" (k == wDim0)+   d <- Call.newArray1 n+   q <- Call.newArray2 n ldq+   s <- Call.newArray1 (n1+1)+   evalContT $ do+      kPtr <- Call.cint k+      nPtr <- Call.cint n+      n1Ptr <- Call.cint n1+      dPtr <- Call.ioarray d+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      rhoPtr <- Call.double rho+      dlamdaPtr <- Call.ioarray dlamda+      q2Ptr <- Call.array q2+      indxPtr <- Call.array indx+      ctotPtr <- Call.array ctot+      wPtr <- Call.ioarray w+      sPtr <- Call.ioarray s+      infoPtr <- Call.alloca+      liftIO $ FFI.laed3 kPtr nPtr n1Ptr dPtr qPtr ldqPtr rhoPtr dlamdaPtr q2Ptr indxPtr ctotPtr wPtr sPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray d+         <*> Call.freezeArray q+         <*> Call.freezeArray s+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaed4.f>+laed4 ::+   Int {- ^ i -} ->+   Array ZeroInt Double {- ^ d -} ->+   Array ZeroInt Double {- ^ z -} ->+   Double {- ^ rho -} ->+   IO (Array ZeroInt Double, Double, Int)+laed4 i d z rho = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let zDim0 = Call.sizes1 $ Array.shape z+   let n = dDim0+   Call.assert "laed4: n == zDim0" (n == zDim0)+   delta <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      iPtr <- Call.cint i+      dPtr <- Call.array d+      zPtr <- Call.array z+      deltaPtr <- Call.ioarray delta+      rhoPtr <- Call.double rho+      dlamPtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.laed4 nPtr iPtr dPtr zPtr deltaPtr rhoPtr dlamPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray delta+         <*> peek dlamPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaed5.f>+laed5 ::+   Int {- ^ i -} ->+   Array ZeroInt Double {- ^ d -} ->+   Array ZeroInt Double {- ^ z -} ->+   Double {- ^ rho -} ->+   IO (Array ZeroInt Double, Double)+laed5 i d z rho = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let zDim0 = Call.sizes1 $ Array.shape z+   Call.assert "laed5: 2 == dDim0" (2 == dDim0)+   Call.assert "laed5: 2 == zDim0" (2 == zDim0)+   delta <- Call.newArray1 2+   evalContT $ do+      iPtr <- Call.cint i+      dPtr <- Call.array d+      zPtr <- Call.array z+      deltaPtr <- Call.ioarray delta+      rhoPtr <- Call.double rho+      dlamPtr <- Call.alloca+      liftIO $ FFI.laed5 iPtr dPtr zPtr deltaPtr rhoPtr dlamPtr+      liftIO $ pure (,)+         <*> Call.freezeArray delta+         <*> peek dlamPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaed6.f>+laed6 ::+   Int {- ^ kniter -} ->+   Bool {- ^ orgati -} ->+   Double {- ^ rho -} ->+   Array ZeroInt Double {- ^ d -} ->+   Array ZeroInt Double {- ^ z -} ->+   Double {- ^ finit -} ->+   IO (Double, Int)+laed6 kniter orgati rho d z finit = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let zDim0 = Call.sizes1 $ Array.shape z+   Call.assert "laed6: 3 == dDim0" (3 == dDim0)+   Call.assert "laed6: 3 == zDim0" (3 == zDim0)+   evalContT $ do+      kniterPtr <- Call.cint kniter+      orgatiPtr <- Call.bool orgati+      rhoPtr <- Call.double rho+      dPtr <- Call.array d+      zPtr <- Call.array z+      finitPtr <- Call.double finit+      tauPtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.laed6 kniterPtr orgatiPtr rhoPtr dPtr zPtr finitPtr tauPtr infoPtr+      liftIO $ pure (,)+         <*> peek tauPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaed7.f>+laed7 ::+   Int {- ^ icompq -} ->+   Int {- ^ qsiz -} ->+   Int {- ^ tlvls -} ->+   Int {- ^ curlvl -} ->+   Int {- ^ curpbm -} ->+   IOArray ZeroInt Double {- ^ d -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ q -} ->+   Double {- ^ rho -} ->+   Int {- ^ cutpnt -} ->+   IOArray ZeroInt Double {- ^ qstore -} ->+   IOArray ZeroInt CInt {- ^ qptr -} ->+   Array ZeroInt CInt {- ^ prmptr -} ->+   Array ZeroInt CInt {- ^ perm -} ->+   Array ZeroInt CInt {- ^ givptr -} ->+   Array (ZeroInt,ZeroInt) CInt {- ^ givcol -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ givnum -} ->+   IO (Array ZeroInt CInt, Int)+laed7 icompq qsiz tlvls curlvl curpbm d q rho cutpnt qstore qptr prmptr perm givptr givcol givnum = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let qstoreDim0 = Call.sizes1 $ MutArray.shape qstore+   let qptrDim0 = Call.sizes1 $ MutArray.shape qptr+   let prmptrDim0 = Call.sizes1 $ Array.shape prmptr+   let permDim0 = Call.sizes1 $ Array.shape perm+   let givptrDim0 = Call.sizes1 $ Array.shape givptr+   let (givcolDim0,givcolDim1) = Call.sizes2 $ Array.shape givcol+   let (givnumDim0,givnumDim1) = Call.sizes2 $ Array.shape givnum+   let n = dDim0+   let ldq = qDim1+   let nlgn = prmptrDim0+   Call.assert "laed7: n == qDim0" (n == qDim0)+   Call.assert "laed7: n^!2+1 == qstoreDim0" (n^!2+1 == qstoreDim0)+   Call.assert "laed7: n+2 == qptrDim0" (n+2 == qptrDim0)+   Call.assert "laed7: nlgn == permDim0" (nlgn == permDim0)+   Call.assert "laed7: nlgn == givptrDim0" (nlgn == givptrDim0)+   Call.assert "laed7: nlgn == givcolDim0" (nlgn == givcolDim0)+   Call.assert "laed7: 2 == givcolDim1" (2 == givcolDim1)+   Call.assert "laed7: nlgn == givnumDim0" (nlgn == givnumDim0)+   Call.assert "laed7: 2 == givnumDim1" (2 == givnumDim1)+   indxq <- Call.newArray1 n+   work <- Call.newArray1 (3*n+2*qsiz*n)+   iwork <- Call.newArray1 (4*n)+   evalContT $ do+      icompqPtr <- Call.cint icompq+      nPtr <- Call.cint n+      qsizPtr <- Call.cint qsiz+      tlvlsPtr <- Call.cint tlvls+      curlvlPtr <- Call.cint curlvl+      curpbmPtr <- Call.cint curpbm+      dPtr <- Call.ioarray d+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      indxqPtr <- Call.ioarray indxq+      rhoPtr <- Call.double rho+      cutpntPtr <- Call.cint cutpnt+      qstorePtr <- Call.ioarray qstore+      qptrPtr <- Call.ioarray qptr+      prmptrPtr <- Call.array prmptr+      permPtr <- Call.array perm+      givptrPtr <- Call.array givptr+      givcolPtr <- Call.array givcol+      givnumPtr <- Call.array givnum+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.laed7 icompqPtr nPtr qsizPtr tlvlsPtr curlvlPtr curpbmPtr dPtr qPtr ldqPtr indxqPtr rhoPtr cutpntPtr qstorePtr qptrPtr prmptrPtr permPtr givptrPtr givcolPtr givnumPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray indxq+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaed8.f>+laed8 ::+   Int {- ^ icompq -} ->+   Int {- ^ qsiz -} ->+   IOArray ZeroInt Double {- ^ d -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ q -} ->+   Array ZeroInt CInt {- ^ indxq -} ->+   Double {- ^ rho -} ->+   Int {- ^ cutpnt -} ->+   Array ZeroInt Double {- ^ z -} ->+   Int {- ^ ldq2 -} ->+   IO (Int, Double, Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array ZeroInt Double, Array ZeroInt CInt, Int, Array (ZeroInt,ZeroInt) CInt, Array (ZeroInt,ZeroInt) Double, Array ZeroInt CInt, Array ZeroInt CInt, Int)+laed8 icompq qsiz d q indxq rho cutpnt z ldq2 = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let indxqDim0 = Call.sizes1 $ Array.shape indxq+   let zDim0 = Call.sizes1 $ Array.shape z+   let n = dDim0+   let ldq = qDim1+   Call.assert "laed8: n == qDim0" (n == qDim0)+   Call.assert "laed8: n == indxqDim0" (n == indxqDim0)+   Call.assert "laed8: n == zDim0" (n == zDim0)+   dlamda <- Call.newArray1 n+   q2 <- Call.newArray2 n ldq2+   w <- Call.newArray1 n+   perm <- Call.newArray1 n+   givcol <- Call.newArray2 n 2+   givnum <- Call.newArray2 n 2+   indxp <- Call.newArray1 n+   indx <- Call.newArray1 n+   evalContT $ do+      icompqPtr <- Call.cint icompq+      kPtr <- Call.alloca+      nPtr <- Call.cint n+      qsizPtr <- Call.cint qsiz+      dPtr <- Call.ioarray d+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      indxqPtr <- Call.array indxq+      rhoPtr <- Call.double rho+      cutpntPtr <- Call.cint cutpnt+      zPtr <- Call.array z+      dlamdaPtr <- Call.ioarray dlamda+      q2Ptr <- Call.ioarray q2+      ldq2Ptr <- Call.cint ldq2+      wPtr <- Call.ioarray w+      permPtr <- Call.ioarray perm+      givptrPtr <- Call.alloca+      givcolPtr <- Call.ioarray givcol+      givnumPtr <- Call.ioarray givnum+      indxpPtr <- Call.ioarray indxp+      indxPtr <- Call.ioarray indx+      infoPtr <- Call.alloca+      liftIO $ FFI.laed8 icompqPtr kPtr nPtr qsizPtr dPtr qPtr ldqPtr indxqPtr rhoPtr cutpntPtr zPtr dlamdaPtr q2Ptr ldq2Ptr wPtr permPtr givptrPtr givcolPtr givnumPtr indxpPtr indxPtr infoPtr+      liftIO $ pure (,,,,,,,,,,,)+         <*> fmap fromIntegral (peek kPtr)+         <*> peek rhoPtr+         <*> Call.freezeArray dlamda+         <*> Call.freezeArray q2+         <*> Call.freezeArray w+         <*> Call.freezeArray perm+         <*> fmap fromIntegral (peek givptrPtr)+         <*> Call.freezeArray givcol+         <*> Call.freezeArray givnum+         <*> Call.freezeArray indxp+         <*> Call.freezeArray indx+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaed9.f>+laed9 ::+   Int {- ^ kstart -} ->+   Int {- ^ kstop -} ->+   Int {- ^ n -} ->+   Int {- ^ ldq -} ->+   Double {- ^ rho -} ->+   Array ZeroInt Double {- ^ dlamda -} ->+   Array ZeroInt Double {- ^ w -} ->+   Int {- ^ lds -} ->+   IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double, Int)+laed9 kstart kstop n ldq rho dlamda w lds = do+   let dlamdaDim0 = Call.sizes1 $ Array.shape dlamda+   let wDim0 = Call.sizes1 $ Array.shape w+   let k = dlamdaDim0+   Call.assert "laed9: k == wDim0" (k == wDim0)+   d <- Call.newArray1 n+   q <- Call.newArray2 n ldq+   s <- Call.newArray2 k lds+   evalContT $ do+      kPtr <- Call.cint k+      kstartPtr <- Call.cint kstart+      kstopPtr <- Call.cint kstop+      nPtr <- Call.cint n+      dPtr <- Call.ioarray d+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      rhoPtr <- Call.double rho+      dlamdaPtr <- Call.array dlamda+      wPtr <- Call.array w+      sPtr <- Call.ioarray s+      ldsPtr <- Call.cint lds+      infoPtr <- Call.alloca+      liftIO $ FFI.laed9 kPtr kstartPtr kstopPtr nPtr dPtr qPtr ldqPtr rhoPtr dlamdaPtr wPtr sPtr ldsPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray d+         <*> Call.freezeArray q+         <*> Call.freezeArray s+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaeda.f>+laeda ::+   Int {- ^ n -} ->+   Int {- ^ tlvls -} ->+   Int {- ^ curlvl -} ->+   Int {- ^ curpbm -} ->+   Array ZeroInt CInt {- ^ prmptr -} ->+   Array ZeroInt CInt {- ^ perm -} ->+   Array ZeroInt CInt {- ^ givptr -} ->+   Array (ZeroInt,ZeroInt) CInt {- ^ givcol -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ givnum -} ->+   Array ZeroInt Double {- ^ q -} ->+   Array ZeroInt CInt {- ^ qptr -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Int)+laeda n tlvls curlvl curpbm prmptr perm givptr givcol givnum q qptr = do+   let prmptrDim0 = Call.sizes1 $ Array.shape prmptr+   let permDim0 = Call.sizes1 $ Array.shape perm+   let givptrDim0 = Call.sizes1 $ Array.shape givptr+   let (givcolDim0,givcolDim1) = Call.sizes2 $ Array.shape givcol+   let (givnumDim0,givnumDim1) = Call.sizes2 $ Array.shape givnum+   let qDim0 = Call.sizes1 $ Array.shape q+   let qptrDim0 = Call.sizes1 $ Array.shape qptr+   let nlgn = prmptrDim0+   Call.assert "laeda: nlgn == permDim0" (nlgn == permDim0)+   Call.assert "laeda: nlgn == givptrDim0" (nlgn == givptrDim0)+   Call.assert "laeda: nlgn == givcolDim0" (nlgn == givcolDim0)+   Call.assert "laeda: 2 == givcolDim1" (2 == givcolDim1)+   Call.assert "laeda: nlgn == givnumDim0" (nlgn == givnumDim0)+   Call.assert "laeda: 2 == givnumDim1" (2 == givnumDim1)+   Call.assert "laeda: n^!2 == qDim0" (n^!2 == qDim0)+   Call.assert "laeda: n+2 == qptrDim0" (n+2 == qptrDim0)+   z <- Call.newArray1 n+   ztemp <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      tlvlsPtr <- Call.cint tlvls+      curlvlPtr <- Call.cint curlvl+      curpbmPtr <- Call.cint curpbm+      prmptrPtr <- Call.array prmptr+      permPtr <- Call.array perm+      givptrPtr <- Call.array givptr+      givcolPtr <- Call.array givcol+      givnumPtr <- Call.array givnum+      qPtr <- Call.array q+      qptrPtr <- Call.array qptr+      zPtr <- Call.ioarray z+      ztempPtr <- Call.ioarray ztemp+      infoPtr <- Call.alloca+      liftIO $ FFI.laeda nPtr tlvlsPtr curlvlPtr curpbmPtr prmptrPtr permPtr givptrPtr givcolPtr givnumPtr qPtr qptrPtr zPtr ztempPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray z+         <*> Call.freezeArray ztemp+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaein.f>+laein ::+   Bool {- ^ rightv -} ->+   Bool {- ^ noinit -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ h -} ->+   Double {- ^ wr -} ->+   Double {- ^ wi -} ->+   IOArray ZeroInt Double {- ^ vr -} ->+   IOArray ZeroInt Double {- ^ vi -} ->+   Int {- ^ ldb -} ->+   Double {- ^ eps3 -} ->+   Double {- ^ smlnum -} ->+   Double {- ^ bignum -} ->+   IO (Array (ZeroInt,ZeroInt) Double, Int)+laein rightv noinit h wr wi vr vi ldb eps3 smlnum bignum = do+   let (hDim0,hDim1) = Call.sizes2 $ Array.shape h+   let vrDim0 = Call.sizes1 $ MutArray.shape vr+   let viDim0 = Call.sizes1 $ MutArray.shape vi+   let n = hDim0+   let ldh = hDim1+   Call.assert "laein: n == vrDim0" (n == vrDim0)+   Call.assert "laein: n == viDim0" (n == viDim0)+   b <- Call.newArray2 n ldb+   work <- Call.newArray1 n+   evalContT $ do+      rightvPtr <- Call.bool rightv+      noinitPtr <- Call.bool noinit+      nPtr <- Call.cint n+      hPtr <- Call.array h+      ldhPtr <- Call.cint ldh+      wrPtr <- Call.double wr+      wiPtr <- Call.double wi+      vrPtr <- Call.ioarray vr+      viPtr <- Call.ioarray vi+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      workPtr <- Call.ioarray work+      eps3Ptr <- Call.double eps3+      smlnumPtr <- Call.double smlnum+      bignumPtr <- Call.double bignum+      infoPtr <- Call.alloca+      liftIO $ FFI.laein rightvPtr noinitPtr nPtr hPtr ldhPtr wrPtr wiPtr vrPtr viPtr bPtr ldbPtr workPtr eps3Ptr smlnumPtr bignumPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray b+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaev2.f>+laev2 ::+   Double {- ^ a -} ->+   Double {- ^ b -} ->+   Double {- ^ c -} ->+   IO (Double, Double, Double, Double)+laev2 a b c = do+   evalContT $ do+      aPtr <- Call.double a+      bPtr <- Call.double b+      cPtr <- Call.double c+      rt1Ptr <- Call.alloca+      rt2Ptr <- Call.alloca+      cs1Ptr <- Call.alloca+      sn1Ptr <- Call.alloca+      liftIO $ FFI.laev2 aPtr bPtr cPtr rt1Ptr rt2Ptr cs1Ptr sn1Ptr+      liftIO $ pure (,,,)+         <*> peek rt1Ptr+         <*> peek rt2Ptr+         <*> peek cs1Ptr+         <*> peek sn1Ptr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaexc.f>+laexc ::+   Bool {- ^ wantq -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ t -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ q -} ->+   Int {- ^ j1 -} ->+   Int {- ^ n1 -} ->+   Int {- ^ n2 -} ->+   IO (Int)+laexc wantq t q j1 n1 n2 = do+   let (tDim0,tDim1) = Call.sizes2 $ MutArray.shape t+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let n = tDim0+   let ldt = tDim1+   let ldq = qDim1+   Call.assert "laexc: n == qDim0" (n == qDim0)+   work <- Call.newArray1 n+   evalContT $ do+      wantqPtr <- Call.bool wantq+      nPtr <- Call.cint n+      tPtr <- Call.ioarray t+      ldtPtr <- Call.cint ldt+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      j1Ptr <- Call.cint j1+      n1Ptr <- Call.cint n1+      n2Ptr <- Call.cint n2+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.laexc wantqPtr nPtr tPtr ldtPtr qPtr ldqPtr j1Ptr n1Ptr n2Ptr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlag2.f>+lag2 ::+   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->+   Double {- ^ safmin -} ->+   IO (Double, Double, Double, Double, Double)+lag2 a b safmin = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let lda = aDim1+   let ldb = bDim1+   Call.assert "lag2: 2 == aDim0" (2 == aDim0)+   Call.assert "lag2: 2 == bDim0" (2 == bDim0)+   evalContT $ do+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      safminPtr <- Call.double safmin+      scale1Ptr <- Call.alloca+      scale2Ptr <- Call.alloca+      wr1Ptr <- Call.alloca+      wr2Ptr <- Call.alloca+      wiPtr <- Call.alloca+      liftIO $ FFI.lag2 aPtr ldaPtr bPtr ldbPtr safminPtr scale1Ptr scale2Ptr wr1Ptr wr2Ptr wiPtr+      liftIO $ pure (,,,,)+         <*> peek scale1Ptr+         <*> peek scale2Ptr+         <*> peek wr1Ptr+         <*> peek wr2Ptr+         <*> peek wiPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlag2s.f>+lag2s ::+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Int {- ^ ldsa -} ->+   IO (Array (ZeroInt,ZeroInt) Float, Int)+lag2s m a ldsa = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   sa <- Call.newArray2 n ldsa+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      saPtr <- Call.ioarray sa+      ldsaPtr <- Call.cint ldsa+      infoPtr <- Call.alloca+      liftIO $ FFI.lag2s mPtr nPtr aPtr ldaPtr saPtr ldsaPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray sa+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlags2.f>+lags2 ::+   Bool {- ^ upper -} ->+   Double {- ^ a1 -} ->+   Double {- ^ a2 -} ->+   Double {- ^ a3 -} ->+   Double {- ^ b1 -} ->+   Double {- ^ b2 -} ->+   Double {- ^ b3 -} ->+   IO (Double, Double, Double, Double, Double, Double)+lags2 upper a1 a2 a3 b1 b2 b3 = do+   evalContT $ do+      upperPtr <- Call.bool upper+      a1Ptr <- Call.double a1+      a2Ptr <- Call.double a2+      a3Ptr <- Call.double a3+      b1Ptr <- Call.double b1+      b2Ptr <- Call.double b2+      b3Ptr <- Call.double b3+      csuPtr <- Call.alloca+      snuPtr <- Call.alloca+      csvPtr <- Call.alloca+      snvPtr <- Call.alloca+      csqPtr <- Call.alloca+      snqPtr <- Call.alloca+      liftIO $ FFI.lags2 upperPtr a1Ptr a2Ptr a3Ptr b1Ptr b2Ptr b3Ptr csuPtr snuPtr csvPtr snvPtr csqPtr snqPtr+      liftIO $ pure (,,,,,)+         <*> peek csuPtr+         <*> peek snuPtr+         <*> peek csvPtr+         <*> peek snvPtr+         <*> peek csqPtr+         <*> peek snqPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlagtf.f>+lagtf ::+   IOArray ZeroInt Double {- ^ a -} ->+   Double {- ^ lambda -} ->+   IOArray ZeroInt Double {- ^ b -} ->+   IOArray ZeroInt Double {- ^ c -} ->+   Double {- ^ tol -} ->+   IO (Array ZeroInt Double, Array ZeroInt CInt, Int)+lagtf a lambda b c tol = do+   let aDim0 = Call.sizes1 $ MutArray.shape a+   let bDim0 = Call.sizes1 $ MutArray.shape b+   let cDim0 = Call.sizes1 $ MutArray.shape c+   let n = aDim0+   Call.assert "lagtf: n-1 == bDim0" (n-1 == bDim0)+   Call.assert "lagtf: n-1 == cDim0" (n-1 == cDim0)+   d <- Call.newArray1 (n-2)+   in_ <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      lambdaPtr <- Call.double lambda+      bPtr <- Call.ioarray b+      cPtr <- Call.ioarray c+      tolPtr <- Call.double tol+      dPtr <- Call.ioarray d+      in_Ptr <- Call.ioarray in_+      infoPtr <- Call.alloca+      liftIO $ FFI.lagtf nPtr aPtr lambdaPtr bPtr cPtr tolPtr dPtr in_Ptr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray d+         <*> Call.freezeArray in_+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlagtm.f>+lagtm ::+   Char {- ^ trans -} ->+   Double {- ^ alpha -} ->+   Array ZeroInt Double {- ^ dl -} ->+   Array ZeroInt Double {- ^ d -} ->+   Array ZeroInt Double {- ^ du -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ x -} ->+   Double {- ^ beta -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   IO ()+lagtm trans alpha dl d du x beta b = do+   let dlDim0 = Call.sizes1 $ Array.shape dl+   let dDim0 = Call.sizes1 $ Array.shape d+   let duDim0 = Call.sizes1 $ Array.shape du+   let (xDim0,xDim1) = Call.sizes2 $ Array.shape x+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = dDim0+   let nrhs = xDim0+   let ldx = xDim1+   let ldb = bDim1+   Call.assert "lagtm: n-1 == dlDim0" (n-1 == dlDim0)+   Call.assert "lagtm: n-1 == duDim0" (n-1 == duDim0)+   Call.assert "lagtm: nrhs == bDim0" (nrhs == bDim0)+   evalContT $ do+      transPtr <- Call.char trans+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      alphaPtr <- Call.double alpha+      dlPtr <- Call.array dl+      dPtr <- Call.array d+      duPtr <- Call.array du+      xPtr <- Call.array x+      ldxPtr <- Call.cint ldx+      betaPtr <- Call.double beta+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      liftIO $ FFI.lagtm transPtr nPtr nrhsPtr alphaPtr dlPtr dPtr duPtr xPtr ldxPtr betaPtr bPtr ldbPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlagts.f>+lagts ::+   Int {- ^ job -} ->+   Array ZeroInt Double {- ^ a -} ->+   Array ZeroInt Double {- ^ b -} ->+   Array ZeroInt Double {- ^ c -} ->+   Array ZeroInt Double {- ^ d -} ->+   Array ZeroInt CInt {- ^ in_ -} ->+   IOArray ZeroInt Double {- ^ y -} ->+   Double {- ^ tol -} ->+   IO (Double, Int)+lagts job a b c d in_ y tol = do+   let aDim0 = Call.sizes1 $ Array.shape a+   let bDim0 = Call.sizes1 $ Array.shape b+   let cDim0 = Call.sizes1 $ Array.shape c+   let dDim0 = Call.sizes1 $ Array.shape d+   let in_Dim0 = Call.sizes1 $ Array.shape in_+   let yDim0 = Call.sizes1 $ MutArray.shape y+   let n = aDim0+   Call.assert "lagts: n-1 == bDim0" (n-1 == bDim0)+   Call.assert "lagts: n-1 == cDim0" (n-1 == cDim0)+   Call.assert "lagts: n-2 == dDim0" (n-2 == dDim0)+   Call.assert "lagts: n == in_Dim0" (n == in_Dim0)+   Call.assert "lagts: n == yDim0" (n == yDim0)+   evalContT $ do+      jobPtr <- Call.cint job+      nPtr <- Call.cint n+      aPtr <- Call.array a+      bPtr <- Call.array b+      cPtr <- Call.array c+      dPtr <- Call.array d+      in_Ptr <- Call.array in_+      yPtr <- Call.ioarray y+      tolPtr <- Call.double tol+      infoPtr <- Call.alloca+      liftIO $ FFI.lagts jobPtr nPtr aPtr bPtr cPtr dPtr in_Ptr yPtr tolPtr infoPtr+      liftIO $ pure (,)+         <*> peek tolPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlagv2.f>+lagv2 ::+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Double, Double, Double, Double)+lagv2 a b = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let lda = aDim1+   let ldb = bDim1+   Call.assert "lagv2: 2 == aDim0" (2 == aDim0)+   Call.assert "lagv2: 2 == bDim0" (2 == bDim0)+   alphar <- Call.newArray1 2+   alphai <- Call.newArray1 2+   beta <- Call.newArray1 2+   evalContT $ do+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      alpharPtr <- Call.ioarray alphar+      alphaiPtr <- Call.ioarray alphai+      betaPtr <- Call.ioarray beta+      cslPtr <- Call.alloca+      snlPtr <- Call.alloca+      csrPtr <- Call.alloca+      snrPtr <- Call.alloca+      liftIO $ FFI.lagv2 aPtr ldaPtr bPtr ldbPtr alpharPtr alphaiPtr betaPtr cslPtr snlPtr csrPtr snrPtr+      liftIO $ pure (,,,,,,)+         <*> Call.freezeArray alphar+         <*> Call.freezeArray alphai+         <*> Call.freezeArray beta+         <*> peek cslPtr+         <*> peek snlPtr+         <*> peek csrPtr+         <*> peek snrPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlahqr.f>+lahqr ::+   Bool {- ^ wantt -} ->+   Bool {- ^ wantz -} ->+   Int {- ^ ilo -} ->+   Int {- ^ ihi -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ h -} ->+   Int {- ^ iloz -} ->+   Int {- ^ ihiz -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ z -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Int)+lahqr wantt wantz ilo ihi h iloz ihiz z = do+   let (hDim0,hDim1) = Call.sizes2 $ MutArray.shape h+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = hDim0+   let ldh = hDim1+   let ldz = zDim1+   Call.assert "lahqr: n == zDim0" (n == zDim0)+   wr <- Call.newArray1 n+   wi <- Call.newArray1 n+   evalContT $ do+      wanttPtr <- Call.bool wantt+      wantzPtr <- Call.bool wantz+      nPtr <- Call.cint n+      iloPtr <- Call.cint ilo+      ihiPtr <- Call.cint ihi+      hPtr <- Call.ioarray h+      ldhPtr <- Call.cint ldh+      wrPtr <- Call.ioarray wr+      wiPtr <- Call.ioarray wi+      ilozPtr <- Call.cint iloz+      ihizPtr <- Call.cint ihiz+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      infoPtr <- Call.alloca+      liftIO $ FFI.lahqr wanttPtr wantzPtr nPtr iloPtr ihiPtr hPtr ldhPtr wrPtr wiPtr ilozPtr ihizPtr zPtr ldzPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray wr+         <*> Call.freezeArray wi+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlahr2.f>+lahr2 ::+   Int {- ^ n -} ->+   Int {- ^ k -} ->+   Int {- ^ nb -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Int {- ^ ldt -} ->+   Int {- ^ ldy -} ->+   IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double)+lahr2 n k nb a ldt ldy = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let lda = aDim1+   Call.assert "lahr2: n-k+1 == aDim0" (n-k+1 == aDim0)+   tau <- Call.newArray1 nb+   t <- Call.newArray2 nb ldt+   y <- Call.newArray2 nb ldy+   evalContT $ do+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      nbPtr <- Call.cint nb+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      tPtr <- Call.ioarray t+      ldtPtr <- Call.cint ldt+      yPtr <- Call.ioarray y+      ldyPtr <- Call.cint ldy+      liftIO $ FFI.lahr2 nPtr kPtr nbPtr aPtr ldaPtr tauPtr tPtr ldtPtr yPtr ldyPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray tau+         <*> Call.freezeArray t+         <*> Call.freezeArray y++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaic1.f>+laic1 ::+   Int {- ^ job -} ->+   Array ZeroInt Double {- ^ x -} ->+   Double {- ^ sest -} ->+   Array ZeroInt Double {- ^ w -} ->+   Double {- ^ gamma -} ->+   IO (Double, Double, Double)+laic1 job x sest w gamma = do+   let xDim0 = Call.sizes1 $ Array.shape x+   let wDim0 = Call.sizes1 $ Array.shape w+   let j = xDim0+   Call.assert "laic1: j == wDim0" (j == wDim0)+   evalContT $ do+      jobPtr <- Call.cint job+      jPtr <- Call.cint j+      xPtr <- Call.array x+      sestPtr <- Call.double sest+      wPtr <- Call.array w+      gammaPtr <- Call.double gamma+      sestprPtr <- Call.alloca+      sPtr <- Call.alloca+      cPtr <- Call.alloca+      liftIO $ FFI.laic1 jobPtr jPtr xPtr sestPtr wPtr gammaPtr sestprPtr sPtr cPtr+      liftIO $ pure (,,)+         <*> peek sestprPtr+         <*> peek sPtr+         <*> peek cPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaisnan.f>+laisnan ::+   Double {- ^ din1 -} ->+   Double {- ^ din2 -} ->+   IO Bool+laisnan din1 din2 = do+   evalContT $ do+      din1Ptr <- Call.double din1+      din2Ptr <- Call.double din2+      liftIO $ FFI.laisnan din1Ptr din2Ptr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaln2.f>+laln2 ::+   Bool {- ^ ltrans -} ->+   Double {- ^ smin -} ->+   Double {- ^ ca -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Double {- ^ d1 -} ->+   Double {- ^ d2 -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->+   Double {- ^ wr -} ->+   Double {- ^ wi -} ->+   Int {- ^ ldx -} ->+   IO (Array (ZeroInt,ZeroInt) Double, Double, Double, Int)+laln2 ltrans smin ca a d1 d2 b wr wi ldx = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let na = aDim0+   let lda = aDim1+   let nw = bDim0+   let ldb = bDim1+   x <- Call.newArray2 nw ldx+   evalContT $ do+      ltransPtr <- Call.bool ltrans+      naPtr <- Call.cint na+      nwPtr <- Call.cint nw+      sminPtr <- Call.double smin+      caPtr <- Call.double ca+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      d1Ptr <- Call.double d1+      d2Ptr <- Call.double d2+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      wrPtr <- Call.double wr+      wiPtr <- Call.double wi+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      scalePtr <- Call.alloca+      xnormPtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.laln2 ltransPtr naPtr nwPtr sminPtr caPtr aPtr ldaPtr d1Ptr d2Ptr bPtr ldbPtr wrPtr wiPtr xPtr ldxPtr scalePtr xnormPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray x+         <*> peek scalePtr+         <*> peek xnormPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlals0.f>+lals0 ::+   Int {- ^ icompq -} ->+   Int {- ^ nl -} ->+   Int {- ^ nr -} ->+   Int {- ^ sqre -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   Int {- ^ ldbx -} ->+   Array ZeroInt CInt {- ^ perm -} ->+   Int {- ^ givptr -} ->+   Array (ZeroInt,ZeroInt) CInt {- ^ givcol -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ givnum -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ poles -} ->+   Array ZeroInt Double {- ^ difl -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ difr -} ->+   Array ZeroInt Double {- ^ z -} ->+   Double {- ^ c -} ->+   Double {- ^ s -} ->+   IO (Array (ZeroInt,ZeroInt) Double, Int)+lals0 icompq nl nr sqre b ldbx perm givptr givcol givnum poles difl difr z c s = do+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let permDim0 = Call.sizes1 $ Array.shape perm+   let (givcolDim0,givcolDim1) = Call.sizes2 $ Array.shape givcol+   let (givnumDim0,givnumDim1) = Call.sizes2 $ Array.shape givnum+   let (polesDim0,polesDim1) = Call.sizes2 $ Array.shape poles+   let diflDim0 = Call.sizes1 $ Array.shape difl+   let (difrDim0,difrDim1) = Call.sizes2 $ Array.shape difr+   let zDim0 = Call.sizes1 $ Array.shape z+   let nrhs = bDim0+   let ldb = bDim1+   let _n = permDim0+   let ldgcol = givcolDim1+   let ldgnum = givnumDim1+   let k = diflDim0+   Call.assert "lals0: 2 == givcolDim0" (2 == givcolDim0)+   Call.assert "lals0: 2 == givnumDim0" (2 == givnumDim0)+   Call.assert "lals0: 2 == polesDim0" (2 == polesDim0)+   Call.assert "lals0: ldgnum == polesDim1" (ldgnum == polesDim1)+   Call.assert "lals0: 2 == difrDim0" (2 == difrDim0)+   Call.assert "lals0: ldgnum == difrDim1" (ldgnum == difrDim1)+   Call.assert "lals0: k == zDim0" (k == zDim0)+   bx <- Call.newArray2 nrhs ldbx+   work <- Call.newArray1 k+   evalContT $ do+      icompqPtr <- Call.cint icompq+      nlPtr <- Call.cint nl+      nrPtr <- Call.cint nr+      sqrePtr <- Call.cint sqre+      nrhsPtr <- Call.cint nrhs+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      bxPtr <- Call.ioarray bx+      ldbxPtr <- Call.cint ldbx+      permPtr <- Call.array perm+      givptrPtr <- Call.cint givptr+      givcolPtr <- Call.array givcol+      ldgcolPtr <- Call.cint ldgcol+      givnumPtr <- Call.array givnum+      ldgnumPtr <- Call.cint ldgnum+      polesPtr <- Call.array poles+      diflPtr <- Call.array difl+      difrPtr <- Call.array difr+      zPtr <- Call.array z+      kPtr <- Call.cint k+      cPtr <- Call.double c+      sPtr <- Call.double s+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.lals0 icompqPtr nlPtr nrPtr sqrePtr nrhsPtr bPtr ldbPtr bxPtr ldbxPtr permPtr givptrPtr givcolPtr ldgcolPtr givnumPtr ldgnumPtr polesPtr diflPtr difrPtr zPtr kPtr cPtr sPtr workPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray bx+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlalsa.f>+lalsa ::+   Int {- ^ icompq -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   Int {- ^ ldbx -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ u -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ vt -} ->+   Array ZeroInt CInt {- ^ k -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ difl -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ difr -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ z -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ poles -} ->+   Array ZeroInt CInt {- ^ givptr -} ->+   Array (ZeroInt,ZeroInt) CInt {- ^ givcol -} ->+   Array (ZeroInt,ZeroInt) CInt {- ^ perm -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ givnum -} ->+   Array ZeroInt Double {- ^ c -} ->+   Array ZeroInt Double {- ^ s -} ->+   IO (Array (ZeroInt,ZeroInt) Double, Int)+lalsa icompq b ldbx u vt k difl difr z poles givptr givcol perm givnum c s = do+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let (uDim0,uDim1) = Call.sizes2 $ Array.shape u+   let (vtDim0,vtDim1) = Call.sizes2 $ Array.shape vt+   let kDim0 = Call.sizes1 $ Array.shape k+   let (diflDim0,diflDim1) = Call.sizes2 $ Array.shape difl+   let (difrDim0,difrDim1) = Call.sizes2 $ Array.shape difr+   let (zDim0,zDim1) = Call.sizes2 $ Array.shape z+   let (polesDim0,polesDim1) = Call.sizes2 $ Array.shape poles+   let givptrDim0 = Call.sizes1 $ Array.shape givptr+   let (givcolDim0,givcolDim1) = Call.sizes2 $ Array.shape givcol+   let (permDim0,permDim1) = Call.sizes2 $ Array.shape perm+   let (givnumDim0,givnumDim1) = Call.sizes2 $ Array.shape givnum+   let cDim0 = Call.sizes1 $ Array.shape c+   let sDim0 = Call.sizes1 $ Array.shape s+   let nrhs = bDim0+   let ldb = bDim1+   let smlsiz = uDim0+   let ldu = uDim1+   let n = kDim0+   let nlvl = diflDim0+   let ldgcol = givcolDim1+   Call.assert "lalsa: smlsiz+1 == vtDim0" (smlsiz+1 == vtDim0)+   Call.assert "lalsa: ldu == vtDim1" (ldu == vtDim1)+   Call.assert "lalsa: ldu == diflDim1" (ldu == diflDim1)+   Call.assert "lalsa: 2*nlvl == difrDim0" (2*nlvl == difrDim0)+   Call.assert "lalsa: ldu == difrDim1" (ldu == difrDim1)+   Call.assert "lalsa: nlvl == zDim0" (nlvl == zDim0)+   Call.assert "lalsa: ldu == zDim1" (ldu == zDim1)+   Call.assert "lalsa: 2*nlvl == polesDim0" (2*nlvl == polesDim0)+   Call.assert "lalsa: ldu == polesDim1" (ldu == polesDim1)+   Call.assert "lalsa: n == givptrDim0" (n == givptrDim0)+   Call.assert "lalsa: 2*nlvl == givcolDim0" (2*nlvl == givcolDim0)+   Call.assert "lalsa: nlvl == permDim0" (nlvl == permDim0)+   Call.assert "lalsa: ldgcol == permDim1" (ldgcol == permDim1)+   Call.assert "lalsa: 2*nlvl == givnumDim0" (2*nlvl == givnumDim0)+   Call.assert "lalsa: ldu == givnumDim1" (ldu == givnumDim1)+   Call.assert "lalsa: n == cDim0" (n == cDim0)+   Call.assert "lalsa: n == sDim0" (n == sDim0)+   bx <- Call.newArray2 nrhs ldbx+   work <- Call.newArray1 n+   iwork <- Call.newArray1 (3*n)+   evalContT $ do+      icompqPtr <- Call.cint icompq+      smlsizPtr <- Call.cint smlsiz+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      bxPtr <- Call.ioarray bx+      ldbxPtr <- Call.cint ldbx+      uPtr <- Call.array u+      lduPtr <- Call.cint ldu+      vtPtr <- Call.array vt+      kPtr <- Call.array k+      diflPtr <- Call.array difl+      difrPtr <- Call.array difr+      zPtr <- Call.array z+      polesPtr <- Call.array poles+      givptrPtr <- Call.array givptr+      givcolPtr <- Call.array givcol+      ldgcolPtr <- Call.cint ldgcol+      permPtr <- Call.array perm+      givnumPtr <- Call.array givnum+      cPtr <- Call.array c+      sPtr <- Call.array s+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.lalsa icompqPtr smlsizPtr nPtr nrhsPtr bPtr ldbPtr bxPtr ldbxPtr uPtr lduPtr vtPtr kPtr diflPtr difrPtr zPtr polesPtr givptrPtr givcolPtr ldgcolPtr permPtr givnumPtr cPtr sPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray bx+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlalsd.f>+lalsd ::+   Char {- ^ uplo -} ->+   Int {- ^ smlsiz -} ->+   IOArray ZeroInt Double {- ^ d -} ->+   IOArray ZeroInt Double {- ^ e -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   Double {- ^ rcond -} ->+   Int {- ^ workSize -} ->+   Int {- ^ iworkSize -} ->+   IO (Int, Int)+lalsd uplo smlsiz d e b rcond workSize iworkSize = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = dDim0+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "lalsd: n-1 == eDim0" (n-1 == eDim0)+   work <- Call.newArray1 workSize+   iwork <- Call.newArray1 iworkSize+   evalContT $ do+      uploPtr <- Call.char uplo+      smlsizPtr <- Call.cint smlsiz+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      rcondPtr <- Call.double rcond+      rankPtr <- Call.alloca+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.lalsd uploPtr smlsizPtr nPtr nrhsPtr dPtr ePtr bPtr ldbPtr rcondPtr rankPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,)+         <*> fmap fromIntegral (peek rankPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlamrg.f>+lamrg ::+   Int {- ^ n1 -} ->+   Int {- ^ n2 -} ->+   Array ZeroInt Double {- ^ a -} ->+   Int {- ^ dtrd1 -} ->+   Int {- ^ dtrd2 -} ->+   IO (Array ZeroInt CInt)+lamrg n1 n2 a dtrd1 dtrd2 = do+   let aDim0 = Call.sizes1 $ Array.shape a+   Call.assert "lamrg: n1+n2 == aDim0" (n1+n2 == aDim0)+   index <- Call.newArray1 (n1+n2)+   evalContT $ do+      n1Ptr <- Call.cint n1+      n2Ptr <- Call.cint n2+      aPtr <- Call.array a+      dtrd1Ptr <- Call.cint dtrd1+      dtrd2Ptr <- Call.cint dtrd2+      indexPtr <- Call.ioarray index+      liftIO $ FFI.lamrg n1Ptr n2Ptr aPtr dtrd1Ptr dtrd2Ptr indexPtr+      liftIO $ Call.freezeArray index++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaneg.f>+laneg ::+   Array ZeroInt Double {- ^ d -} ->+   Array ZeroInt Double {- ^ lld -} ->+   Double {- ^ sigma -} ->+   Double {- ^ pivmin -} ->+   Int {- ^ r -} ->+   IO CInt+laneg d lld sigma pivmin r = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let lldDim0 = Call.sizes1 $ Array.shape lld+   let n = dDim0+   Call.assert "laneg: n-1 == lldDim0" (n-1 == lldDim0)+   evalContT $ do+      nPtr <- Call.cint n+      dPtr <- Call.array d+      lldPtr <- Call.array lld+      sigmaPtr <- Call.double sigma+      pivminPtr <- Call.double pivmin+      rPtr <- Call.cint r+      liftIO $ FFI.laneg nPtr dPtr lldPtr sigmaPtr pivminPtr rPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlangb.f>+langb ::+   Char {- ^ norm -} ->+   Int {- ^ kl -} ->+   Int {- ^ ku -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ ab -} ->+   Int {- ^ lwork -} ->+   IO Double+langb norm kl ku ab lwork = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let n = abDim0+   let ldab = abDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      normPtr <- Call.char norm+      nPtr <- Call.cint n+      klPtr <- Call.cint kl+      kuPtr <- Call.cint ku+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      workPtr <- Call.ioarray work+      liftIO $ FFI.langb normPtr nPtr klPtr kuPtr abPtr ldabPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlange.f>+lange ::+   Char {- ^ norm -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO Double+lange norm m a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      normPtr <- Call.char norm+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      workPtr <- Call.ioarray work+      liftIO $ FFI.lange normPtr mPtr nPtr aPtr ldaPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlangt.f>+langt ::+   Char {- ^ norm -} ->+   Array ZeroInt Double {- ^ dl -} ->+   Array ZeroInt Double {- ^ d -} ->+   Array ZeroInt Double {- ^ du -} ->+   IO Double+langt norm dl d du = do+   let dlDim0 = Call.sizes1 $ Array.shape dl+   let dDim0 = Call.sizes1 $ Array.shape d+   let duDim0 = Call.sizes1 $ Array.shape du+   let n = dDim0+   Call.assert "langt: n-1 == dlDim0" (n-1 == dlDim0)+   Call.assert "langt: n-1 == duDim0" (n-1 == duDim0)+   evalContT $ do+      normPtr <- Call.char norm+      nPtr <- Call.cint n+      dlPtr <- Call.array dl+      dPtr <- Call.array d+      duPtr <- Call.array du+      liftIO $ FFI.langt normPtr nPtr dlPtr dPtr duPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlanhs.f>+lanhs ::+   Char {- ^ norm -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO Double+lanhs norm a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      normPtr <- Call.char norm+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      workPtr <- Call.ioarray work+      liftIO $ FFI.lanhs normPtr nPtr aPtr ldaPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlansb.f>+lansb ::+   Char {- ^ norm -} ->+   Char {- ^ uplo -} ->+   Int {- ^ k -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ ab -} ->+   Int {- ^ lwork -} ->+   IO Double+lansb norm uplo k ab lwork = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let n = abDim0+   let ldab = abDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      normPtr <- Call.char norm+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      workPtr <- Call.ioarray work+      liftIO $ FFI.lansb normPtr uploPtr nPtr kPtr abPtr ldabPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlansf.f>+lansf ::+   Char {- ^ norm -} ->+   Char {- ^ transr -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Array ZeroInt Double {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO Double+lansf norm transr uplo n a lwork = do+   let aDim0 = Call.sizes1 $ Array.shape a+   Call.assert "lansf: n*(n+1)`div`2 == aDim0" (n*(n+1)`div`2 == aDim0)+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      normPtr <- Call.char norm+      transrPtr <- Call.char transr+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.array a+      workPtr <- Call.ioarray work+      liftIO $ FFI.lansf normPtr transrPtr uploPtr nPtr aPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlansp.f>+lansp ::+   Char {- ^ norm -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Array ZeroInt Double {- ^ ap -} ->+   Int {- ^ lwork -} ->+   IO Double+lansp norm uplo n ap lwork = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   Call.assert "lansp: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      normPtr <- Call.char norm+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.array ap+      workPtr <- Call.ioarray work+      liftIO $ FFI.lansp normPtr uploPtr nPtr apPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlanst.f>+lanst ::+   Char {- ^ norm -} ->+   Array ZeroInt Double {- ^ d -} ->+   Array ZeroInt Double {- ^ e -} ->+   IO Double+lanst norm d e = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let eDim0 = Call.sizes1 $ Array.shape e+   let n = dDim0+   Call.assert "lanst: n-1 == eDim0" (n-1 == eDim0)+   evalContT $ do+      normPtr <- Call.char norm+      nPtr <- Call.cint n+      dPtr <- Call.array d+      ePtr <- Call.array e+      liftIO $ FFI.lanst normPtr nPtr dPtr ePtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlansy.f>+lansy ::+   Char {- ^ norm -} ->+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO Double+lansy norm uplo a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      normPtr <- Call.char norm+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      workPtr <- Call.ioarray work+      liftIO $ FFI.lansy normPtr uploPtr nPtr aPtr ldaPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlantb.f>+lantb ::+   Char {- ^ norm -} ->+   Char {- ^ uplo -} ->+   Char {- ^ diag -} ->+   Int {- ^ k -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ ab -} ->+   Int {- ^ lwork -} ->+   IO Double+lantb norm uplo diag k ab lwork = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let n = abDim0+   let ldab = abDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      normPtr <- Call.char norm+      uploPtr <- Call.char uplo+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      workPtr <- Call.ioarray work+      liftIO $ FFI.lantb normPtr uploPtr diagPtr nPtr kPtr abPtr ldabPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlantp.f>+lantp ::+   Char {- ^ norm -} ->+   Char {- ^ uplo -} ->+   Char {- ^ diag -} ->+   Int {- ^ n -} ->+   Array ZeroInt Double {- ^ ap -} ->+   Int {- ^ lwork -} ->+   IO Double+lantp norm uplo diag n ap lwork = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   Call.assert "lantp: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      normPtr <- Call.char norm+      uploPtr <- Call.char uplo+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      apPtr <- Call.array ap+      workPtr <- Call.ioarray work+      liftIO $ FFI.lantp normPtr uploPtr diagPtr nPtr apPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlantr.f>+lantr ::+   Char {- ^ norm -} ->+   Char {- ^ uplo -} ->+   Char {- ^ diag -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO Double+lantr norm uplo diag m a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      normPtr <- Call.char norm+      uploPtr <- Call.char uplo+      diagPtr <- Call.char diag+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      workPtr <- Call.ioarray work+      liftIO $ FFI.lantr normPtr uploPtr diagPtr mPtr nPtr aPtr ldaPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlanv2.f>+lanv2 ::+   Double {- ^ a -} ->+   Double {- ^ b -} ->+   Double {- ^ c -} ->+   Double {- ^ d -} ->+   IO (Double, Double, Double, Double, Double, Double, Double, Double, Double, Double)+lanv2 a b c d = do+   evalContT $ do+      aPtr <- Call.double a+      bPtr <- Call.double b+      cPtr <- Call.double c+      dPtr <- Call.double d+      rt1rPtr <- Call.alloca+      rt1iPtr <- Call.alloca+      rt2rPtr <- Call.alloca+      rt2iPtr <- Call.alloca+      csPtr <- Call.alloca+      snPtr <- Call.alloca+      liftIO $ FFI.lanv2 aPtr bPtr cPtr dPtr rt1rPtr rt1iPtr rt2rPtr rt2iPtr csPtr snPtr+      liftIO $ pure (,,,,,,,,,)+         <*> peek aPtr+         <*> peek bPtr+         <*> peek cPtr+         <*> peek dPtr+         <*> peek rt1rPtr+         <*> peek rt1iPtr+         <*> peek rt2rPtr+         <*> peek rt2iPtr+         <*> peek csPtr+         <*> peek snPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlapll.f>+lapll ::+   Int {- ^ n -} ->+   IOArray ZeroInt Double {- ^ x -} ->+   Int {- ^ incx -} ->+   IOArray ZeroInt Double {- ^ y -} ->+   Int {- ^ incy -} ->+   IO (Double)+lapll n x incx y incy = do+   let xDim0 = Call.sizes1 $ MutArray.shape x+   let yDim0 = Call.sizes1 $ MutArray.shape y+   let _xSize = xDim0+   let _ySize = yDim0+   evalContT $ do+      nPtr <- Call.cint n+      xPtr <- Call.ioarray x+      incxPtr <- Call.cint incx+      yPtr <- Call.ioarray y+      incyPtr <- Call.cint incy+      ssminPtr <- Call.alloca+      liftIO $ FFI.lapll nPtr xPtr incxPtr yPtr incyPtr ssminPtr+      liftIO $ peek ssminPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlapmr.f>+lapmr ::+   Bool {- ^ forwrd -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ x -} ->+   IOArray ZeroInt CInt {- ^ k -} ->+   IO ()+lapmr forwrd x k = do+   let (xDim0,xDim1) = Call.sizes2 $ MutArray.shape x+   let kDim0 = Call.sizes1 $ MutArray.shape k+   let n = xDim0+   let ldx = xDim1+   let m = kDim0+   evalContT $ do+      forwrdPtr <- Call.bool forwrd+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      kPtr <- Call.ioarray k+      liftIO $ FFI.lapmr forwrdPtr mPtr nPtr xPtr ldxPtr kPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlapmt.f>+lapmt ::+   Bool {- ^ forwrd -} ->+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ x -} ->+   IOArray ZeroInt CInt {- ^ k -} ->+   IO ()+lapmt forwrd m x k = do+   let (xDim0,xDim1) = Call.sizes2 $ MutArray.shape x+   let kDim0 = Call.sizes1 $ MutArray.shape k+   let n = xDim0+   let ldx = xDim1+   Call.assert "lapmt: n == kDim0" (n == kDim0)+   evalContT $ do+      forwrdPtr <- Call.bool forwrd+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      kPtr <- Call.ioarray k+      liftIO $ FFI.lapmt forwrdPtr mPtr nPtr xPtr ldxPtr kPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlapy2.f>+lapy2 ::+   Double {- ^ x -} ->+   Double {- ^ y -} ->+   IO Double+lapy2 x y = do+   evalContT $ do+      xPtr <- Call.double x+      yPtr <- Call.double y+      liftIO $ FFI.lapy2 xPtr yPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlapy3.f>+lapy3 ::+   Double {- ^ x -} ->+   Double {- ^ y -} ->+   Double {- ^ z -} ->+   IO Double+lapy3 x y z = do+   evalContT $ do+      xPtr <- Call.double x+      yPtr <- Call.double y+      zPtr <- Call.double z+      liftIO $ FFI.lapy3 xPtr yPtr zPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaqgb.f>+laqgb ::+   Int {- ^ kl -} ->+   Int {- ^ ku -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ ab -} ->+   Array ZeroInt Double {- ^ r -} ->+   Array ZeroInt Double {- ^ c -} ->+   Double {- ^ rowcnd -} ->+   Double {- ^ colcnd -} ->+   Double {- ^ amax -} ->+   IO (Char)+laqgb kl ku ab r c rowcnd colcnd amax = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let rDim0 = Call.sizes1 $ Array.shape r+   let cDim0 = Call.sizes1 $ Array.shape c+   let n = abDim0+   let ldab = abDim1+   let m = rDim0+   Call.assert "laqgb: n == cDim0" (n == cDim0)+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      klPtr <- Call.cint kl+      kuPtr <- Call.cint ku+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      rPtr <- Call.array r+      cPtr <- Call.array c+      rowcndPtr <- Call.double rowcnd+      colcndPtr <- Call.double colcnd+      amaxPtr <- Call.double amax+      equedPtr <- Call.alloca+      liftIO $ FFI.laqgb mPtr nPtr klPtr kuPtr abPtr ldabPtr rPtr cPtr rowcndPtr colcndPtr amaxPtr equedPtr+      liftIO $ fmap castCCharToChar (peek equedPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaqge.f>+laqge ::+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Array ZeroInt Double {- ^ r -} ->+   Array ZeroInt Double {- ^ c -} ->+   Double {- ^ rowcnd -} ->+   Double {- ^ colcnd -} ->+   Double {- ^ amax -} ->+   IO (Char)+laqge a r c rowcnd colcnd amax = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let rDim0 = Call.sizes1 $ Array.shape r+   let cDim0 = Call.sizes1 $ Array.shape c+   let n = aDim0+   let lda = aDim1+   let m = rDim0+   Call.assert "laqge: n == cDim0" (n == cDim0)+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      rPtr <- Call.array r+      cPtr <- Call.array c+      rowcndPtr <- Call.double rowcnd+      colcndPtr <- Call.double colcnd+      amaxPtr <- Call.double amax+      equedPtr <- Call.alloca+      liftIO $ FFI.laqge mPtr nPtr aPtr ldaPtr rPtr cPtr rowcndPtr colcndPtr amaxPtr equedPtr+      liftIO $ fmap castCCharToChar (peek equedPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaqp2.f>+laqp2 ::+   Int {- ^ m -} ->+   Int {- ^ offset -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IOArray ZeroInt CInt {- ^ jpvt -} ->+   IOArray ZeroInt Double {- ^ vn1 -} ->+   IOArray ZeroInt Double {- ^ vn2 -} ->+   IO (Array ZeroInt Double)+laqp2 m offset a jpvt vn1 vn2 = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let jpvtDim0 = Call.sizes1 $ MutArray.shape jpvt+   let vn1Dim0 = Call.sizes1 $ MutArray.shape vn1+   let vn2Dim0 = Call.sizes1 $ MutArray.shape vn2+   let n = aDim0+   let lda = aDim1+   Call.assert "laqp2: n == jpvtDim0" (n == jpvtDim0)+   Call.assert "laqp2: n == vn1Dim0" (n == vn1Dim0)+   Call.assert "laqp2: n == vn2Dim0" (n == vn2Dim0)+   tau <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 n+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      offsetPtr <- Call.cint offset+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      jpvtPtr <- Call.ioarray jpvt+      tauPtr <- Call.ioarray tau+      vn1Ptr <- Call.ioarray vn1+      vn2Ptr <- Call.ioarray vn2+      workPtr <- Call.ioarray work+      liftIO $ FFI.laqp2 mPtr nPtr offsetPtr aPtr ldaPtr jpvtPtr tauPtr vn1Ptr vn2Ptr workPtr+      liftIO $ Call.freezeArray tau++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaqps.f>+laqps ::+   Int {- ^ m -} ->+   Int {- ^ offset -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IOArray ZeroInt CInt {- ^ jpvt -} ->+   Int {- ^ kb -} ->+   IOArray ZeroInt Double {- ^ vn1 -} ->+   IOArray ZeroInt Double {- ^ vn2 -} ->+   IOArray ZeroInt Double {- ^ auxv -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ f -} ->+   IO (Int, Array ZeroInt Double)+laqps m offset a jpvt kb vn1 vn2 auxv f = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let jpvtDim0 = Call.sizes1 $ MutArray.shape jpvt+   let vn1Dim0 = Call.sizes1 $ MutArray.shape vn1+   let vn2Dim0 = Call.sizes1 $ MutArray.shape vn2+   let auxvDim0 = Call.sizes1 $ MutArray.shape auxv+   let (fDim0,fDim1) = Call.sizes2 $ MutArray.shape f+   let n = aDim0+   let lda = aDim1+   let nb = auxvDim0+   let ldf = fDim1+   Call.assert "laqps: n == jpvtDim0" (n == jpvtDim0)+   Call.assert "laqps: n == vn1Dim0" (n == vn1Dim0)+   Call.assert "laqps: n == vn2Dim0" (n == vn2Dim0)+   Call.assert "laqps: nb == fDim0" (nb == fDim0)+   tau <- Call.newArray1 kb+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      offsetPtr <- Call.cint offset+      nbPtr <- Call.cint nb+      kbPtr <- Call.alloca+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      jpvtPtr <- Call.ioarray jpvt+      tauPtr <- Call.ioarray tau+      vn1Ptr <- Call.ioarray vn1+      vn2Ptr <- Call.ioarray vn2+      auxvPtr <- Call.ioarray auxv+      fPtr <- Call.ioarray f+      ldfPtr <- Call.cint ldf+      liftIO $ FFI.laqps mPtr nPtr offsetPtr nbPtr kbPtr aPtr ldaPtr jpvtPtr tauPtr vn1Ptr vn2Ptr auxvPtr fPtr ldfPtr+      liftIO $ pure (,)+         <*> fmap fromIntegral (peek kbPtr)+         <*> Call.freezeArray tau++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaqr0.f>+laqr0 ::+   Bool {- ^ wantt -} ->+   Bool {- ^ wantz -} ->+   Int {- ^ ilo -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ h -} ->+   Int {- ^ iloz -} ->+   Int {- ^ ihiz -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ z -} ->+   Int {- ^ workSize -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Int)+laqr0 wantt wantz ilo h iloz ihiz z workSize lwork = do+   let (hDim0,hDim1) = Call.sizes2 $ MutArray.shape h+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = hDim0+   let ldh = hDim1+   let ihi = zDim0+   let ldz = zDim1+   wr <- Call.newArray1 ihi+   wi <- Call.newArray1 ihi+   work <- Call.newArray1 workSize+   evalContT $ do+      wanttPtr <- Call.bool wantt+      wantzPtr <- Call.bool wantz+      nPtr <- Call.cint n+      iloPtr <- Call.cint ilo+      ihiPtr <- Call.cint ihi+      hPtr <- Call.ioarray h+      ldhPtr <- Call.cint ldh+      wrPtr <- Call.ioarray wr+      wiPtr <- Call.ioarray wi+      ilozPtr <- Call.cint iloz+      ihizPtr <- Call.cint ihiz+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.laqr0 wanttPtr wantzPtr nPtr iloPtr ihiPtr hPtr ldhPtr wrPtr wiPtr ilozPtr ihizPtr zPtr ldzPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray wr+         <*> Call.freezeArray wi+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaqr1.f>+laqr1 ::+   Array (ZeroInt,ZeroInt) Double {- ^ h -} ->+   Double {- ^ sr1 -} ->+   Double {- ^ si1 -} ->+   Double {- ^ sr2 -} ->+   Double {- ^ si2 -} ->+   IO (Array ZeroInt Double)+laqr1 h sr1 si1 sr2 si2 = do+   let (hDim0,hDim1) = Call.sizes2 $ Array.shape h+   let n = hDim0+   let ldh = hDim1+   v <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      hPtr <- Call.array h+      ldhPtr <- Call.cint ldh+      sr1Ptr <- Call.double sr1+      si1Ptr <- Call.double si1+      sr2Ptr <- Call.double sr2+      si2Ptr <- Call.double si2+      vPtr <- Call.ioarray v+      liftIO $ FFI.laqr1 nPtr hPtr ldhPtr sr1Ptr si1Ptr sr2Ptr si2Ptr vPtr+      liftIO $ Call.freezeArray v++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaqr2.f>+laqr2 ::+   Bool {- ^ wantt -} ->+   Bool {- ^ wantz -} ->+   Int {- ^ ktop -} ->+   Int {- ^ kbot -} ->+   Int {- ^ nw -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ h -} ->+   Int {- ^ iloz -} ->+   Int {- ^ ihiz -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ z -} ->+   Int {- ^ ldv -} ->+   Int {- ^ nh -} ->+   Int {- ^ ldt -} ->+   Int {- ^ nv -} ->+   Int {- ^ ldwv -} ->+   Int {- ^ lwork -} ->+   IO (Int, Int, Array ZeroInt Double, Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double)+laqr2 wantt wantz ktop kbot nw h iloz ihiz z ldv nh ldt nv ldwv lwork = do+   let (hDim0,hDim1) = Call.sizes2 $ MutArray.shape h+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = hDim0+   let ldh = hDim1+   let ldz = zDim1+   Call.assert "laqr2: n == zDim0" (n == zDim0)+   sr <- Call.newArray1 kbot+   si <- Call.newArray1 kbot+   v <- Call.newArray2 nw ldv+   t <- Call.newArray2 nw ldt+   wv <- Call.newArray2 nw ldwv+   work <- Call.newArray1 lwork+   evalContT $ do+      wanttPtr <- Call.bool wantt+      wantzPtr <- Call.bool wantz+      nPtr <- Call.cint n+      ktopPtr <- Call.cint ktop+      kbotPtr <- Call.cint kbot+      nwPtr <- Call.cint nw+      hPtr <- Call.ioarray h+      ldhPtr <- Call.cint ldh+      ilozPtr <- Call.cint iloz+      ihizPtr <- Call.cint ihiz+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      nsPtr <- Call.alloca+      ndPtr <- Call.alloca+      srPtr <- Call.ioarray sr+      siPtr <- Call.ioarray si+      vPtr <- Call.ioarray v+      ldvPtr <- Call.cint ldv+      nhPtr <- Call.cint nh+      tPtr <- Call.ioarray t+      ldtPtr <- Call.cint ldt+      nvPtr <- Call.cint nv+      wvPtr <- Call.ioarray wv+      ldwvPtr <- Call.cint ldwv+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      liftIO $ FFI.laqr2 wanttPtr wantzPtr nPtr ktopPtr kbotPtr nwPtr hPtr ldhPtr ilozPtr ihizPtr zPtr ldzPtr nsPtr ndPtr srPtr siPtr vPtr ldvPtr nhPtr tPtr ldtPtr nvPtr wvPtr ldwvPtr workPtr lworkPtr+      liftIO $ pure (,,,,,,)+         <*> fmap fromIntegral (peek nsPtr)+         <*> fmap fromIntegral (peek ndPtr)+         <*> Call.freezeArray sr+         <*> Call.freezeArray si+         <*> Call.freezeArray v+         <*> Call.freezeArray t+         <*> Call.freezeArray wv++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaqr3.f>+laqr3 ::+   Bool {- ^ wantt -} ->+   Bool {- ^ wantz -} ->+   Int {- ^ ktop -} ->+   Int {- ^ kbot -} ->+   Int {- ^ nw -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ h -} ->+   Int {- ^ iloz -} ->+   Int {- ^ ihiz -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ z -} ->+   Int {- ^ ldv -} ->+   Int {- ^ nh -} ->+   Int {- ^ ldt -} ->+   Int {- ^ nv -} ->+   Int {- ^ ldwv -} ->+   Int {- ^ lwork -} ->+   IO (Int, Int, Array ZeroInt Double, Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double)+laqr3 wantt wantz ktop kbot nw h iloz ihiz z ldv nh ldt nv ldwv lwork = do+   let (hDim0,hDim1) = Call.sizes2 $ MutArray.shape h+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = hDim0+   let ldh = hDim1+   let ldz = zDim1+   Call.assert "laqr3: n == zDim0" (n == zDim0)+   sr <- Call.newArray1 kbot+   si <- Call.newArray1 kbot+   v <- Call.newArray2 nw ldv+   t <- Call.newArray2 nw ldt+   wv <- Call.newArray2 nw ldwv+   work <- Call.newArray1 lwork+   evalContT $ do+      wanttPtr <- Call.bool wantt+      wantzPtr <- Call.bool wantz+      nPtr <- Call.cint n+      ktopPtr <- Call.cint ktop+      kbotPtr <- Call.cint kbot+      nwPtr <- Call.cint nw+      hPtr <- Call.ioarray h+      ldhPtr <- Call.cint ldh+      ilozPtr <- Call.cint iloz+      ihizPtr <- Call.cint ihiz+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      nsPtr <- Call.alloca+      ndPtr <- Call.alloca+      srPtr <- Call.ioarray sr+      siPtr <- Call.ioarray si+      vPtr <- Call.ioarray v+      ldvPtr <- Call.cint ldv+      nhPtr <- Call.cint nh+      tPtr <- Call.ioarray t+      ldtPtr <- Call.cint ldt+      nvPtr <- Call.cint nv+      wvPtr <- Call.ioarray wv+      ldwvPtr <- Call.cint ldwv+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      liftIO $ FFI.laqr3 wanttPtr wantzPtr nPtr ktopPtr kbotPtr nwPtr hPtr ldhPtr ilozPtr ihizPtr zPtr ldzPtr nsPtr ndPtr srPtr siPtr vPtr ldvPtr nhPtr tPtr ldtPtr nvPtr wvPtr ldwvPtr workPtr lworkPtr+      liftIO $ pure (,,,,,,)+         <*> fmap fromIntegral (peek nsPtr)+         <*> fmap fromIntegral (peek ndPtr)+         <*> Call.freezeArray sr+         <*> Call.freezeArray si+         <*> Call.freezeArray v+         <*> Call.freezeArray t+         <*> Call.freezeArray wv++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaqr4.f>+laqr4 ::+   Bool {- ^ wantt -} ->+   Bool {- ^ wantz -} ->+   Int {- ^ ilo -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ h -} ->+   Int {- ^ iloz -} ->+   Int {- ^ ihiz -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ z -} ->+   Int {- ^ workSize -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Int)+laqr4 wantt wantz ilo h iloz ihiz z workSize lwork = do+   let (hDim0,hDim1) = Call.sizes2 $ MutArray.shape h+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = hDim0+   let ldh = hDim1+   let ihi = zDim0+   let ldz = zDim1+   wr <- Call.newArray1 ihi+   wi <- Call.newArray1 ihi+   work <- Call.newArray1 workSize+   evalContT $ do+      wanttPtr <- Call.bool wantt+      wantzPtr <- Call.bool wantz+      nPtr <- Call.cint n+      iloPtr <- Call.cint ilo+      ihiPtr <- Call.cint ihi+      hPtr <- Call.ioarray h+      ldhPtr <- Call.cint ldh+      wrPtr <- Call.ioarray wr+      wiPtr <- Call.ioarray wi+      ilozPtr <- Call.cint iloz+      ihizPtr <- Call.cint ihiz+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.laqr4 wanttPtr wantzPtr nPtr iloPtr ihiPtr hPtr ldhPtr wrPtr wiPtr ilozPtr ihizPtr zPtr ldzPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray wr+         <*> Call.freezeArray wi+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaqr5.f>+laqr5 ::+   Bool {- ^ wantt -} ->+   Bool {- ^ wantz -} ->+   Int {- ^ kacc22 -} ->+   Int {- ^ ktop -} ->+   Int {- ^ kbot -} ->+   IOArray ZeroInt Double {- ^ sr -} ->+   IOArray ZeroInt Double {- ^ si -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ h -} ->+   Int {- ^ iloz -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ z -} ->+   Int {- ^ ldv -} ->+   Int {- ^ ldu -} ->+   Int {- ^ nv -} ->+   Int {- ^ ldwv -} ->+   Int {- ^ nh -} ->+   Int {- ^ ldwh -} ->+   IO (Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double)+laqr5 wantt wantz kacc22 ktop kbot sr si h iloz z ldv ldu nv ldwv nh ldwh = do+   let srDim0 = Call.sizes1 $ MutArray.shape sr+   let siDim0 = Call.sizes1 $ MutArray.shape si+   let (hDim0,hDim1) = Call.sizes2 $ MutArray.shape h+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let nshfts = srDim0+   let n = hDim0+   let ldh = hDim1+   let ihiz = zDim0+   let ldz = zDim1+   Call.assert "laqr5: nshfts == siDim0" (nshfts == siDim0)+   v <- Call.newArray2 (nshfts`div`2) ldv+   u <- Call.newArray2 (3*nshfts-3) ldu+   wv <- Call.newArray2 (3*nshfts-3) ldwv+   wh <- Call.newArray2 nh ldwh+   evalContT $ do+      wanttPtr <- Call.bool wantt+      wantzPtr <- Call.bool wantz+      kacc22Ptr <- Call.cint kacc22+      nPtr <- Call.cint n+      ktopPtr <- Call.cint ktop+      kbotPtr <- Call.cint kbot+      nshftsPtr <- Call.cint nshfts+      srPtr <- Call.ioarray sr+      siPtr <- Call.ioarray si+      hPtr <- Call.ioarray h+      ldhPtr <- Call.cint ldh+      ilozPtr <- Call.cint iloz+      ihizPtr <- Call.cint ihiz+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      vPtr <- Call.ioarray v+      ldvPtr <- Call.cint ldv+      uPtr <- Call.ioarray u+      lduPtr <- Call.cint ldu+      nvPtr <- Call.cint nv+      wvPtr <- Call.ioarray wv+      ldwvPtr <- Call.cint ldwv+      nhPtr <- Call.cint nh+      whPtr <- Call.ioarray wh+      ldwhPtr <- Call.cint ldwh+      liftIO $ FFI.laqr5 wanttPtr wantzPtr kacc22Ptr nPtr ktopPtr kbotPtr nshftsPtr srPtr siPtr hPtr ldhPtr ilozPtr ihizPtr zPtr ldzPtr vPtr ldvPtr uPtr lduPtr nvPtr wvPtr ldwvPtr nhPtr whPtr ldwhPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray v+         <*> Call.freezeArray u+         <*> Call.freezeArray wv+         <*> Call.freezeArray wh++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaqsb.f>+laqsb ::+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ ab -} ->+   Array ZeroInt Double {- ^ s -} ->+   Double {- ^ scond -} ->+   Double {- ^ amax -} ->+   IO (Char)+laqsb uplo kd ab s scond amax = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let sDim0 = Call.sizes1 $ Array.shape s+   let n = abDim0+   let ldab = abDim1+   Call.assert "laqsb: n == sDim0" (n == sDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      sPtr <- Call.array s+      scondPtr <- Call.double scond+      amaxPtr <- Call.double amax+      equedPtr <- Call.alloca+      liftIO $ FFI.laqsb uploPtr nPtr kdPtr abPtr ldabPtr sPtr scondPtr amaxPtr equedPtr+      liftIO $ fmap castCCharToChar (peek equedPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaqsp.f>+laqsp ::+   Char {- ^ uplo -} ->+   IOArray ZeroInt Double {- ^ ap -} ->+   Array ZeroInt Double {- ^ s -} ->+   Double {- ^ scond -} ->+   Double {- ^ amax -} ->+   IO (Char)+laqsp uplo ap s scond amax = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   let sDim0 = Call.sizes1 $ Array.shape s+   let n = sDim0+   Call.assert "laqsp: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      sPtr <- Call.array s+      scondPtr <- Call.double scond+      amaxPtr <- Call.double amax+      equedPtr <- Call.alloca+      liftIO $ FFI.laqsp uploPtr nPtr apPtr sPtr scondPtr amaxPtr equedPtr+      liftIO $ fmap castCCharToChar (peek equedPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaqsy.f>+laqsy ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Array ZeroInt Double {- ^ s -} ->+   Double {- ^ scond -} ->+   Double {- ^ amax -} ->+   IO (Char)+laqsy uplo a s scond amax = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let sDim0 = Call.sizes1 $ Array.shape s+   let n = aDim0+   let lda = aDim1+   Call.assert "laqsy: n == sDim0" (n == sDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      sPtr <- Call.array s+      scondPtr <- Call.double scond+      amaxPtr <- Call.double amax+      equedPtr <- Call.alloca+      liftIO $ FFI.laqsy uploPtr nPtr aPtr ldaPtr sPtr scondPtr amaxPtr equedPtr+      liftIO $ fmap castCCharToChar (peek equedPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaqtr.f>+laqtr ::+   Bool {- ^ ltran -} ->+   Bool {- ^ lreal -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ t -} ->+   Array ZeroInt Double {- ^ b -} ->+   Double {- ^ w -} ->+   IOArray ZeroInt Double {- ^ x -} ->+   IO (Double, Int)+laqtr ltran lreal t b w x = do+   let (tDim0,tDim1) = Call.sizes2 $ Array.shape t+   let bDim0 = Call.sizes1 $ Array.shape b+   let xDim0 = Call.sizes1 $ MutArray.shape x+   let n = tDim0+   let ldt = tDim1+   Call.assert "laqtr: n == bDim0" (n == bDim0)+   Call.assert "laqtr: 2*n == xDim0" (2*n == xDim0)+   work <- Call.newArray1 n+   evalContT $ do+      ltranPtr <- Call.bool ltran+      lrealPtr <- Call.bool lreal+      nPtr <- Call.cint n+      tPtr <- Call.array t+      ldtPtr <- Call.cint ldt+      bPtr <- Call.array b+      wPtr <- Call.double w+      scalePtr <- Call.alloca+      xPtr <- Call.ioarray x+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.laqtr ltranPtr lrealPtr nPtr tPtr ldtPtr bPtr wPtr scalePtr xPtr workPtr infoPtr+      liftIO $ pure (,)+         <*> peek scalePtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlar1v.f>+lar1v ::+   Int {- ^ b1 -} ->+   Int {- ^ bn -} ->+   Double {- ^ lambda -} ->+   Array ZeroInt Double {- ^ d -} ->+   Array ZeroInt Double {- ^ l -} ->+   Array ZeroInt Double {- ^ ld -} ->+   Array ZeroInt Double {- ^ lld -} ->+   Double {- ^ pivmin -} ->+   Double {- ^ gaptol -} ->+   IOArray ZeroInt Double {- ^ z -} ->+   Bool {- ^ wantnc -} ->+   Int {- ^ r -} ->+   IO (Int, Double, Double, Int, Array ZeroInt CInt, Double, Double, Double)+lar1v b1 bn lambda d l ld lld pivmin gaptol z wantnc r = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let lDim0 = Call.sizes1 $ Array.shape l+   let ldDim0 = Call.sizes1 $ Array.shape ld+   let lldDim0 = Call.sizes1 $ Array.shape lld+   let zDim0 = Call.sizes1 $ MutArray.shape z+   let n = dDim0+   Call.assert "lar1v: n-1 == lDim0" (n-1 == lDim0)+   Call.assert "lar1v: n-1 == ldDim0" (n-1 == ldDim0)+   Call.assert "lar1v: n-1 == lldDim0" (n-1 == lldDim0)+   Call.assert "lar1v: n == zDim0" (n == zDim0)+   isuppz <- Call.newArray1 2+   work <- Call.newArray1 (4*n)+   evalContT $ do+      nPtr <- Call.cint n+      b1Ptr <- Call.cint b1+      bnPtr <- Call.cint bn+      lambdaPtr <- Call.double lambda+      dPtr <- Call.array d+      lPtr <- Call.array l+      ldPtr <- Call.array ld+      lldPtr <- Call.array lld+      pivminPtr <- Call.double pivmin+      gaptolPtr <- Call.double gaptol+      zPtr <- Call.ioarray z+      wantncPtr <- Call.bool wantnc+      negcntPtr <- Call.alloca+      ztzPtr <- Call.alloca+      mingmaPtr <- Call.alloca+      rPtr <- Call.cint r+      isuppzPtr <- Call.ioarray isuppz+      nrminvPtr <- Call.alloca+      residPtr <- Call.alloca+      rqcorrPtr <- Call.alloca+      workPtr <- Call.ioarray work+      liftIO $ FFI.lar1v nPtr b1Ptr bnPtr lambdaPtr dPtr lPtr ldPtr lldPtr pivminPtr gaptolPtr zPtr wantncPtr negcntPtr ztzPtr mingmaPtr rPtr isuppzPtr nrminvPtr residPtr rqcorrPtr workPtr+      liftIO $ pure (,,,,,,,)+         <*> fmap fromIntegral (peek negcntPtr)+         <*> peek ztzPtr+         <*> peek mingmaPtr+         <*> fmap fromIntegral (peek rPtr)+         <*> Call.freezeArray isuppz+         <*> peek nrminvPtr+         <*> peek residPtr+         <*> peek rqcorrPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlar2v.f>+lar2v ::+   Int {- ^ n -} ->+   IOArray ZeroInt Double {- ^ x -} ->+   IOArray ZeroInt Double {- ^ y -} ->+   IOArray ZeroInt Double {- ^ z -} ->+   Int {- ^ incx -} ->+   Array ZeroInt Double {- ^ c -} ->+   Array ZeroInt Double {- ^ s -} ->+   Int {- ^ incc -} ->+   IO ()+lar2v n x y z incx c s incc = do+   let xDim0 = Call.sizes1 $ MutArray.shape x+   let yDim0 = Call.sizes1 $ MutArray.shape y+   let zDim0 = Call.sizes1 $ MutArray.shape z+   let cDim0 = Call.sizes1 $ Array.shape c+   let sDim0 = Call.sizes1 $ Array.shape s+   let _xSize = xDim0+   let _ySize = yDim0+   let _zSize = zDim0+   Call.assert "lar2v: 1+(n-1)*incc == cDim0" (1+(n-1)*incc == cDim0)+   Call.assert "lar2v: 1+(n-1)*incc == sDim0" (1+(n-1)*incc == sDim0)+   evalContT $ do+      nPtr <- Call.cint n+      xPtr <- Call.ioarray x+      yPtr <- Call.ioarray y+      zPtr <- Call.ioarray z+      incxPtr <- Call.cint incx+      cPtr <- Call.array c+      sPtr <- Call.array s+      inccPtr <- Call.cint incc+      liftIO $ FFI.lar2v nPtr xPtr yPtr zPtr incxPtr cPtr sPtr inccPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarf.f>+larf ::+   Char {- ^ side -} ->+   Int {- ^ m -} ->+   Array ZeroInt Double {- ^ v -} ->+   Int {- ^ incv -} ->+   Double {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ c -} ->+   Int {- ^ workSize -} ->+   IO ()+larf side m v incv tau c workSize = do+   let vDim0 = Call.sizes1 $ Array.shape v+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _vSize = vDim0+   let n = cDim0+   let ldc = cDim1+   work <- Call.newArray1 workSize+   evalContT $ do+      sidePtr <- Call.char side+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      vPtr <- Call.array v+      incvPtr <- Call.cint incv+      tauPtr <- Call.double tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      liftIO $ FFI.larf sidePtr mPtr nPtr vPtr incvPtr tauPtr cPtr ldcPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarfb.f>+larfb ::+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Char {- ^ direct -} ->+   Char {- ^ storev -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ v -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ t -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ c -} ->+   Int {- ^ ldwork -} ->+   IO ()+larfb side trans direct storev m v t c ldwork = do+   let (vDim0,vDim1) = Call.sizes2 $ Array.shape v+   let (tDim0,tDim1) = Call.sizes2 $ Array.shape t+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _vSize = vDim0+   let ldv = vDim1+   let k = tDim0+   let ldt = tDim1+   let n = cDim0+   let ldc = cDim1+   work <- Call.newArray2 k ldwork+   evalContT $ do+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      directPtr <- Call.char direct+      storevPtr <- Call.char storev+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      vPtr <- Call.array v+      ldvPtr <- Call.cint ldv+      tPtr <- Call.array t+      ldtPtr <- Call.cint ldt+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      ldworkPtr <- Call.cint ldwork+      liftIO $ FFI.larfb sidePtr transPtr directPtr storevPtr mPtr nPtr kPtr vPtr ldvPtr tPtr ldtPtr cPtr ldcPtr workPtr ldworkPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarfg.f>+larfg ::+   Int {- ^ n -} ->+   Double {- ^ alpha -} ->+   IOArray ZeroInt Double {- ^ x -} ->+   Int {- ^ incx -} ->+   IO (Double, Double)+larfg n alpha x incx = do+   let xDim0 = Call.sizes1 $ MutArray.shape x+   let _xSize = xDim0+   evalContT $ do+      nPtr <- Call.cint n+      alphaPtr <- Call.double alpha+      xPtr <- Call.ioarray x+      incxPtr <- Call.cint incx+      tauPtr <- Call.alloca+      liftIO $ FFI.larfg nPtr alphaPtr xPtr incxPtr tauPtr+      liftIO $ pure (,)+         <*> peek alphaPtr+         <*> peek tauPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarfgp.f>+larfgp ::+   Int {- ^ n -} ->+   Double {- ^ alpha -} ->+   IOArray ZeroInt Double {- ^ x -} ->+   Int {- ^ incx -} ->+   IO (Double, Double)+larfgp n alpha x incx = do+   let xDim0 = Call.sizes1 $ MutArray.shape x+   let _xSize = xDim0+   evalContT $ do+      nPtr <- Call.cint n+      alphaPtr <- Call.double alpha+      xPtr <- Call.ioarray x+      incxPtr <- Call.cint incx+      tauPtr <- Call.alloca+      liftIO $ FFI.larfgp nPtr alphaPtr xPtr incxPtr tauPtr+      liftIO $ pure (,)+         <*> peek alphaPtr+         <*> peek tauPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarft.f>+larft ::+   Char {- ^ direct -} ->+   Char {- ^ storev -} ->+   Int {- ^ n -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ v -} ->+   Array ZeroInt Double {- ^ tau -} ->+   Int {- ^ ldt -} ->+   IO (Array (ZeroInt,ZeroInt) Double)+larft direct storev n v tau ldt = do+   let (vDim0,vDim1) = Call.sizes2 $ Array.shape v+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let _vSize = vDim0+   let ldv = vDim1+   let k = tauDim0+   t <- Call.newArray2 k ldt+   evalContT $ do+      directPtr <- Call.char direct+      storevPtr <- Call.char storev+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      vPtr <- Call.array v+      ldvPtr <- Call.cint ldv+      tauPtr <- Call.array tau+      tPtr <- Call.ioarray t+      ldtPtr <- Call.cint ldt+      liftIO $ FFI.larft directPtr storevPtr nPtr kPtr vPtr ldvPtr tauPtr tPtr ldtPtr+      liftIO $ Call.freezeArray t++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarfx.f>+larfx ::+   Char {- ^ side -} ->+   Int {- ^ m -} ->+   Array ZeroInt Double {- ^ v -} ->+   Double {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ c -} ->+   Int {- ^ workSize -} ->+   IO ()+larfx side m v tau c workSize = do+   let vDim0 = Call.sizes1 $ Array.shape v+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _vSize = vDim0+   let n = cDim0+   let ldc = cDim1+   work <- Call.newArray1 workSize+   evalContT $ do+      sidePtr <- Call.char side+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      vPtr <- Call.array v+      tauPtr <- Call.double tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      liftIO $ FFI.larfx sidePtr mPtr nPtr vPtr tauPtr cPtr ldcPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlargv.f>+largv ::+   Int {- ^ n -} ->+   IOArray ZeroInt Double {- ^ x -} ->+   Int {- ^ incx -} ->+   IOArray ZeroInt Double {- ^ y -} ->+   Int {- ^ incy -} ->+   Int {- ^ incc -} ->+   IO (Array ZeroInt Double)+largv n x incx y incy incc = do+   let xDim0 = Call.sizes1 $ MutArray.shape x+   let yDim0 = Call.sizes1 $ MutArray.shape y+   let _xSize = xDim0+   let _ySize = yDim0+   c <- Call.newArray1 (1+(n-1)*incc)+   evalContT $ do+      nPtr <- Call.cint n+      xPtr <- Call.ioarray x+      incxPtr <- Call.cint incx+      yPtr <- Call.ioarray y+      incyPtr <- Call.cint incy+      cPtr <- Call.ioarray c+      inccPtr <- Call.cint incc+      liftIO $ FFI.largv nPtr xPtr incxPtr yPtr incyPtr cPtr inccPtr+      liftIO $ Call.freezeArray c++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarnv.f>+larnv ::+   Int {- ^ idist -} ->+   IOArray ZeroInt CInt {- ^ iseed -} ->+   Int {- ^ n -} ->+   IO (Array ZeroInt Double)+larnv idist iseed n = do+   let iseedDim0 = Call.sizes1 $ MutArray.shape iseed+   Call.assert "larnv: 4 == iseedDim0" (4 == iseedDim0)+   x <- Call.newArray1 n+   evalContT $ do+      idistPtr <- Call.cint idist+      iseedPtr <- Call.ioarray iseed+      nPtr <- Call.cint n+      xPtr <- Call.ioarray x+      liftIO $ FFI.larnv idistPtr iseedPtr nPtr xPtr+      liftIO $ Call.freezeArray x++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarra.f>+larra ::+   Array ZeroInt Double {- ^ d -} ->+   IOArray ZeroInt Double {- ^ e -} ->+   IOArray ZeroInt Double {- ^ e2 -} ->+   Double {- ^ spltol -} ->+   Double {- ^ tnrm -} ->+   IO (Int, Array ZeroInt CInt, Int)+larra d e e2 spltol tnrm = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let e2Dim0 = Call.sizes1 $ MutArray.shape e2+   let n = dDim0+   Call.assert "larra: n == eDim0" (n == eDim0)+   Call.assert "larra: n == e2Dim0" (n == e2Dim0)+   isplit <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      dPtr <- Call.array d+      ePtr <- Call.ioarray e+      e2Ptr <- Call.ioarray e2+      spltolPtr <- Call.double spltol+      tnrmPtr <- Call.double tnrm+      nsplitPtr <- Call.alloca+      isplitPtr <- Call.ioarray isplit+      infoPtr <- Call.alloca+      liftIO $ FFI.larra nPtr dPtr ePtr e2Ptr spltolPtr tnrmPtr nsplitPtr isplitPtr infoPtr+      liftIO $ pure (,,)+         <*> fmap fromIntegral (peek nsplitPtr)+         <*> Call.freezeArray isplit+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarrb.f>+larrb ::+   Array ZeroInt Double {- ^ d -} ->+   Array ZeroInt Double {- ^ lld -} ->+   Int {- ^ ifirst -} ->+   Int {- ^ ilast -} ->+   Double {- ^ rtol1 -} ->+   Double {- ^ rtol2 -} ->+   Int {- ^ offset -} ->+   IOArray ZeroInt Double {- ^ w -} ->+   IOArray ZeroInt Double {- ^ wgap -} ->+   IOArray ZeroInt Double {- ^ werr -} ->+   Double {- ^ pivmin -} ->+   Double {- ^ spdiam -} ->+   Int {- ^ twist -} ->+   IO (Int)+larrb d lld ifirst ilast rtol1 rtol2 offset w wgap werr pivmin spdiam twist = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let lldDim0 = Call.sizes1 $ Array.shape lld+   let wDim0 = Call.sizes1 $ MutArray.shape w+   let wgapDim0 = Call.sizes1 $ MutArray.shape wgap+   let werrDim0 = Call.sizes1 $ MutArray.shape werr+   let n = dDim0+   Call.assert "larrb: n-1 == lldDim0" (n-1 == lldDim0)+   Call.assert "larrb: n == wDim0" (n == wDim0)+   Call.assert "larrb: n-1 == wgapDim0" (n-1 == wgapDim0)+   Call.assert "larrb: n == werrDim0" (n == werrDim0)+   work <- Call.newArray1 (2*n)+   iwork <- Call.newArray1 (2*n)+   evalContT $ do+      nPtr <- Call.cint n+      dPtr <- Call.array d+      lldPtr <- Call.array lld+      ifirstPtr <- Call.cint ifirst+      ilastPtr <- Call.cint ilast+      rtol1Ptr <- Call.double rtol1+      rtol2Ptr <- Call.double rtol2+      offsetPtr <- Call.cint offset+      wPtr <- Call.ioarray w+      wgapPtr <- Call.ioarray wgap+      werrPtr <- Call.ioarray werr+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      pivminPtr <- Call.double pivmin+      spdiamPtr <- Call.double spdiam+      twistPtr <- Call.cint twist+      infoPtr <- Call.alloca+      liftIO $ FFI.larrb nPtr dPtr lldPtr ifirstPtr ilastPtr rtol1Ptr rtol2Ptr offsetPtr wPtr wgapPtr werrPtr workPtr iworkPtr pivminPtr spdiamPtr twistPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarrc.f>+larrc ::+   Char {- ^ jobt -} ->+   Double {- ^ vl -} ->+   Double {- ^ vu -} ->+   Array ZeroInt Double {- ^ d -} ->+   Array ZeroInt Double {- ^ e -} ->+   Double {- ^ pivmin -} ->+   IO (Int, Int, Int, Int)+larrc jobt vl vu d e pivmin = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let eDim0 = Call.sizes1 $ Array.shape e+   let n = dDim0+   Call.assert "larrc: n == eDim0" (n == eDim0)+   evalContT $ do+      jobtPtr <- Call.char jobt+      nPtr <- Call.cint n+      vlPtr <- Call.double vl+      vuPtr <- Call.double vu+      dPtr <- Call.array d+      ePtr <- Call.array e+      pivminPtr <- Call.double pivmin+      eigcntPtr <- Call.alloca+      lcntPtr <- Call.alloca+      rcntPtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.larrc jobtPtr nPtr vlPtr vuPtr dPtr ePtr pivminPtr eigcntPtr lcntPtr rcntPtr infoPtr+      liftIO $ pure (,,,)+         <*> fmap fromIntegral (peek eigcntPtr)+         <*> fmap fromIntegral (peek lcntPtr)+         <*> fmap fromIntegral (peek rcntPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarrd.f>+larrd ::+   Char {- ^ range -} ->+   Char {- ^ order -} ->+   Double {- ^ vl -} ->+   Double {- ^ vu -} ->+   Int {- ^ il -} ->+   Int {- ^ iu -} ->+   Array ZeroInt Double {- ^ gers -} ->+   Double {- ^ reltol -} ->+   Array ZeroInt Double {- ^ d -} ->+   Array ZeroInt Double {- ^ e -} ->+   Array ZeroInt Double {- ^ e2 -} ->+   Double {- ^ pivmin -} ->+   Int {- ^ nsplit -} ->+   Array ZeroInt CInt {- ^ isplit -} ->+   IO (Int, Array ZeroInt Double, Array ZeroInt Double, Double, Double, Array ZeroInt CInt, Array ZeroInt CInt, Int)+larrd range order vl vu il iu gers reltol d e e2 pivmin nsplit isplit = do+   let gersDim0 = Call.sizes1 $ Array.shape gers+   let dDim0 = Call.sizes1 $ Array.shape d+   let eDim0 = Call.sizes1 $ Array.shape e+   let e2Dim0 = Call.sizes1 $ Array.shape e2+   let isplitDim0 = Call.sizes1 $ Array.shape isplit+   let n = dDim0+   Call.assert "larrd: 2*n == gersDim0" (2*n == gersDim0)+   Call.assert "larrd: n-1 == eDim0" (n-1 == eDim0)+   Call.assert "larrd: n-1 == e2Dim0" (n-1 == e2Dim0)+   Call.assert "larrd: n == isplitDim0" (n == isplitDim0)+   w <- Call.newArray1 n+   werr <- Call.newArray1 n+   iblock <- Call.newArray1 n+   indexw <- Call.newArray1 n+   work <- Call.newArray1 (4*n)+   iwork <- Call.newArray1 (3*n)+   evalContT $ do+      rangePtr <- Call.char range+      orderPtr <- Call.char order+      nPtr <- Call.cint n+      vlPtr <- Call.double vl+      vuPtr <- Call.double vu+      ilPtr <- Call.cint il+      iuPtr <- Call.cint iu+      gersPtr <- Call.array gers+      reltolPtr <- Call.double reltol+      dPtr <- Call.array d+      ePtr <- Call.array e+      e2Ptr <- Call.array e2+      pivminPtr <- Call.double pivmin+      nsplitPtr <- Call.cint nsplit+      isplitPtr <- Call.array isplit+      mPtr <- Call.alloca+      wPtr <- Call.ioarray w+      werrPtr <- Call.ioarray werr+      wlPtr <- Call.alloca+      wuPtr <- Call.alloca+      iblockPtr <- Call.ioarray iblock+      indexwPtr <- Call.ioarray indexw+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.larrd rangePtr orderPtr nPtr vlPtr vuPtr ilPtr iuPtr gersPtr reltolPtr dPtr ePtr e2Ptr pivminPtr nsplitPtr isplitPtr mPtr wPtr werrPtr wlPtr wuPtr iblockPtr indexwPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,,,,,,,)+         <*> fmap fromIntegral (peek mPtr)+         <*> Call.freezeArray w+         <*> Call.freezeArray werr+         <*> peek wlPtr+         <*> peek wuPtr+         <*> Call.freezeArray iblock+         <*> Call.freezeArray indexw+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarre.f>+larre ::+   Char {- ^ range -} ->+   Double {- ^ vl -} ->+   Double {- ^ vu -} ->+   Int {- ^ il -} ->+   Int {- ^ iu -} ->+   IOArray ZeroInt Double {- ^ d -} ->+   IOArray ZeroInt Double {- ^ e -} ->+   IOArray ZeroInt Double {- ^ e2 -} ->+   Double {- ^ rtol1 -} ->+   Double {- ^ rtol2 -} ->+   Double {- ^ spltol -} ->+   IO (Double, Double, Int, Array ZeroInt CInt, Int, Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double, Double, Int)+larre range vl vu il iu d e e2 rtol1 rtol2 spltol = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let e2Dim0 = Call.sizes1 $ MutArray.shape e2+   let n = dDim0+   Call.assert "larre: n == eDim0" (n == eDim0)+   Call.assert "larre: n == e2Dim0" (n == e2Dim0)+   isplit <- Call.newArray1 n+   w <- Call.newArray1 n+   werr <- Call.newArray1 n+   wgap <- Call.newArray1 n+   iblock <- Call.newArray1 n+   indexw <- Call.newArray1 n+   gers <- Call.newArray1 (2*n)+   work <- Call.newArray1 (6*n)+   iwork <- Call.newArray1 (5*n)+   evalContT $ do+      rangePtr <- Call.char range+      nPtr <- Call.cint n+      vlPtr <- Call.double vl+      vuPtr <- Call.double vu+      ilPtr <- Call.cint il+      iuPtr <- Call.cint iu+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      e2Ptr <- Call.ioarray e2+      rtol1Ptr <- Call.double rtol1+      rtol2Ptr <- Call.double rtol2+      spltolPtr <- Call.double spltol+      nsplitPtr <- Call.alloca+      isplitPtr <- Call.ioarray isplit+      mPtr <- Call.alloca+      wPtr <- Call.ioarray w+      werrPtr <- Call.ioarray werr+      wgapPtr <- Call.ioarray wgap+      iblockPtr <- Call.ioarray iblock+      indexwPtr <- Call.ioarray indexw+      gersPtr <- Call.ioarray gers+      pivminPtr <- Call.alloca+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.larre rangePtr nPtr vlPtr vuPtr ilPtr iuPtr dPtr ePtr e2Ptr rtol1Ptr rtol2Ptr spltolPtr nsplitPtr isplitPtr mPtr wPtr werrPtr wgapPtr iblockPtr indexwPtr gersPtr pivminPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,,,,,,,,,,,,)+         <*> peek vlPtr+         <*> peek vuPtr+         <*> fmap fromIntegral (peek nsplitPtr)+         <*> Call.freezeArray isplit+         <*> fmap fromIntegral (peek mPtr)+         <*> Call.freezeArray w+         <*> Call.freezeArray werr+         <*> Call.freezeArray wgap+         <*> Call.freezeArray iblock+         <*> Call.freezeArray indexw+         <*> Call.freezeArray gers+         <*> peek pivminPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarrf.f>+larrf ::+   Array ZeroInt Double {- ^ d -} ->+   Array ZeroInt Double {- ^ l -} ->+   Array ZeroInt Double {- ^ ld -} ->+   Int {- ^ clstrt -} ->+   Int {- ^ clend -} ->+   Array ZeroInt Double {- ^ w -} ->+   IOArray ZeroInt Double {- ^ wgap -} ->+   Array ZeroInt Double {- ^ werr -} ->+   Double {- ^ spdiam -} ->+   Double {- ^ clgapl -} ->+   Double {- ^ clgapr -} ->+   Double {- ^ pivmin -} ->+   IO (Double, Array ZeroInt Double, Array ZeroInt Double, Int)+larrf d l ld clstrt clend w wgap werr spdiam clgapl clgapr pivmin = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let lDim0 = Call.sizes1 $ Array.shape l+   let ldDim0 = Call.sizes1 $ Array.shape ld+   let wDim0 = Call.sizes1 $ Array.shape w+   let wgapDim0 = Call.sizes1 $ MutArray.shape wgap+   let werrDim0 = Call.sizes1 $ Array.shape werr+   let n = dDim0+   let _wSize = wDim0+   let _wgapSize = wgapDim0+   let _werrSize = werrDim0+   Call.assert "larrf: n-1 == lDim0" (n-1 == lDim0)+   Call.assert "larrf: n-1 == ldDim0" (n-1 == ldDim0)+   dplus <- Call.newArray1 n+   lplus <- Call.newArray1 (n-1)+   work <- Call.newArray1 (2*n)+   evalContT $ do+      nPtr <- Call.cint n+      dPtr <- Call.array d+      lPtr <- Call.array l+      ldPtr <- Call.array ld+      clstrtPtr <- Call.cint clstrt+      clendPtr <- Call.cint clend+      wPtr <- Call.array w+      wgapPtr <- Call.ioarray wgap+      werrPtr <- Call.array werr+      spdiamPtr <- Call.double spdiam+      clgaplPtr <- Call.double clgapl+      clgaprPtr <- Call.double clgapr+      pivminPtr <- Call.double pivmin+      sigmaPtr <- Call.alloca+      dplusPtr <- Call.ioarray dplus+      lplusPtr <- Call.ioarray lplus+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.larrf nPtr dPtr lPtr ldPtr clstrtPtr clendPtr wPtr wgapPtr werrPtr spdiamPtr clgaplPtr clgaprPtr pivminPtr sigmaPtr dplusPtr lplusPtr workPtr infoPtr+      liftIO $ pure (,,,)+         <*> peek sigmaPtr+         <*> Call.freezeArray dplus+         <*> Call.freezeArray lplus+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarrj.f>+larrj ::+   Array ZeroInt Double {- ^ d -} ->+   Array ZeroInt Double {- ^ e2 -} ->+   Int {- ^ ifirst -} ->+   Int {- ^ ilast -} ->+   Double {- ^ rtol -} ->+   Int {- ^ offset -} ->+   IOArray ZeroInt Double {- ^ w -} ->+   IOArray ZeroInt Double {- ^ werr -} ->+   Double {- ^ pivmin -} ->+   Double {- ^ spdiam -} ->+   IO (Int)+larrj d e2 ifirst ilast rtol offset w werr pivmin spdiam = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let e2Dim0 = Call.sizes1 $ Array.shape e2+   let wDim0 = Call.sizes1 $ MutArray.shape w+   let werrDim0 = Call.sizes1 $ MutArray.shape werr+   let n = dDim0+   Call.assert "larrj: n-1 == e2Dim0" (n-1 == e2Dim0)+   Call.assert "larrj: n == wDim0" (n == wDim0)+   Call.assert "larrj: n == werrDim0" (n == werrDim0)+   work <- Call.newArray1 (2*n)+   iwork <- Call.newArray1 (2*n)+   evalContT $ do+      nPtr <- Call.cint n+      dPtr <- Call.array d+      e2Ptr <- Call.array e2+      ifirstPtr <- Call.cint ifirst+      ilastPtr <- Call.cint ilast+      rtolPtr <- Call.double rtol+      offsetPtr <- Call.cint offset+      wPtr <- Call.ioarray w+      werrPtr <- Call.ioarray werr+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      pivminPtr <- Call.double pivmin+      spdiamPtr <- Call.double spdiam+      infoPtr <- Call.alloca+      liftIO $ FFI.larrj nPtr dPtr e2Ptr ifirstPtr ilastPtr rtolPtr offsetPtr wPtr werrPtr workPtr iworkPtr pivminPtr spdiamPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarrk.f>+larrk ::+   Int {- ^ iw -} ->+   Double {- ^ gl -} ->+   Double {- ^ gu -} ->+   Array ZeroInt Double {- ^ d -} ->+   Array ZeroInt Double {- ^ e2 -} ->+   Double {- ^ pivmin -} ->+   Double {- ^ reltol -} ->+   IO (Double, Double, Int)+larrk iw gl gu d e2 pivmin reltol = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let e2Dim0 = Call.sizes1 $ Array.shape e2+   let n = dDim0+   Call.assert "larrk: n-1 == e2Dim0" (n-1 == e2Dim0)+   evalContT $ do+      nPtr <- Call.cint n+      iwPtr <- Call.cint iw+      glPtr <- Call.double gl+      guPtr <- Call.double gu+      dPtr <- Call.array d+      e2Ptr <- Call.array e2+      pivminPtr <- Call.double pivmin+      reltolPtr <- Call.double reltol+      wPtr <- Call.alloca+      werrPtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.larrk nPtr iwPtr glPtr guPtr dPtr e2Ptr pivminPtr reltolPtr wPtr werrPtr infoPtr+      liftIO $ pure (,,)+         <*> peek wPtr+         <*> peek werrPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarrr.f>+larrr ::+   Array ZeroInt Double {- ^ d -} ->+   IOArray ZeroInt Double {- ^ e -} ->+   IO (Int)+larrr d e = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let n = dDim0+   Call.assert "larrr: n == eDim0" (n == eDim0)+   evalContT $ do+      nPtr <- Call.cint n+      dPtr <- Call.array d+      ePtr <- Call.ioarray e+      infoPtr <- Call.alloca+      liftIO $ FFI.larrr nPtr dPtr ePtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarrv.f>+larrv ::+   Double {- ^ vl -} ->+   Double {- ^ vu -} ->+   IOArray ZeroInt Double {- ^ d -} ->+   IOArray ZeroInt Double {- ^ l -} ->+   Double {- ^ pivmin -} ->+   Array ZeroInt CInt {- ^ isplit -} ->+   Int {- ^ m -} ->+   Int {- ^ dol -} ->+   Int {- ^ dou -} ->+   Double {- ^ minrgp -} ->+   Double {- ^ rtol1 -} ->+   Double {- ^ rtol2 -} ->+   IOArray ZeroInt Double {- ^ w -} ->+   IOArray ZeroInt Double {- ^ werr -} ->+   IOArray ZeroInt Double {- ^ wgap -} ->+   Array ZeroInt CInt {- ^ iblock -} ->+   Array ZeroInt CInt {- ^ indexw -} ->+   Array ZeroInt Double {- ^ gers -} ->+   Int {- ^ ldz -} ->+   IO (Array (ZeroInt,ZeroInt) Double, Array ZeroInt CInt, Int)+larrv vl vu d l pivmin isplit m dol dou minrgp rtol1 rtol2 w werr wgap iblock indexw gers ldz = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let lDim0 = Call.sizes1 $ MutArray.shape l+   let isplitDim0 = Call.sizes1 $ Array.shape isplit+   let wDim0 = Call.sizes1 $ MutArray.shape w+   let werrDim0 = Call.sizes1 $ MutArray.shape werr+   let wgapDim0 = Call.sizes1 $ MutArray.shape wgap+   let iblockDim0 = Call.sizes1 $ Array.shape iblock+   let indexwDim0 = Call.sizes1 $ Array.shape indexw+   let gersDim0 = Call.sizes1 $ Array.shape gers+   let n = dDim0+   Call.assert "larrv: n == lDim0" (n == lDim0)+   Call.assert "larrv: n == isplitDim0" (n == isplitDim0)+   Call.assert "larrv: n == wDim0" (n == wDim0)+   Call.assert "larrv: n == werrDim0" (n == werrDim0)+   Call.assert "larrv: n == wgapDim0" (n == wgapDim0)+   Call.assert "larrv: n == iblockDim0" (n == iblockDim0)+   Call.assert "larrv: n == indexwDim0" (n == indexwDim0)+   Call.assert "larrv: 2*n == gersDim0" (2*n == gersDim0)+   z <- Call.newArray2 (maximum[1,m]) ldz+   isuppz <- Call.newArray1 (2*maximum[1,m])+   work <- Call.newArray1 (12*n)+   iwork <- Call.newArray1 (7*n)+   evalContT $ do+      nPtr <- Call.cint n+      vlPtr <- Call.double vl+      vuPtr <- Call.double vu+      dPtr <- Call.ioarray d+      lPtr <- Call.ioarray l+      pivminPtr <- Call.double pivmin+      isplitPtr <- Call.array isplit+      mPtr <- Call.cint m+      dolPtr <- Call.cint dol+      douPtr <- Call.cint dou+      minrgpPtr <- Call.double minrgp+      rtol1Ptr <- Call.double rtol1+      rtol2Ptr <- Call.double rtol2+      wPtr <- Call.ioarray w+      werrPtr <- Call.ioarray werr+      wgapPtr <- Call.ioarray wgap+      iblockPtr <- Call.array iblock+      indexwPtr <- Call.array indexw+      gersPtr <- Call.array gers+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      isuppzPtr <- Call.ioarray isuppz+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.larrv nPtr vlPtr vuPtr dPtr lPtr pivminPtr isplitPtr mPtr dolPtr douPtr minrgpPtr rtol1Ptr rtol2Ptr wPtr werrPtr wgapPtr iblockPtr indexwPtr gersPtr zPtr ldzPtr isuppzPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray z+         <*> Call.freezeArray isuppz+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlartg.f>+lartg ::+   Double {- ^ f -} ->+   Double {- ^ g -} ->+   IO (Double, Double, Double)+lartg f g = do+   evalContT $ do+      fPtr <- Call.double f+      gPtr <- Call.double g+      csPtr <- Call.alloca+      snPtr <- Call.alloca+      rPtr <- Call.alloca+      liftIO $ FFI.lartg fPtr gPtr csPtr snPtr rPtr+      liftIO $ pure (,,)+         <*> peek csPtr+         <*> peek snPtr+         <*> peek rPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlartgp.f>+lartgp ::+   Double {- ^ f -} ->+   Double {- ^ g -} ->+   IO (Double, Double, Double)+lartgp f g = do+   evalContT $ do+      fPtr <- Call.double f+      gPtr <- Call.double g+      csPtr <- Call.alloca+      snPtr <- Call.alloca+      rPtr <- Call.alloca+      liftIO $ FFI.lartgp fPtr gPtr csPtr snPtr rPtr+      liftIO $ pure (,,)+         <*> peek csPtr+         <*> peek snPtr+         <*> peek rPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlartgs.f>+lartgs ::+   Double {- ^ x -} ->+   Double {- ^ y -} ->+   Double {- ^ sigma -} ->+   IO (Double, Double)+lartgs x y sigma = do+   evalContT $ do+      xPtr <- Call.double x+      yPtr <- Call.double y+      sigmaPtr <- Call.double sigma+      csPtr <- Call.alloca+      snPtr <- Call.alloca+      liftIO $ FFI.lartgs xPtr yPtr sigmaPtr csPtr snPtr+      liftIO $ pure (,)+         <*> peek csPtr+         <*> peek snPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlartv.f>+lartv ::+   Int {- ^ n -} ->+   IOArray ZeroInt Double {- ^ x -} ->+   Int {- ^ incx -} ->+   IOArray ZeroInt Double {- ^ y -} ->+   Int {- ^ incy -} ->+   Array ZeroInt Double {- ^ c -} ->+   Array ZeroInt Double {- ^ s -} ->+   Int {- ^ incc -} ->+   IO ()+lartv n x incx y incy c s incc = do+   let xDim0 = Call.sizes1 $ MutArray.shape x+   let yDim0 = Call.sizes1 $ MutArray.shape y+   let cDim0 = Call.sizes1 $ Array.shape c+   let sDim0 = Call.sizes1 $ Array.shape s+   let _xSize = xDim0+   let _ySize = yDim0+   Call.assert "lartv: 1+(n-1)*incc == cDim0" (1+(n-1)*incc == cDim0)+   Call.assert "lartv: 1+(n-1)*incc == sDim0" (1+(n-1)*incc == sDim0)+   evalContT $ do+      nPtr <- Call.cint n+      xPtr <- Call.ioarray x+      incxPtr <- Call.cint incx+      yPtr <- Call.ioarray y+      incyPtr <- Call.cint incy+      cPtr <- Call.array c+      sPtr <- Call.array s+      inccPtr <- Call.cint incc+      liftIO $ FFI.lartv nPtr xPtr incxPtr yPtr incyPtr cPtr sPtr inccPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaruv.f>+laruv ::+   IOArray ZeroInt CInt {- ^ iseed -} ->+   Int {- ^ n -} ->+   IO (Array ZeroInt Double)+laruv iseed n = do+   let iseedDim0 = Call.sizes1 $ MutArray.shape iseed+   Call.assert "laruv: 4 == iseedDim0" (4 == iseedDim0)+   x <- Call.newArray1 n+   evalContT $ do+      iseedPtr <- Call.ioarray iseed+      nPtr <- Call.cint n+      xPtr <- Call.ioarray x+      liftIO $ FFI.laruv iseedPtr nPtr xPtr+      liftIO $ Call.freezeArray x++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarz.f>+larz ::+   Char {- ^ side -} ->+   Int {- ^ m -} ->+   Int {- ^ l -} ->+   Array ZeroInt Double {- ^ v -} ->+   Int {- ^ incv -} ->+   Double {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ c -} ->+   Int {- ^ workSize -} ->+   IO ()+larz side m l v incv tau c workSize = do+   let vDim0 = Call.sizes1 $ Array.shape v+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let n = cDim0+   let ldc = cDim1+   Call.assert "larz: 1+(l-1)*abs(incv) == vDim0" (1+(l-1)*abs(incv) == vDim0)+   work <- Call.newArray1 workSize+   evalContT $ do+      sidePtr <- Call.char side+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      lPtr <- Call.cint l+      vPtr <- Call.array v+      incvPtr <- Call.cint incv+      tauPtr <- Call.double tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      liftIO $ FFI.larz sidePtr mPtr nPtr lPtr vPtr incvPtr tauPtr cPtr ldcPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarzb.f>+larzb ::+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Char {- ^ direct -} ->+   Char {- ^ storev -} ->+   Int {- ^ m -} ->+   Int {- ^ l -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ v -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ t -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ c -} ->+   Int {- ^ ldwork -} ->+   IO ()+larzb side trans direct storev m l v t c ldwork = do+   let (vDim0,vDim1) = Call.sizes2 $ Array.shape v+   let (tDim0,tDim1) = Call.sizes2 $ Array.shape t+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _nv = vDim0+   let ldv = vDim1+   let k = tDim0+   let ldt = tDim1+   let n = cDim0+   let ldc = cDim1+   work <- Call.newArray2 k ldwork+   evalContT $ do+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      directPtr <- Call.char direct+      storevPtr <- Call.char storev+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      lPtr <- Call.cint l+      vPtr <- Call.array v+      ldvPtr <- Call.cint ldv+      tPtr <- Call.array t+      ldtPtr <- Call.cint ldt+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      ldworkPtr <- Call.cint ldwork+      liftIO $ FFI.larzb sidePtr transPtr directPtr storevPtr mPtr nPtr kPtr lPtr vPtr ldvPtr tPtr ldtPtr cPtr ldcPtr workPtr ldworkPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarzt.f>+larzt ::+   Char {- ^ direct -} ->+   Char {- ^ storev -} ->+   Int {- ^ n -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ v -} ->+   Array ZeroInt Double {- ^ tau -} ->+   Int {- ^ ldt -} ->+   IO (Array (ZeroInt,ZeroInt) Double)+larzt direct storev n v tau ldt = do+   let (vDim0,vDim1) = Call.sizes2 $ MutArray.shape v+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let _vSize = vDim0+   let ldv = vDim1+   let k = tauDim0+   t <- Call.newArray2 k ldt+   evalContT $ do+      directPtr <- Call.char direct+      storevPtr <- Call.char storev+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      vPtr <- Call.ioarray v+      ldvPtr <- Call.cint ldv+      tauPtr <- Call.array tau+      tPtr <- Call.ioarray t+      ldtPtr <- Call.cint ldt+      liftIO $ FFI.larzt directPtr storevPtr nPtr kPtr vPtr ldvPtr tauPtr tPtr ldtPtr+      liftIO $ Call.freezeArray t++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlas2.f>+las2 ::+   Double {- ^ f -} ->+   Double {- ^ g -} ->+   Double {- ^ h -} ->+   IO (Double, Double)+las2 f g h = do+   evalContT $ do+      fPtr <- Call.double f+      gPtr <- Call.double g+      hPtr <- Call.double h+      ssminPtr <- Call.alloca+      ssmaxPtr <- Call.alloca+      liftIO $ FFI.las2 fPtr gPtr hPtr ssminPtr ssmaxPtr+      liftIO $ pure (,)+         <*> peek ssminPtr+         <*> peek ssmaxPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlascl.f>+lascl ::+   Char {- ^ type_ -} ->+   Int {- ^ kl -} ->+   Int {- ^ ku -} ->+   Double {- ^ cfrom -} ->+   Double {- ^ cto -} ->+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IO (Int)+lascl type_ kl ku cfrom cto m a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   evalContT $ do+      type_Ptr <- Call.char type_+      klPtr <- Call.cint kl+      kuPtr <- Call.cint ku+      cfromPtr <- Call.double cfrom+      ctoPtr <- Call.double cto+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      infoPtr <- Call.alloca+      liftIO $ FFI.lascl type_Ptr klPtr kuPtr cfromPtr ctoPtr mPtr nPtr aPtr ldaPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasd0.f>+lasd0 ::+   Int {- ^ sqre -} ->+   IOArray ZeroInt Double {- ^ d -} ->+   IOArray ZeroInt Double {- ^ e -} ->+   Int {- ^ ldu -} ->+   Int {- ^ m -} ->+   Int {- ^ ldvt -} ->+   Int {- ^ smlsiz -} ->+   IO (Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double, Int)+lasd0 sqre d e ldu m ldvt smlsiz = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let n = dDim0+   Call.assert "lasd0: m-1 == eDim0" (m-1 == eDim0)+   u <- Call.newArray2 n ldu+   vt <- Call.newArray2 m ldvt+   iwork <- Call.newArray1 (8*n)+   work <- Call.newArray1 (3*m^!2+2*m)+   evalContT $ do+      nPtr <- Call.cint n+      sqrePtr <- Call.cint sqre+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      uPtr <- Call.ioarray u+      lduPtr <- Call.cint ldu+      vtPtr <- Call.ioarray vt+      ldvtPtr <- Call.cint ldvt+      smlsizPtr <- Call.cint smlsiz+      iworkPtr <- Call.ioarray iwork+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.lasd0 nPtr sqrePtr dPtr ePtr uPtr lduPtr vtPtr ldvtPtr smlsizPtr iworkPtr workPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray u+         <*> Call.freezeArray vt+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasd1.f>+lasd1 ::+   Int {- ^ nl -} ->+   Int {- ^ nr -} ->+   Int {- ^ sqre -} ->+   IOArray ZeroInt Double {- ^ d -} ->+   Double {- ^ alpha -} ->+   Double {- ^ beta -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ u -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ vt -} ->+   IOArray ZeroInt CInt {- ^ idxq -} ->+   IO (Double, Double, Int)+lasd1 nl nr sqre d alpha beta u vt idxq = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let (uDim0,uDim1) = Call.sizes2 $ MutArray.shape u+   let (vtDim0,vtDim1) = Call.sizes2 $ MutArray.shape vt+   let idxqDim0 = Call.sizes1 $ MutArray.shape idxq+   let _dSize = dDim0+   let n = uDim0+   let ldu = uDim1+   let m = vtDim0+   let ldvt = vtDim1+   Call.assert "lasd1: n == idxqDim0" (n == idxqDim0)+   iwork <- Call.newArray1 (4*n)+   work <- Call.newArray1 (3*m^!2+2*m)+   evalContT $ do+      nlPtr <- Call.cint nl+      nrPtr <- Call.cint nr+      sqrePtr <- Call.cint sqre+      dPtr <- Call.ioarray d+      alphaPtr <- Call.double alpha+      betaPtr <- Call.double beta+      uPtr <- Call.ioarray u+      lduPtr <- Call.cint ldu+      vtPtr <- Call.ioarray vt+      ldvtPtr <- Call.cint ldvt+      idxqPtr <- Call.ioarray idxq+      iworkPtr <- Call.ioarray iwork+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.lasd1 nlPtr nrPtr sqrePtr dPtr alphaPtr betaPtr uPtr lduPtr vtPtr ldvtPtr idxqPtr iworkPtr workPtr infoPtr+      liftIO $ pure (,,)+         <*> peek alphaPtr+         <*> peek betaPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasd2.f>+lasd2 ::+   Int {- ^ nl -} ->+   Int {- ^ nr -} ->+   Int {- ^ sqre -} ->+   IOArray ZeroInt Double {- ^ d -} ->+   Double {- ^ alpha -} ->+   Double {- ^ beta -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ u -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ vt -} ->+   Int {- ^ ldu2 -} ->+   Int {- ^ ldvt2 -} ->+   IOArray ZeroInt CInt {- ^ idxq -} ->+   IO (Int, Array ZeroInt Double, Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double, Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int)+lasd2 nl nr sqre d alpha beta u vt ldu2 ldvt2 idxq = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let (uDim0,uDim1) = Call.sizes2 $ MutArray.shape u+   let (vtDim0,vtDim1) = Call.sizes2 $ MutArray.shape vt+   let idxqDim0 = Call.sizes1 $ MutArray.shape idxq+   let n = dDim0+   let ldu = uDim1+   let _m = vtDim0+   let ldvt = vtDim1+   Call.assert "lasd2: n == uDim0" (n == uDim0)+   Call.assert "lasd2: n == idxqDim0" (n == idxqDim0)+   z <- Call.newArray1 n+   dsigma <- Call.newArray1 n+   u2 <- Call.newArray2 n ldu2+   vt2 <- Call.newArray2 n ldvt2+   idxp <- Call.newArray1 n+   idx <- Call.newArray1 n+   idxc <- Call.newArray1 n+   coltyp <- Call.newArray1 n+   evalContT $ do+      nlPtr <- Call.cint nl+      nrPtr <- Call.cint nr+      sqrePtr <- Call.cint sqre+      kPtr <- Call.alloca+      dPtr <- Call.ioarray d+      zPtr <- Call.ioarray z+      alphaPtr <- Call.double alpha+      betaPtr <- Call.double beta+      uPtr <- Call.ioarray u+      lduPtr <- Call.cint ldu+      vtPtr <- Call.ioarray vt+      ldvtPtr <- Call.cint ldvt+      dsigmaPtr <- Call.ioarray dsigma+      u2Ptr <- Call.ioarray u2+      ldu2Ptr <- Call.cint ldu2+      vt2Ptr <- Call.ioarray vt2+      ldvt2Ptr <- Call.cint ldvt2+      idxpPtr <- Call.ioarray idxp+      idxPtr <- Call.ioarray idx+      idxcPtr <- Call.ioarray idxc+      idxqPtr <- Call.ioarray idxq+      coltypPtr <- Call.ioarray coltyp+      infoPtr <- Call.alloca+      liftIO $ FFI.lasd2 nlPtr nrPtr sqrePtr kPtr dPtr zPtr alphaPtr betaPtr uPtr lduPtr vtPtr ldvtPtr dsigmaPtr u2Ptr ldu2Ptr vt2Ptr ldvt2Ptr idxpPtr idxPtr idxcPtr idxqPtr coltypPtr infoPtr+      liftIO $ pure (,,,,,,,,,)+         <*> fmap fromIntegral (peek kPtr)+         <*> Call.freezeArray z+         <*> Call.freezeArray dsigma+         <*> Call.freezeArray u2+         <*> Call.freezeArray vt2+         <*> Call.freezeArray idxp+         <*> Call.freezeArray idx+         <*> Call.freezeArray idxc+         <*> Call.freezeArray coltyp+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasd3.f>+lasd3 ::+   Int {- ^ nl -} ->+   Int {- ^ nr -} ->+   Int {- ^ sqre -} ->+   Int {- ^ ldq -} ->+   IOArray ZeroInt Double {- ^ dsigma -} ->+   Int {- ^ ldu -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ u2 -} ->+   Int {- ^ m -} ->+   Int {- ^ ldvt -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ vt2 -} ->+   Array ZeroInt CInt {- ^ idxc -} ->+   Array ZeroInt CInt {- ^ ctot -} ->+   IOArray ZeroInt Double {- ^ z -} ->+   IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double, Int)+lasd3 nl nr sqre ldq dsigma ldu u2 m ldvt vt2 idxc ctot z = do+   let dsigmaDim0 = Call.sizes1 $ MutArray.shape dsigma+   let (u2Dim0,u2Dim1) = Call.sizes2 $ Array.shape u2+   let (vt2Dim0,vt2Dim1) = Call.sizes2 $ MutArray.shape vt2+   let idxcDim0 = Call.sizes1 $ Array.shape idxc+   let ctotDim0 = Call.sizes1 $ Array.shape ctot+   let zDim0 = Call.sizes1 $ MutArray.shape z+   let k = dsigmaDim0+   let n = u2Dim0+   let ldu2 = u2Dim1+   let ldvt2 = vt2Dim1+   Call.assert "lasd3: n == vt2Dim0" (n == vt2Dim0)+   Call.assert "lasd3: n == idxcDim0" (n == idxcDim0)+   Call.assert "lasd3: 4 == ctotDim0" (4 == ctotDim0)+   Call.assert "lasd3: k == zDim0" (k == zDim0)+   d <- Call.newArray1 k+   q <- Call.newArray2 k ldq+   u <- Call.newArray2 n ldu+   vt <- Call.newArray2 m ldvt+   evalContT $ do+      nlPtr <- Call.cint nl+      nrPtr <- Call.cint nr+      sqrePtr <- Call.cint sqre+      kPtr <- Call.cint k+      dPtr <- Call.ioarray d+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      dsigmaPtr <- Call.ioarray dsigma+      uPtr <- Call.ioarray u+      lduPtr <- Call.cint ldu+      u2Ptr <- Call.array u2+      ldu2Ptr <- Call.cint ldu2+      vtPtr <- Call.ioarray vt+      ldvtPtr <- Call.cint ldvt+      vt2Ptr <- Call.ioarray vt2+      ldvt2Ptr <- Call.cint ldvt2+      idxcPtr <- Call.array idxc+      ctotPtr <- Call.array ctot+      zPtr <- Call.ioarray z+      infoPtr <- Call.alloca+      liftIO $ FFI.lasd3 nlPtr nrPtr sqrePtr kPtr dPtr qPtr ldqPtr dsigmaPtr uPtr lduPtr u2Ptr ldu2Ptr vtPtr ldvtPtr vt2Ptr ldvt2Ptr idxcPtr ctotPtr zPtr infoPtr+      liftIO $ pure (,,,,)+         <*> Call.freezeArray d+         <*> Call.freezeArray q+         <*> Call.freezeArray u+         <*> Call.freezeArray vt+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasd4.f>+lasd4 ::+   Int {- ^ i -} ->+   Array ZeroInt Double {- ^ d -} ->+   Array ZeroInt Double {- ^ z -} ->+   Double {- ^ rho -} ->+   IO (Array ZeroInt Double, Double, Int)+lasd4 i d z rho = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let zDim0 = Call.sizes1 $ Array.shape z+   let n = dDim0+   Call.assert "lasd4: n == zDim0" (n == zDim0)+   delta <- Call.newArray1 n+   work <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      iPtr <- Call.cint i+      dPtr <- Call.array d+      zPtr <- Call.array z+      deltaPtr <- Call.ioarray delta+      rhoPtr <- Call.double rho+      sigmaPtr <- Call.alloca+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.lasd4 nPtr iPtr dPtr zPtr deltaPtr rhoPtr sigmaPtr workPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray delta+         <*> peek sigmaPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasd5.f>+lasd5 ::+   Int {- ^ i -} ->+   Array ZeroInt Double {- ^ d -} ->+   Array ZeroInt Double {- ^ z -} ->+   Double {- ^ rho -} ->+   IO (Array ZeroInt Double, Double)+lasd5 i d z rho = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let zDim0 = Call.sizes1 $ Array.shape z+   Call.assert "lasd5: 2 == dDim0" (2 == dDim0)+   Call.assert "lasd5: 2 == zDim0" (2 == zDim0)+   delta <- Call.newArray1 2+   work <- Call.newArray1 2+   evalContT $ do+      iPtr <- Call.cint i+      dPtr <- Call.array d+      zPtr <- Call.array z+      deltaPtr <- Call.ioarray delta+      rhoPtr <- Call.double rho+      dsigmaPtr <- Call.alloca+      workPtr <- Call.ioarray work+      liftIO $ FFI.lasd5 iPtr dPtr zPtr deltaPtr rhoPtr dsigmaPtr workPtr+      liftIO $ pure (,)+         <*> Call.freezeArray delta+         <*> peek dsigmaPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasd6.f>+lasd6 ::+   Int {- ^ icompq -} ->+   Int {- ^ nl -} ->+   Int {- ^ nr -} ->+   Int {- ^ sqre -} ->+   IOArray ZeroInt Double {- ^ d -} ->+   IOArray ZeroInt Double {- ^ vf -} ->+   IOArray ZeroInt Double {- ^ vl -} ->+   Double {- ^ alpha -} ->+   Double {- ^ beta -} ->+   IOArray ZeroInt CInt {- ^ idxq -} ->+   Int {- ^ ldgcol -} ->+   Int {- ^ ldgnum -} ->+   Int {- ^ difrSize -} ->+   IO (Double, Double, Array ZeroInt CInt, Int, Array (ZeroInt,ZeroInt) CInt, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double, Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double, Int)+lasd6 icompq nl nr sqre d vf vl alpha beta idxq ldgcol ldgnum difrSize = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let vfDim0 = Call.sizes1 $ MutArray.shape vf+   let vlDim0 = Call.sizes1 $ MutArray.shape vl+   let idxqDim0 = Call.sizes1 $ MutArray.shape idxq+   let m = vfDim0+   let n = idxqDim0+   Call.assert "lasd6: nl+nr+1 == dDim0" (nl+nr+1 == dDim0)+   Call.assert "lasd6: m == vlDim0" (m == vlDim0)+   perm <- Call.newArray1 n+   givcol <- Call.newArray2 2 ldgcol+   givnum <- Call.newArray2 2 ldgnum+   poles <- Call.newArray2 2 ldgnum+   difl <- Call.newArray1 n+   difr <- Call.newArray1 difrSize+   z <- Call.newArray1 m+   work <- Call.newArray1 (4*m)+   iwork <- Call.newArray1 (3*n)+   evalContT $ do+      icompqPtr <- Call.cint icompq+      nlPtr <- Call.cint nl+      nrPtr <- Call.cint nr+      sqrePtr <- Call.cint sqre+      dPtr <- Call.ioarray d+      vfPtr <- Call.ioarray vf+      vlPtr <- Call.ioarray vl+      alphaPtr <- Call.double alpha+      betaPtr <- Call.double beta+      idxqPtr <- Call.ioarray idxq+      permPtr <- Call.ioarray perm+      givptrPtr <- Call.alloca+      givcolPtr <- Call.ioarray givcol+      ldgcolPtr <- Call.cint ldgcol+      givnumPtr <- Call.ioarray givnum+      ldgnumPtr <- Call.cint ldgnum+      polesPtr <- Call.ioarray poles+      diflPtr <- Call.ioarray difl+      difrPtr <- Call.ioarray difr+      zPtr <- Call.ioarray z+      kPtr <- Call.alloca+      cPtr <- Call.alloca+      sPtr <- Call.alloca+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.lasd6 icompqPtr nlPtr nrPtr sqrePtr dPtr vfPtr vlPtr alphaPtr betaPtr idxqPtr permPtr givptrPtr givcolPtr ldgcolPtr givnumPtr ldgnumPtr polesPtr diflPtr difrPtr zPtr kPtr cPtr sPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,,,,,,,,,,,,,)+         <*> peek alphaPtr+         <*> peek betaPtr+         <*> Call.freezeArray perm+         <*> fmap fromIntegral (peek givptrPtr)+         <*> Call.freezeArray givcol+         <*> Call.freezeArray givnum+         <*> Call.freezeArray poles+         <*> Call.freezeArray difl+         <*> Call.freezeArray difr+         <*> Call.freezeArray z+         <*> fmap fromIntegral (peek kPtr)+         <*> peek cPtr+         <*> peek sPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasd7.f>+lasd7 ::+   Int {- ^ icompq -} ->+   Int {- ^ nl -} ->+   Int {- ^ nr -} ->+   Int {- ^ sqre -} ->+   IOArray ZeroInt Double {- ^ d -} ->+   IOArray ZeroInt Double {- ^ vf -} ->+   IOArray ZeroInt Double {- ^ vl -} ->+   Double {- ^ alpha -} ->+   Double {- ^ beta -} ->+   Array ZeroInt CInt {- ^ idxq -} ->+   Int {- ^ ldgcol -} ->+   Int {- ^ ldgnum -} ->+   IO (Int, Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int, Array (ZeroInt,ZeroInt) CInt, Array (ZeroInt,ZeroInt) Double, Double, Double, Int)+lasd7 icompq nl nr sqre d vf vl alpha beta idxq ldgcol ldgnum = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let vfDim0 = Call.sizes1 $ MutArray.shape vf+   let vlDim0 = Call.sizes1 $ MutArray.shape vl+   let idxqDim0 = Call.sizes1 $ Array.shape idxq+   let n = dDim0+   let m = vfDim0+   Call.assert "lasd7: m == vlDim0" (m == vlDim0)+   Call.assert "lasd7: n == idxqDim0" (n == idxqDim0)+   z <- Call.newArray1 m+   zw <- Call.newArray1 m+   vfw <- Call.newArray1 m+   vlw <- Call.newArray1 m+   dsigma <- Call.newArray1 n+   idx <- Call.newArray1 n+   idxp <- Call.newArray1 n+   perm <- Call.newArray1 n+   givcol <- Call.newArray2 2 ldgcol+   givnum <- Call.newArray2 2 ldgnum+   evalContT $ do+      icompqPtr <- Call.cint icompq+      nlPtr <- Call.cint nl+      nrPtr <- Call.cint nr+      sqrePtr <- Call.cint sqre+      kPtr <- Call.alloca+      dPtr <- Call.ioarray d+      zPtr <- Call.ioarray z+      zwPtr <- Call.ioarray zw+      vfPtr <- Call.ioarray vf+      vfwPtr <- Call.ioarray vfw+      vlPtr <- Call.ioarray vl+      vlwPtr <- Call.ioarray vlw+      alphaPtr <- Call.double alpha+      betaPtr <- Call.double beta+      dsigmaPtr <- Call.ioarray dsigma+      idxPtr <- Call.ioarray idx+      idxpPtr <- Call.ioarray idxp+      idxqPtr <- Call.array idxq+      permPtr <- Call.ioarray perm+      givptrPtr <- Call.alloca+      givcolPtr <- Call.ioarray givcol+      ldgcolPtr <- Call.cint ldgcol+      givnumPtr <- Call.ioarray givnum+      ldgnumPtr <- Call.cint ldgnum+      cPtr <- Call.alloca+      sPtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.lasd7 icompqPtr nlPtr nrPtr sqrePtr kPtr dPtr zPtr zwPtr vfPtr vfwPtr vlPtr vlwPtr alphaPtr betaPtr dsigmaPtr idxPtr idxpPtr idxqPtr permPtr givptrPtr givcolPtr ldgcolPtr givnumPtr ldgnumPtr cPtr sPtr infoPtr+      liftIO $ pure (,,,,,,,,,,,,,,)+         <*> fmap fromIntegral (peek kPtr)+         <*> Call.freezeArray z+         <*> Call.freezeArray zw+         <*> Call.freezeArray vfw+         <*> Call.freezeArray vlw+         <*> Call.freezeArray dsigma+         <*> Call.freezeArray idx+         <*> Call.freezeArray idxp+         <*> Call.freezeArray perm+         <*> fmap fromIntegral (peek givptrPtr)+         <*> Call.freezeArray givcol+         <*> Call.freezeArray givnum+         <*> peek cPtr+         <*> peek sPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasd8.f>+lasd8 ::+   Int {- ^ icompq -} ->+   IOArray ZeroInt Double {- ^ z -} ->+   IOArray ZeroInt Double {- ^ vf -} ->+   IOArray ZeroInt Double {- ^ vl -} ->+   Int {- ^ difrSize -} ->+   Int {- ^ lddifr -} ->+   IOArray ZeroInt Double {- ^ dsigma -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Int)+lasd8 icompq z vf vl difrSize lddifr dsigma = do+   let zDim0 = Call.sizes1 $ MutArray.shape z+   let vfDim0 = Call.sizes1 $ MutArray.shape vf+   let vlDim0 = Call.sizes1 $ MutArray.shape vl+   let dsigmaDim0 = Call.sizes1 $ MutArray.shape dsigma+   let k = zDim0+   Call.assert "lasd8: k == vfDim0" (k == vfDim0)+   Call.assert "lasd8: k == vlDim0" (k == vlDim0)+   Call.assert "lasd8: k == dsigmaDim0" (k == dsigmaDim0)+   d <- Call.newArray1 k+   difl <- Call.newArray1 k+   difr <- Call.newArray2 difrSize lddifr+   work <- Call.newArray1 (3*k)+   evalContT $ do+      icompqPtr <- Call.cint icompq+      kPtr <- Call.cint k+      dPtr <- Call.ioarray d+      zPtr <- Call.ioarray z+      vfPtr <- Call.ioarray vf+      vlPtr <- Call.ioarray vl+      diflPtr <- Call.ioarray difl+      difrPtr <- Call.ioarray difr+      lddifrPtr <- Call.cint lddifr+      dsigmaPtr <- Call.ioarray dsigma+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.lasd8 icompqPtr kPtr dPtr zPtr vfPtr vlPtr diflPtr difrPtr lddifrPtr dsigmaPtr workPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray d+         <*> Call.freezeArray difl+         <*> Call.freezeArray difr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasda.f>+lasda ::+   Int {- ^ icompq -} ->+   Int {- ^ smlsiz -} ->+   Int {- ^ sqre -} ->+   IOArray ZeroInt Double {- ^ d -} ->+   Array ZeroInt Double {- ^ e -} ->+   Int {- ^ uSize -} ->+   Int {- ^ ldu -} ->+   Int {- ^ vtSize -} ->+   Int {- ^ kSize -} ->+   Int {- ^ nlvl -} ->+   Int {- ^ difrSize -} ->+   Int {- ^ zSize -} ->+   Int {- ^ polesSize -} ->+   Int {- ^ givptrSize -} ->+   Int {- ^ givcolSize -} ->+   Int {- ^ ldgcol -} ->+   Int {- ^ permSize -} ->+   Int {- ^ givnumSize -} ->+   Int {- ^ cSize -} ->+   Int {- ^ sSize -} ->+   Int {- ^ workSize -} ->+   IO (Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double, Array ZeroInt CInt, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double, Array ZeroInt CInt, Array (ZeroInt,ZeroInt) CInt, Array (ZeroInt,ZeroInt) CInt, Array (ZeroInt,ZeroInt) Double, Array ZeroInt Double, Array ZeroInt Double, Int)+lasda icompq smlsiz sqre d e uSize ldu vtSize kSize nlvl difrSize zSize polesSize givptrSize givcolSize ldgcol permSize givnumSize cSize sSize workSize = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ Array.shape e+   let n = dDim0+   Call.ignore "lasda: m-1 == eDim0" eDim0+   u <- Call.newArray2 uSize ldu+   vt <- Call.newArray2 vtSize ldu+   k <- Call.newArray1 kSize+   difl <- Call.newArray2 nlvl ldu+   difr <- Call.newArray2 difrSize ldu+   z <- Call.newArray2 zSize ldu+   poles <- Call.newArray2 polesSize ldu+   givptr <- Call.newArray1 givptrSize+   givcol <- Call.newArray2 givcolSize ldgcol+   perm <- Call.newArray2 permSize ldgcol+   givnum <- Call.newArray2 givnumSize ldu+   c <- Call.newArray1 cSize+   s <- Call.newArray1 sSize+   work <- Call.newArray1 workSize+   iwork <- Call.newArray1 (7*n)+   evalContT $ do+      icompqPtr <- Call.cint icompq+      smlsizPtr <- Call.cint smlsiz+      nPtr <- Call.cint n+      sqrePtr <- Call.cint sqre+      dPtr <- Call.ioarray d+      ePtr <- Call.array e+      uPtr <- Call.ioarray u+      lduPtr <- Call.cint ldu+      vtPtr <- Call.ioarray vt+      kPtr <- Call.ioarray k+      diflPtr <- Call.ioarray difl+      difrPtr <- Call.ioarray difr+      zPtr <- Call.ioarray z+      polesPtr <- Call.ioarray poles+      givptrPtr <- Call.ioarray givptr+      givcolPtr <- Call.ioarray givcol+      ldgcolPtr <- Call.cint ldgcol+      permPtr <- Call.ioarray perm+      givnumPtr <- Call.ioarray givnum+      cPtr <- Call.ioarray c+      sPtr <- Call.ioarray s+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.lasda icompqPtr smlsizPtr nPtr sqrePtr dPtr ePtr uPtr lduPtr vtPtr kPtr diflPtr difrPtr zPtr polesPtr givptrPtr givcolPtr ldgcolPtr permPtr givnumPtr cPtr sPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,,,,,,,,,,,,,)+         <*> Call.freezeArray u+         <*> Call.freezeArray vt+         <*> Call.freezeArray k+         <*> Call.freezeArray difl+         <*> Call.freezeArray difr+         <*> Call.freezeArray z+         <*> Call.freezeArray poles+         <*> Call.freezeArray givptr+         <*> Call.freezeArray givcol+         <*> Call.freezeArray perm+         <*> Call.freezeArray givnum+         <*> Call.freezeArray c+         <*> Call.freezeArray s+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasdq.f>+lasdq ::+   Char {- ^ uplo -} ->+   Int {- ^ sqre -} ->+   Int {- ^ nru -} ->+   IOArray ZeroInt Double {- ^ d -} ->+   IOArray ZeroInt Double {- ^ e -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ vt -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ u -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ c -} ->+   IO (Int)+lasdq uplo sqre nru d e vt u c = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let (vtDim0,vtDim1) = Call.sizes2 $ MutArray.shape vt+   let (uDim0,uDim1) = Call.sizes2 $ MutArray.shape u+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let n = dDim0+   let ncvt = vtDim0+   let ldvt = vtDim1+   let ldu = uDim1+   let ncc = cDim0+   let ldc = cDim1+   Call.assert "lasdq: n-1+sqre == eDim0" (n-1+sqre == eDim0)+   Call.assert "lasdq: n == uDim0" (n == uDim0)+   work <- Call.newArray1 (4*n)+   evalContT $ do+      uploPtr <- Call.char uplo+      sqrePtr <- Call.cint sqre+      nPtr <- Call.cint n+      ncvtPtr <- Call.cint ncvt+      nruPtr <- Call.cint nru+      nccPtr <- Call.cint ncc+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      vtPtr <- Call.ioarray vt+      ldvtPtr <- Call.cint ldvt+      uPtr <- Call.ioarray u+      lduPtr <- Call.cint ldu+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.lasdq uploPtr sqrePtr nPtr ncvtPtr nruPtr nccPtr dPtr ePtr vtPtr ldvtPtr uPtr lduPtr cPtr ldcPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasdt.f>+lasdt ::+   Int {- ^ n -} ->+   Int {- ^ msub -} ->+   IO (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt)+lasdt n msub = do+   inode <- Call.newArray1 n+   ndiml <- Call.newArray1 n+   ndimr <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      lvlPtr <- Call.alloca+      ndPtr <- Call.alloca+      inodePtr <- Call.ioarray inode+      ndimlPtr <- Call.ioarray ndiml+      ndimrPtr <- Call.ioarray ndimr+      msubPtr <- Call.cint msub+      liftIO $ FFI.lasdt nPtr lvlPtr ndPtr inodePtr ndimlPtr ndimrPtr msubPtr+      liftIO $ pure (,,,,)+         <*> fmap fromIntegral (peek lvlPtr)+         <*> fmap fromIntegral (peek ndPtr)+         <*> Call.freezeArray inode+         <*> Call.freezeArray ndiml+         <*> Call.freezeArray ndimr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaset.f>+laset ::+   Char {- ^ uplo -} ->+   Int {- ^ m -} ->+   Int {- ^ n -} ->+   Double {- ^ alpha -} ->+   Double {- ^ beta -} ->+   Int {- ^ lda -} ->+   IO (Array (ZeroInt,ZeroInt) Double)+laset uplo m n alpha beta lda = do+   a <- Call.newArray2 n lda+   evalContT $ do+      uploPtr <- Call.char uplo+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      alphaPtr <- Call.double alpha+      betaPtr <- Call.double beta+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      liftIO $ FFI.laset uploPtr mPtr nPtr alphaPtr betaPtr aPtr ldaPtr+      liftIO $ Call.freezeArray a++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasq1.f>+lasq1 ::+   IOArray ZeroInt Double {- ^ d -} ->+   IOArray ZeroInt Double {- ^ e -} ->+   IO (Int)+lasq1 d e = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let n = dDim0+   Call.assert "lasq1: n == eDim0" (n == eDim0)+   work <- Call.newArray1 (4*n)+   evalContT $ do+      nPtr <- Call.cint n+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.lasq1 nPtr dPtr ePtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasq2.f>+lasq2 ::+   Int {- ^ n -} ->+   IOArray ZeroInt Double {- ^ z -} ->+   IO (Int)+lasq2 n z = do+   let zDim0 = Call.sizes1 $ MutArray.shape z+   Call.assert "lasq2: 4*n == zDim0" (4*n == zDim0)+   evalContT $ do+      nPtr <- Call.cint n+      zPtr <- Call.ioarray z+      infoPtr <- Call.alloca+      liftIO $ FFI.lasq2 nPtr zPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasq4.f>+lasq4 ::+   Int {- ^ i0 -} ->+   Int {- ^ n0 -} ->+   Array ZeroInt Double {- ^ z -} ->+   Int {- ^ pp -} ->+   Int {- ^ n0in -} ->+   Double {- ^ dmin -} ->+   Double {- ^ dmin1 -} ->+   Double {- ^ dmin2 -} ->+   Double {- ^ dn -} ->+   Double {- ^ dn1 -} ->+   Double {- ^ dn2 -} ->+   Double {- ^ g -} ->+   IO (Double, Int, Double)+lasq4 i0 n0 z pp n0in dmin dmin1 dmin2 dn dn1 dn2 g = do+   let zDim0 = Call.sizes1 $ Array.shape z+   Call.assert "lasq4: 4*n0 == zDim0" (4*n0 == zDim0)+   evalContT $ do+      i0Ptr <- Call.cint i0+      n0Ptr <- Call.cint n0+      zPtr <- Call.array z+      ppPtr <- Call.cint pp+      n0inPtr <- Call.cint n0in+      dminPtr <- Call.double dmin+      dmin1Ptr <- Call.double dmin1+      dmin2Ptr <- Call.double dmin2+      dnPtr <- Call.double dn+      dn1Ptr <- Call.double dn1+      dn2Ptr <- Call.double dn2+      tauPtr <- Call.alloca+      ttypePtr <- Call.alloca+      gPtr <- Call.double g+      liftIO $ FFI.lasq4 i0Ptr n0Ptr zPtr ppPtr n0inPtr dminPtr dmin1Ptr dmin2Ptr dnPtr dn1Ptr dn2Ptr tauPtr ttypePtr gPtr+      liftIO $ pure (,,)+         <*> peek tauPtr+         <*> fmap fromIntegral (peek ttypePtr)+         <*> peek gPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasq5.f>+lasq5 ::+   Int {- ^ i0 -} ->+   Int {- ^ n0 -} ->+   Array ZeroInt Double {- ^ z -} ->+   Int {- ^ pp -} ->+   Double {- ^ tau -} ->+   Double {- ^ sigma -} ->+   Bool {- ^ ieee -} ->+   Double {- ^ eps -} ->+   IO (Double, Double, Double, Double, Double, Double)+lasq5 i0 n0 z pp tau sigma ieee eps = do+   let zDim0 = Call.sizes1 $ Array.shape z+   Call.ignore "lasq5: 4*n == zDim0" zDim0+   evalContT $ do+      i0Ptr <- Call.cint i0+      n0Ptr <- Call.cint n0+      zPtr <- Call.array z+      ppPtr <- Call.cint pp+      tauPtr <- Call.double tau+      sigmaPtr <- Call.double sigma+      dminPtr <- Call.alloca+      dmin1Ptr <- Call.alloca+      dmin2Ptr <- Call.alloca+      dnPtr <- Call.alloca+      dnm1Ptr <- Call.alloca+      dnm2Ptr <- Call.alloca+      ieeePtr <- Call.bool ieee+      epsPtr <- Call.double eps+      liftIO $ FFI.lasq5 i0Ptr n0Ptr zPtr ppPtr tauPtr sigmaPtr dminPtr dmin1Ptr dmin2Ptr dnPtr dnm1Ptr dnm2Ptr ieeePtr epsPtr+      liftIO $ pure (,,,,,)+         <*> peek dminPtr+         <*> peek dmin1Ptr+         <*> peek dmin2Ptr+         <*> peek dnPtr+         <*> peek dnm1Ptr+         <*> peek dnm2Ptr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasq6.f>+lasq6 ::+   Int {- ^ i0 -} ->+   Int {- ^ n0 -} ->+   Array ZeroInt Double {- ^ z -} ->+   Int {- ^ pp -} ->+   IO (Double, Double, Double, Double, Double, Double)+lasq6 i0 n0 z pp = do+   let zDim0 = Call.sizes1 $ Array.shape z+   Call.ignore "lasq6: 4*n == zDim0" zDim0+   evalContT $ do+      i0Ptr <- Call.cint i0+      n0Ptr <- Call.cint n0+      zPtr <- Call.array z+      ppPtr <- Call.cint pp+      dminPtr <- Call.alloca+      dmin1Ptr <- Call.alloca+      dmin2Ptr <- Call.alloca+      dnPtr <- Call.alloca+      dnm1Ptr <- Call.alloca+      dnm2Ptr <- Call.alloca+      liftIO $ FFI.lasq6 i0Ptr n0Ptr zPtr ppPtr dminPtr dmin1Ptr dmin2Ptr dnPtr dnm1Ptr dnm2Ptr+      liftIO $ pure (,,,,,)+         <*> peek dminPtr+         <*> peek dmin1Ptr+         <*> peek dmin2Ptr+         <*> peek dnPtr+         <*> peek dnm1Ptr+         <*> peek dnm2Ptr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasr.f>+lasr ::+   Char {- ^ side -} ->+   Char {- ^ pivot -} ->+   Char {- ^ direct -} ->+   Int {- ^ m -} ->+   Array ZeroInt Double {- ^ c -} ->+   Array ZeroInt Double {- ^ s -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IO ()+lasr side pivot direct m c s a = do+   let cDim0 = Call.sizes1 $ Array.shape c+   let sDim0 = Call.sizes1 $ Array.shape s+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let _cSize = cDim0+   let _sSize = sDim0+   let n = aDim0+   let lda = aDim1+   evalContT $ do+      sidePtr <- Call.char side+      pivotPtr <- Call.char pivot+      directPtr <- Call.char direct+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      cPtr <- Call.array c+      sPtr <- Call.array s+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      liftIO $ FFI.lasr sidePtr pivotPtr directPtr mPtr nPtr cPtr sPtr aPtr ldaPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasrt.f>+lasrt ::+   Char {- ^ id_ -} ->+   IOArray ZeroInt Double {- ^ d -} ->+   IO (Int)+lasrt id_ d = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let n = dDim0+   evalContT $ do+      id_Ptr <- Call.char id_+      nPtr <- Call.cint n+      dPtr <- Call.ioarray d+      infoPtr <- Call.alloca+      liftIO $ FFI.lasrt id_Ptr nPtr dPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlassq.f>+lassq ::+   Array ZeroInt Double {- ^ x -} ->+   Int {- ^ incx -} ->+   Double {- ^ scale -} ->+   Double {- ^ sumsq -} ->+   IO (Double, Double)+lassq x incx scale sumsq = do+   let xDim0 = Call.sizes1 $ Array.shape x+   let n = xDim0+   evalContT $ do+      nPtr <- Call.cint n+      xPtr <- Call.array x+      incxPtr <- Call.cint incx+      scalePtr <- Call.double scale+      sumsqPtr <- Call.double sumsq+      liftIO $ FFI.lassq nPtr xPtr incxPtr scalePtr sumsqPtr+      liftIO $ pure (,)+         <*> peek scalePtr+         <*> peek sumsqPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasv2.f>+lasv2 ::+   Double {- ^ f -} ->+   Double {- ^ g -} ->+   Double {- ^ h -} ->+   IO (Double, Double, Double, Double, Double, Double)+lasv2 f g h = do+   evalContT $ do+      fPtr <- Call.double f+      gPtr <- Call.double g+      hPtr <- Call.double h+      ssminPtr <- Call.alloca+      ssmaxPtr <- Call.alloca+      snrPtr <- Call.alloca+      csrPtr <- Call.alloca+      snlPtr <- Call.alloca+      cslPtr <- Call.alloca+      liftIO $ FFI.lasv2 fPtr gPtr hPtr ssminPtr ssmaxPtr snrPtr csrPtr snlPtr cslPtr+      liftIO $ pure (,,,,,)+         <*> peek ssminPtr+         <*> peek ssmaxPtr+         <*> peek snrPtr+         <*> peek csrPtr+         <*> peek snlPtr+         <*> peek cslPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaswp.f>+laswp ::+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Int {- ^ k1 -} ->+   Int {- ^ k2 -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Int {- ^ incx -} ->+   IO ()+laswp a k1 k2 ipiv incx = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = aDim0+   let lda = aDim1+   Call.assert "laswp: k1+(k2-k1)*abs(incx) == ipivDim0" (k1+(k2-k1)*abs(incx) == ipivDim0)+   evalContT $ do+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      k1Ptr <- Call.cint k1+      k2Ptr <- Call.cint k2+      ipivPtr <- Call.array ipiv+      incxPtr <- Call.cint incx+      liftIO $ FFI.laswp nPtr aPtr ldaPtr k1Ptr k2Ptr ipivPtr incxPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasy2.f>+lasy2 ::+   Bool {- ^ ltranl -} ->+   Bool {- ^ ltranr -} ->+   Int {- ^ isgn -} ->+   Int {- ^ n1 -} ->+   Int {- ^ n2 -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ tl -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ tr -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->+   Int {- ^ ldx -} ->+   IO (Double, Array (ZeroInt,ZeroInt) Double, Double, Int)+lasy2 ltranl ltranr isgn n1 n2 tl tr b ldx = do+   let (tlDim0,tlDim1) = Call.sizes2 $ Array.shape tl+   let (trDim0,trDim1) = Call.sizes2 $ Array.shape tr+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let ldtl = tlDim1+   let ldtr = trDim1+   let ldb = bDim1+   Call.assert "lasy2: 2 == tlDim0" (2 == tlDim0)+   Call.assert "lasy2: 2 == trDim0" (2 == trDim0)+   Call.assert "lasy2: 2 == bDim0" (2 == bDim0)+   x <- Call.newArray2 2 ldx+   evalContT $ do+      ltranlPtr <- Call.bool ltranl+      ltranrPtr <- Call.bool ltranr+      isgnPtr <- Call.cint isgn+      n1Ptr <- Call.cint n1+      n2Ptr <- Call.cint n2+      tlPtr <- Call.array tl+      ldtlPtr <- Call.cint ldtl+      trPtr <- Call.array tr+      ldtrPtr <- Call.cint ldtr+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      scalePtr <- Call.alloca+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      xnormPtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.lasy2 ltranlPtr ltranrPtr isgnPtr n1Ptr n2Ptr tlPtr ldtlPtr trPtr ldtrPtr bPtr ldbPtr scalePtr xPtr ldxPtr xnormPtr infoPtr+      liftIO $ pure (,,,)+         <*> peek scalePtr+         <*> Call.freezeArray x+         <*> peek xnormPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasyf.f>+lasyf ::+   Char {- ^ uplo -} ->+   Int {- ^ nb -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Int {- ^ ldw -} ->+   IO (Int, Array ZeroInt CInt, Array (ZeroInt,ZeroInt) Double, Int)+lasyf uplo nb a ldw = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   ipiv <- Call.newArray1 n+   w <- Call.newArray2 nb ldw+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nbPtr <- Call.cint nb+      kbPtr <- Call.alloca+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.ioarray ipiv+      wPtr <- Call.ioarray w+      ldwPtr <- Call.cint ldw+      infoPtr <- Call.alloca+      liftIO $ FFI.lasyf uploPtr nPtr nbPtr kbPtr aPtr ldaPtr ipivPtr wPtr ldwPtr infoPtr+      liftIO $ pure (,,,)+         <*> fmap fromIntegral (peek kbPtr)+         <*> Call.freezeArray ipiv+         <*> Call.freezeArray w+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlat2s.f>+lat2s ::+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Int {- ^ ldsa -} ->+   IO (Array (ZeroInt,ZeroInt) Float, Int)+lat2s uplo a ldsa = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   sa <- Call.newArray2 n ldsa+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      saPtr <- Call.ioarray sa+      ldsaPtr <- Call.cint ldsa+      infoPtr <- Call.alloca+      liftIO $ FFI.lat2s uploPtr nPtr aPtr ldaPtr saPtr ldsaPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray sa+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlatbs.f>+latbs ::+   Char {- ^ uplo -} ->+   Char {- ^ trans -} ->+   Char {- ^ diag -} ->+   Char {- ^ normin -} ->+   Int {- ^ kd -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ ab -} ->+   IOArray ZeroInt Double {- ^ x -} ->+   IOArray ZeroInt Double {- ^ cnorm -} ->+   IO (Double, Int)+latbs uplo trans diag normin kd ab x cnorm = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let xDim0 = Call.sizes1 $ MutArray.shape x+   let cnormDim0 = Call.sizes1 $ MutArray.shape cnorm+   let n = abDim0+   let ldab = abDim1+   Call.assert "latbs: n == xDim0" (n == xDim0)+   Call.assert "latbs: n == cnormDim0" (n == cnormDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      transPtr <- Call.char trans+      diagPtr <- Call.char diag+      norminPtr <- Call.char normin+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      xPtr <- Call.ioarray x+      scalePtr <- Call.alloca+      cnormPtr <- Call.ioarray cnorm+      infoPtr <- Call.alloca+      liftIO $ FFI.latbs uploPtr transPtr diagPtr norminPtr nPtr kdPtr abPtr ldabPtr xPtr scalePtr cnormPtr infoPtr+      liftIO $ pure (,)+         <*> peek scalePtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlatdf.f>+latdf ::+   Int {- ^ ijob -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ z -} ->+   IOArray ZeroInt Double {- ^ rhs -} ->+   Double {- ^ rdsum -} ->+   Double {- ^ rdscal -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Array ZeroInt CInt {- ^ jpiv -} ->+   IO (Double, Double)+latdf ijob z rhs rdsum rdscal ipiv jpiv = do+   let (zDim0,zDim1) = Call.sizes2 $ Array.shape z+   let rhsDim0 = Call.sizes1 $ MutArray.shape rhs+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let jpivDim0 = Call.sizes1 $ Array.shape jpiv+   let n = zDim0+   let ldz = zDim1+   Call.assert "latdf: n == rhsDim0" (n == rhsDim0)+   Call.assert "latdf: n == ipivDim0" (n == ipivDim0)+   Call.assert "latdf: n == jpivDim0" (n == jpivDim0)+   evalContT $ do+      ijobPtr <- Call.cint ijob+      nPtr <- Call.cint n+      zPtr <- Call.array z+      ldzPtr <- Call.cint ldz+      rhsPtr <- Call.ioarray rhs+      rdsumPtr <- Call.double rdsum+      rdscalPtr <- Call.double rdscal+      ipivPtr <- Call.array ipiv+      jpivPtr <- Call.array jpiv+      liftIO $ FFI.latdf ijobPtr nPtr zPtr ldzPtr rhsPtr rdsumPtr rdscalPtr ipivPtr jpivPtr+      liftIO $ pure (,)+         <*> peek rdsumPtr+         <*> peek rdscalPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlatps.f>+latps ::+   Char {- ^ uplo -} ->+   Char {- ^ trans -} ->+   Char {- ^ diag -} ->+   Char {- ^ normin -} ->+   Array ZeroInt Double {- ^ ap -} ->+   IOArray ZeroInt Double {- ^ x -} ->+   IOArray ZeroInt Double {- ^ cnorm -} ->+   IO (Double, Int)+latps uplo trans diag normin ap x cnorm = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let xDim0 = Call.sizes1 $ MutArray.shape x+   let cnormDim0 = Call.sizes1 $ MutArray.shape cnorm+   let n = xDim0+   Call.assert "latps: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   Call.assert "latps: n == cnormDim0" (n == cnormDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      transPtr <- Call.char trans+      diagPtr <- Call.char diag+      norminPtr <- Call.char normin+      nPtr <- Call.cint n+      apPtr <- Call.array ap+      xPtr <- Call.ioarray x+      scalePtr <- Call.alloca+      cnormPtr <- Call.ioarray cnorm+      infoPtr <- Call.alloca+      liftIO $ FFI.latps uploPtr transPtr diagPtr norminPtr nPtr apPtr xPtr scalePtr cnormPtr infoPtr+      liftIO $ pure (,)+         <*> peek scalePtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlatrd.f>+latrd ::+   Char {- ^ uplo -} ->+   Int {- ^ nb -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Int {- ^ ldw -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double)+latrd uplo nb a ldw = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   e <- Call.newArray1 (n-1)+   tau <- Call.newArray1 (n-1)+   w <- Call.newArray2 nb ldw+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nbPtr <- Call.cint nb+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ePtr <- Call.ioarray e+      tauPtr <- Call.ioarray tau+      wPtr <- Call.ioarray w+      ldwPtr <- Call.cint ldw+      liftIO $ FFI.latrd uploPtr nPtr nbPtr aPtr ldaPtr ePtr tauPtr wPtr ldwPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray e+         <*> Call.freezeArray tau+         <*> Call.freezeArray w++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlatrs.f>+latrs ::+   Char {- ^ uplo -} ->+   Char {- ^ trans -} ->+   Char {- ^ diag -} ->+   Char {- ^ normin -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IOArray ZeroInt Double {- ^ x -} ->+   IOArray ZeroInt Double {- ^ cnorm -} ->+   IO (Double, Int)+latrs uplo trans diag normin a x cnorm = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let xDim0 = Call.sizes1 $ MutArray.shape x+   let cnormDim0 = Call.sizes1 $ MutArray.shape cnorm+   let n = aDim0+   let lda = aDim1+   Call.assert "latrs: n == xDim0" (n == xDim0)+   Call.assert "latrs: n == cnormDim0" (n == cnormDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      transPtr <- Call.char trans+      diagPtr <- Call.char diag+      norminPtr <- Call.char normin+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      xPtr <- Call.ioarray x+      scalePtr <- Call.alloca+      cnormPtr <- Call.ioarray cnorm+      infoPtr <- Call.alloca+      liftIO $ FFI.latrs uploPtr transPtr diagPtr norminPtr nPtr aPtr ldaPtr xPtr scalePtr cnormPtr infoPtr+      liftIO $ pure (,)+         <*> peek scalePtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlatrz.f>+latrz ::+   Int {- ^ m -} ->+   Int {- ^ l -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IO (Array ZeroInt Double)+latrz m l a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 m+   work <- Call.newArray1 m+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      lPtr <- Call.cint l+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      liftIO $ FFI.latrz mPtr nPtr lPtr aPtr ldaPtr tauPtr workPtr+      liftIO $ Call.freezeArray tau++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlauu2.f>+lauu2 ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IO (Int)+lauu2 uplo a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      infoPtr <- Call.alloca+      liftIO $ FFI.lauu2 uploPtr nPtr aPtr ldaPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlauum.f>+lauum ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IO (Int)+lauum uplo a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      infoPtr <- Call.alloca+      liftIO $ FFI.lauum uploPtr nPtr aPtr ldaPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorbdb.f>+orbdb ::+   Char {- ^ trans -} ->+   Char {- ^ signs -} ->+   Int {- ^ m -} ->+   Int {- ^ p -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ x11 -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ x12 -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ x21 -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ x22 -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Int)+orbdb trans signs m p x11 x12 x21 x22 lwork = do+   let (x11Dim0,x11Dim1) = Call.sizes2 $ MutArray.shape x11+   let (x12Dim0,x12Dim1) = Call.sizes2 $ MutArray.shape x12+   let (x21Dim0,x21Dim1) = Call.sizes2 $ MutArray.shape x21+   let (x22Dim0,x22Dim1) = Call.sizes2 $ MutArray.shape x22+   let q = x11Dim0+   let ldx11 = x11Dim1+   let ldx12 = x12Dim1+   let ldx21 = x21Dim1+   let ldx22 = x22Dim1+   Call.assert "orbdb: m-q == x12Dim0" (m-q == x12Dim0)+   Call.assert "orbdb: q == x21Dim0" (q == x21Dim0)+   Call.assert "orbdb: m-q == x22Dim0" (m-q == x22Dim0)+   theta <- Call.newArray1 q+   phi <- Call.newArray1 (q-1)+   taup1 <- Call.newArray1 p+   taup2 <- Call.newArray1 (m-p)+   tauq1 <- Call.newArray1 q+   tauq2 <- Call.newArray1 (m-q)+   work <- Call.newArray1 lwork+   evalContT $ do+      transPtr <- Call.char trans+      signsPtr <- Call.char signs+      mPtr <- Call.cint m+      pPtr <- Call.cint p+      qPtr <- Call.cint q+      x11Ptr <- Call.ioarray x11+      ldx11Ptr <- Call.cint ldx11+      x12Ptr <- Call.ioarray x12+      ldx12Ptr <- Call.cint ldx12+      x21Ptr <- Call.ioarray x21+      ldx21Ptr <- Call.cint ldx21+      x22Ptr <- Call.ioarray x22+      ldx22Ptr <- Call.cint ldx22+      thetaPtr <- Call.ioarray theta+      phiPtr <- Call.ioarray phi+      taup1Ptr <- Call.ioarray taup1+      taup2Ptr <- Call.ioarray taup2+      tauq1Ptr <- Call.ioarray tauq1+      tauq2Ptr <- Call.ioarray tauq2+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.orbdb transPtr signsPtr mPtr pPtr qPtr x11Ptr ldx11Ptr x12Ptr ldx12Ptr x21Ptr ldx21Ptr x22Ptr ldx22Ptr thetaPtr phiPtr taup1Ptr taup2Ptr tauq1Ptr tauq2Ptr workPtr lworkPtr infoPtr+      liftIO $ pure (,,,,,,)+         <*> Call.freezeArray theta+         <*> Call.freezeArray phi+         <*> Call.freezeArray taup1+         <*> Call.freezeArray taup2+         <*> Call.freezeArray tauq1+         <*> Call.freezeArray tauq2+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorcsd.f>+orcsd ::+   Char {- ^ jobu1 -} ->+   Char {- ^ jobu2 -} ->+   Char {- ^ jobv1t -} ->+   Char {- ^ jobv2t -} ->+   Char {- ^ trans -} ->+   Char {- ^ signs -} ->+   Int {- ^ m -} ->+   Int {- ^ p -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ x11 -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ x12 -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ x21 -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ x22 -} ->+   Int {- ^ r -} ->+   Int {- ^ ldu1 -} ->+   Int {- ^ ldu2 -} ->+   Int {- ^ ldv1t -} ->+   Int {- ^ ldv2t -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double, Int)+orcsd jobu1 jobu2 jobv1t jobv2t trans signs m p x11 x12 x21 x22 r ldu1 ldu2 ldv1t ldv2t lwork = do+   let (x11Dim0,x11Dim1) = Call.sizes2 $ MutArray.shape x11+   let (x12Dim0,x12Dim1) = Call.sizes2 $ MutArray.shape x12+   let (x21Dim0,x21Dim1) = Call.sizes2 $ MutArray.shape x21+   let (x22Dim0,x22Dim1) = Call.sizes2 $ MutArray.shape x22+   let q = x11Dim0+   let ldx11 = x11Dim1+   let ldx12 = x12Dim1+   let ldx21 = x21Dim1+   let ldx22 = x22Dim1+   Call.assert "orcsd: m-q == x12Dim0" (m-q == x12Dim0)+   Call.assert "orcsd: q == x21Dim0" (q == x21Dim0)+   Call.assert "orcsd: m-q == x22Dim0" (m-q == x22Dim0)+   theta <- Call.newArray1 r+   u1 <- Call.newArray2 p ldu1+   u2 <- Call.newArray2 (m-p) ldu2+   v1t <- Call.newArray2 q ldv1t+   v2t <- Call.newArray2 (m-q) ldv2t+   work <- Call.newArray1 (maximum[1,lwork])+   iwork <- Call.newArray1 (m-minimum[p,m-p,q,m-q])+   evalContT $ do+      jobu1Ptr <- Call.char jobu1+      jobu2Ptr <- Call.char jobu2+      jobv1tPtr <- Call.char jobv1t+      jobv2tPtr <- Call.char jobv2t+      transPtr <- Call.char trans+      signsPtr <- Call.char signs+      mPtr <- Call.cint m+      pPtr <- Call.cint p+      qPtr <- Call.cint q+      x11Ptr <- Call.ioarray x11+      ldx11Ptr <- Call.cint ldx11+      x12Ptr <- Call.ioarray x12+      ldx12Ptr <- Call.cint ldx12+      x21Ptr <- Call.ioarray x21+      ldx21Ptr <- Call.cint ldx21+      x22Ptr <- Call.ioarray x22+      ldx22Ptr <- Call.cint ldx22+      thetaPtr <- Call.ioarray theta+      u1Ptr <- Call.ioarray u1+      ldu1Ptr <- Call.cint ldu1+      u2Ptr <- Call.ioarray u2+      ldu2Ptr <- Call.cint ldu2+      v1tPtr <- Call.ioarray v1t+      ldv1tPtr <- Call.cint ldv1t+      v2tPtr <- Call.ioarray v2t+      ldv2tPtr <- Call.cint ldv2t+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.orcsd jobu1Ptr jobu2Ptr jobv1tPtr jobv2tPtr transPtr signsPtr mPtr pPtr qPtr x11Ptr ldx11Ptr x12Ptr ldx12Ptr x21Ptr ldx21Ptr x22Ptr ldx22Ptr thetaPtr u1Ptr ldu1Ptr u2Ptr ldu2Ptr v1tPtr ldv1tPtr v2tPtr ldv2tPtr workPtr lworkPtr iworkPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> Call.freezeArray theta+         <*> Call.freezeArray u1+         <*> Call.freezeArray u2+         <*> Call.freezeArray v1t+         <*> Call.freezeArray v2t+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpbcon.f>+pbcon ::+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ ab -} ->+   Double {- ^ anorm -} ->+   IO (Double, Int)+pbcon uplo kd ab anorm = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let n = abDim0+   let ldab = abDim1+   work <- Call.newArray1 (3*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      anormPtr <- Call.double anorm+      rcondPtr <- Call.alloca+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.pbcon uploPtr nPtr kdPtr abPtr ldabPtr anormPtr rcondPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,)+         <*> peek rcondPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpbequ.f>+pbequ ::+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ ab -} ->+   IO (Array ZeroInt Double, Double, Double, Int)+pbequ uplo kd ab = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let n = abDim0+   let ldab = abDim1+   s <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      sPtr <- Call.ioarray s+      scondPtr <- Call.alloca+      amaxPtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.pbequ uploPtr nPtr kdPtr abPtr ldabPtr sPtr scondPtr amaxPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray s+         <*> peek scondPtr+         <*> peek amaxPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpbrfs.f>+pbrfs ::+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ ab -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ afb -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ x -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Int)+pbrfs uplo kd ab afb b x = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let (afbDim0,afbDim1) = Call.sizes2 $ Array.shape afb+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (xDim0,xDim1) = Call.sizes2 $ MutArray.shape x+   let n = abDim0+   let ldab = abDim1+   let ldafb = afbDim1+   let nrhs = bDim0+   let ldb = bDim1+   let ldx = xDim1+   Call.assert "pbrfs: n == afbDim0" (n == afbDim0)+   Call.assert "pbrfs: nrhs == xDim0" (nrhs == xDim0)+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (3*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      nrhsPtr <- Call.cint nrhs+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      afbPtr <- Call.array afb+      ldafbPtr <- Call.cint ldafb+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.pbrfs uploPtr nPtr kdPtr nrhsPtr abPtr ldabPtr afbPtr ldafbPtr bPtr ldbPtr xPtr ldxPtr ferrPtr berrPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpbstf.f>+pbstf ::+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ ab -} ->+   IO (Int)+pbstf uplo kd ab = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let n = abDim0+   let ldab = abDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      infoPtr <- Call.alloca+      liftIO $ FFI.pbstf uploPtr nPtr kdPtr abPtr ldabPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpbsv.f>+pbsv ::+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ ab -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   IO (Int)+pbsv uplo kd ab b = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = abDim0+   let ldab = abDim1+   let nrhs = bDim0+   let ldb = bDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      nrhsPtr <- Call.cint nrhs+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.pbsv uploPtr nPtr kdPtr nrhsPtr abPtr ldabPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpbsvx.f>+pbsvx ::+   Char {- ^ fact -} ->+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ ab -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ afb -} ->+   Char {- ^ equed -} ->+   IOArray ZeroInt Double {- ^ s -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   Int {- ^ ldx -} ->+   IO (Char, Array (ZeroInt,ZeroInt) Double, Double, Array ZeroInt Double, Array ZeroInt Double, Int)+pbsvx fact uplo kd ab afb equed s b ldx = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let (afbDim0,afbDim1) = Call.sizes2 $ MutArray.shape afb+   let sDim0 = Call.sizes1 $ MutArray.shape s+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = abDim0+   let ldab = abDim1+   let ldafb = afbDim1+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "pbsvx: n == afbDim0" (n == afbDim0)+   Call.assert "pbsvx: n == sDim0" (n == sDim0)+   x <- Call.newArray2 nrhs ldx+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (3*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      factPtr <- Call.char fact+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      nrhsPtr <- Call.cint nrhs+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      afbPtr <- Call.ioarray afb+      ldafbPtr <- Call.cint ldafb+      equedPtr <- Call.char equed+      sPtr <- Call.ioarray s+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      rcondPtr <- Call.alloca+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.pbsvx factPtr uploPtr nPtr kdPtr nrhsPtr abPtr ldabPtr afbPtr ldafbPtr equedPtr sPtr bPtr ldbPtr xPtr ldxPtr rcondPtr ferrPtr berrPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> fmap castCCharToChar (peek equedPtr)+         <*> Call.freezeArray x+         <*> peek rcondPtr+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpbtf2.f>+pbtf2 ::+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ ab -} ->+   IO (Int)+pbtf2 uplo kd ab = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let n = abDim0+   let ldab = abDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      infoPtr <- Call.alloca+      liftIO $ FFI.pbtf2 uploPtr nPtr kdPtr abPtr ldabPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpbtrf.f>+pbtrf ::+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ ab -} ->+   IO (Int)+pbtrf uplo kd ab = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let n = abDim0+   let ldab = abDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      infoPtr <- Call.alloca+      liftIO $ FFI.pbtrf uploPtr nPtr kdPtr abPtr ldabPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpbtrs.f>+pbtrs ::+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ ab -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   IO (Int)+pbtrs uplo kd ab b = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = abDim0+   let ldab = abDim1+   let nrhs = bDim0+   let ldb = bDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      nrhsPtr <- Call.cint nrhs+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.pbtrs uploPtr nPtr kdPtr nrhsPtr abPtr ldabPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpftrf.f>+pftrf ::+   Char {- ^ transr -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt Double {- ^ a -} ->+   IO (Int)+pftrf transr uplo n a = do+   let aDim0 = Call.sizes1 $ MutArray.shape a+   Call.assert "pftrf: n*(n+1)`div`2 == aDim0" (n*(n+1)`div`2 == aDim0)+   evalContT $ do+      transrPtr <- Call.char transr+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      infoPtr <- Call.alloca+      liftIO $ FFI.pftrf transrPtr uploPtr nPtr aPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpftri.f>+pftri ::+   Char {- ^ transr -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt Double {- ^ a -} ->+   IO (Int)+pftri transr uplo n a = do+   let aDim0 = Call.sizes1 $ MutArray.shape a+   Call.assert "pftri: n*(n+1)`div`2 == aDim0" (n*(n+1)`div`2 == aDim0)+   evalContT $ do+      transrPtr <- Call.char transr+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      infoPtr <- Call.alloca+      liftIO $ FFI.pftri transrPtr uploPtr nPtr aPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpftrs.f>+pftrs ::+   Char {- ^ transr -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Array ZeroInt Double {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   IO (Int)+pftrs transr uplo n a b = do+   let aDim0 = Call.sizes1 $ Array.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "pftrs: n*(n+1)`div`2 == aDim0" (n*(n+1)`div`2 == aDim0)+   evalContT $ do+      transrPtr <- Call.char transr+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.array a+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.pftrs transrPtr uploPtr nPtr nrhsPtr aPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpocon.f>+pocon ::+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Double {- ^ anorm -} ->+   IO (Double, Int)+pocon uplo a anorm = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   work <- Call.newArray1 (3*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      anormPtr <- Call.double anorm+      rcondPtr <- Call.alloca+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.pocon uploPtr nPtr aPtr ldaPtr anormPtr rcondPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,)+         <*> peek rcondPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpoequ.f>+poequ ::+   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IO (Array ZeroInt Double, Double, Double, Int)+poequ a = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   s <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      sPtr <- Call.ioarray s+      scondPtr <- Call.alloca+      amaxPtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.poequ nPtr aPtr ldaPtr sPtr scondPtr amaxPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray s+         <*> peek scondPtr+         <*> peek amaxPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpoequb.f>+poequb ::+   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IO (Array ZeroInt Double, Double, Double, Int)+poequb a = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   s <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      sPtr <- Call.ioarray s+      scondPtr <- Call.alloca+      amaxPtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.poequb nPtr aPtr ldaPtr sPtr scondPtr amaxPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray s+         <*> peek scondPtr+         <*> peek amaxPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dporfs.f>+porfs ::+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ af -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ x -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Int)+porfs uplo a af b x = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (afDim0,afDim1) = Call.sizes2 $ Array.shape af+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (xDim0,xDim1) = Call.sizes2 $ MutArray.shape x+   let n = aDim0+   let lda = aDim1+   let ldaf = afDim1+   let nrhs = bDim0+   let ldb = bDim1+   let ldx = xDim1+   Call.assert "porfs: n == afDim0" (n == afDim0)+   Call.assert "porfs: nrhs == xDim0" (nrhs == xDim0)+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (3*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      afPtr <- Call.array af+      ldafPtr <- Call.cint ldaf+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.porfs uploPtr nPtr nrhsPtr aPtr ldaPtr afPtr ldafPtr bPtr ldbPtr xPtr ldxPtr ferrPtr berrPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dposv.f>+posv ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   IO (Int)+posv uplo a b = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.posv uploPtr nPtr nrhsPtr aPtr ldaPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dposvx.f>+posvx ::+   Char {- ^ fact -} ->+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ af -} ->+   Char {- ^ equed -} ->+   IOArray ZeroInt Double {- ^ s -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   Int {- ^ ldx -} ->+   IO (Char, Array (ZeroInt,ZeroInt) Double, Double, Array ZeroInt Double, Array ZeroInt Double, Int)+posvx fact uplo a af equed s b ldx = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (afDim0,afDim1) = Call.sizes2 $ MutArray.shape af+   let sDim0 = Call.sizes1 $ MutArray.shape s+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let ldaf = afDim1+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "posvx: n == afDim0" (n == afDim0)+   Call.assert "posvx: n == sDim0" (n == sDim0)+   x <- Call.newArray2 nrhs ldx+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (3*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      factPtr <- Call.char fact+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      afPtr <- Call.ioarray af+      ldafPtr <- Call.cint ldaf+      equedPtr <- Call.char equed+      sPtr <- Call.ioarray s+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      rcondPtr <- Call.alloca+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.posvx factPtr uploPtr nPtr nrhsPtr aPtr ldaPtr afPtr ldafPtr equedPtr sPtr bPtr ldbPtr xPtr ldxPtr rcondPtr ferrPtr berrPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> fmap castCCharToChar (peek equedPtr)+         <*> Call.freezeArray x+         <*> peek rcondPtr+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpotf2.f>+potf2 ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IO (Int)+potf2 uplo a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      infoPtr <- Call.alloca+      liftIO $ FFI.potf2 uploPtr nPtr aPtr ldaPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpotrf.f>+potrf ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IO (Int)+potrf uplo a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      infoPtr <- Call.alloca+      liftIO $ FFI.potrf uploPtr nPtr aPtr ldaPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpotri.f>+potri ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IO (Int)+potri uplo a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      infoPtr <- Call.alloca+      liftIO $ FFI.potri uploPtr nPtr aPtr ldaPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpotrs.f>+potrs ::+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   IO (Int)+potrs uplo a b = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.potrs uploPtr nPtr nrhsPtr aPtr ldaPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dppcon.f>+ppcon ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Array ZeroInt Double {- ^ ap -} ->+   Double {- ^ anorm -} ->+   IO (Double, Int)+ppcon uplo n ap anorm = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   Call.assert "ppcon: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   work <- Call.newArray1 (3*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.array ap+      anormPtr <- Call.double anorm+      rcondPtr <- Call.alloca+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ppcon uploPtr nPtr apPtr anormPtr rcondPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,)+         <*> peek rcondPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dppequ.f>+ppequ ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Array ZeroInt Double {- ^ ap -} ->+   IO (Array ZeroInt Double, Double, Double, Int)+ppequ uplo n ap = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   Call.assert "ppequ: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   s <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.array ap+      sPtr <- Call.ioarray s+      scondPtr <- Call.alloca+      amaxPtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.ppequ uploPtr nPtr apPtr sPtr scondPtr amaxPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray s+         <*> peek scondPtr+         <*> peek amaxPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpprfs.f>+pprfs ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Array ZeroInt Double {- ^ ap -} ->+   Array ZeroInt Double {- ^ afp -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ x -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Int)+pprfs uplo n ap afp b x = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let afpDim0 = Call.sizes1 $ Array.shape afp+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (xDim0,xDim1) = Call.sizes2 $ MutArray.shape x+   let nrhs = bDim0+   let ldb = bDim1+   let ldx = xDim1+   Call.assert "pprfs: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   Call.assert "pprfs: n*(n+1)`div`2 == afpDim0" (n*(n+1)`div`2 == afpDim0)+   Call.assert "pprfs: nrhs == xDim0" (nrhs == xDim0)+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (3*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      apPtr <- Call.array ap+      afpPtr <- Call.array afp+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.pprfs uploPtr nPtr nrhsPtr apPtr afpPtr bPtr ldbPtr xPtr ldxPtr ferrPtr berrPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dppsv.f>+ppsv ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt Double {- ^ ap -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   IO (Int)+ppsv uplo n ap b = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "ppsv: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      apPtr <- Call.ioarray ap+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.ppsv uploPtr nPtr nrhsPtr apPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dppsvx.f>+ppsvx ::+   Char {- ^ fact -} ->+   Char {- ^ uplo -} ->+   IOArray ZeroInt Double {- ^ ap -} ->+   IOArray ZeroInt Double {- ^ afp -} ->+   Char {- ^ equed -} ->+   IOArray ZeroInt Double {- ^ s -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   Int {- ^ ldx -} ->+   IO (Char, Array (ZeroInt,ZeroInt) Double, Double, Array ZeroInt Double, Array ZeroInt Double, Int)+ppsvx fact uplo ap afp equed s b ldx = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   let afpDim0 = Call.sizes1 $ MutArray.shape afp+   let sDim0 = Call.sizes1 $ MutArray.shape s+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = sDim0+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "ppsvx: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   Call.assert "ppsvx: n*(n+1)`div`2 == afpDim0" (n*(n+1)`div`2 == afpDim0)+   x <- Call.newArray2 nrhs ldx+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (3*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      factPtr <- Call.char fact+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      apPtr <- Call.ioarray ap+      afpPtr <- Call.ioarray afp+      equedPtr <- Call.char equed+      sPtr <- Call.ioarray s+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      rcondPtr <- Call.alloca+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ppsvx factPtr uploPtr nPtr nrhsPtr apPtr afpPtr equedPtr sPtr bPtr ldbPtr xPtr ldxPtr rcondPtr ferrPtr berrPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> fmap castCCharToChar (peek equedPtr)+         <*> Call.freezeArray x+         <*> peek rcondPtr+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpptrf.f>+pptrf ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt Double {- ^ ap -} ->+   IO (Int)+pptrf uplo n ap = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   Call.assert "pptrf: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      infoPtr <- Call.alloca+      liftIO $ FFI.pptrf uploPtr nPtr apPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpptri.f>+pptri ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt Double {- ^ ap -} ->+   IO (Int)+pptri uplo n ap = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   Call.assert "pptri: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      infoPtr <- Call.alloca+      liftIO $ FFI.pptri uploPtr nPtr apPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpptrs.f>+pptrs ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Array ZeroInt Double {- ^ ap -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   IO (Int)+pptrs uplo n ap b = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "pptrs: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      apPtr <- Call.array ap+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.pptrs uploPtr nPtr nrhsPtr apPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpstf2.f>+pstf2 ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Double {- ^ tol -} ->+   IO (Array ZeroInt CInt, Int, Int)+pstf2 uplo a tol = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   piv <- Call.newArray1 n+   work <- Call.newArray1 (2*n)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      pivPtr <- Call.ioarray piv+      rankPtr <- Call.alloca+      tolPtr <- Call.double tol+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.pstf2 uploPtr nPtr aPtr ldaPtr pivPtr rankPtr tolPtr workPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray piv+         <*> fmap fromIntegral (peek rankPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpstrf.f>+pstrf ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Double {- ^ tol -} ->+   IO (Array ZeroInt CInt, Int, Int)+pstrf uplo a tol = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   piv <- Call.newArray1 n+   work <- Call.newArray1 (2*n)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      pivPtr <- Call.ioarray piv+      rankPtr <- Call.alloca+      tolPtr <- Call.double tol+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.pstrf uploPtr nPtr aPtr ldaPtr pivPtr rankPtr tolPtr workPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray piv+         <*> fmap fromIntegral (peek rankPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dptcon.f>+ptcon ::+   Array ZeroInt Double {- ^ d -} ->+   Array ZeroInt Double {- ^ e -} ->+   Double {- ^ anorm -} ->+   IO (Double, Int)+ptcon d e anorm = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let eDim0 = Call.sizes1 $ Array.shape e+   let n = dDim0+   Call.assert "ptcon: n-1 == eDim0" (n-1 == eDim0)+   work <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      dPtr <- Call.array d+      ePtr <- Call.array e+      anormPtr <- Call.double anorm+      rcondPtr <- Call.alloca+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.ptcon nPtr dPtr ePtr anormPtr rcondPtr workPtr infoPtr+      liftIO $ pure (,)+         <*> peek rcondPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpteqr.f>+pteqr ::+   Char {- ^ compz -} ->+   IOArray ZeroInt Double {- ^ d -} ->+   IOArray ZeroInt Double {- ^ e -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ z -} ->+   IO (Int)+pteqr compz d e z = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = dDim0+   let ldz = zDim1+   Call.assert "pteqr: n-1 == eDim0" (n-1 == eDim0)+   Call.assert "pteqr: n == zDim0" (n == zDim0)+   work <- Call.newArray1 (4*n)+   evalContT $ do+      compzPtr <- Call.char compz+      nPtr <- Call.cint n+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.pteqr compzPtr nPtr dPtr ePtr zPtr ldzPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dptrfs.f>+ptrfs ::+   Array ZeroInt Double {- ^ d -} ->+   Array ZeroInt Double {- ^ e -} ->+   Array ZeroInt Double {- ^ df -} ->+   Array ZeroInt Double {- ^ ef -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ x -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Int)+ptrfs d e df ef b x = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let eDim0 = Call.sizes1 $ Array.shape e+   let dfDim0 = Call.sizes1 $ Array.shape df+   let efDim0 = Call.sizes1 $ Array.shape ef+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (xDim0,xDim1) = Call.sizes2 $ MutArray.shape x+   let n = dDim0+   let nrhs = bDim0+   let ldb = bDim1+   let ldx = xDim1+   Call.assert "ptrfs: n-1 == eDim0" (n-1 == eDim0)+   Call.assert "ptrfs: n == dfDim0" (n == dfDim0)+   Call.assert "ptrfs: n-1 == efDim0" (n-1 == efDim0)+   Call.assert "ptrfs: nrhs == xDim0" (nrhs == xDim0)+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (2*n)+   evalContT $ do+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      dPtr <- Call.array d+      ePtr <- Call.array e+      dfPtr <- Call.array df+      efPtr <- Call.array ef+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.ptrfs nPtr nrhsPtr dPtr ePtr dfPtr efPtr bPtr ldbPtr xPtr ldxPtr ferrPtr berrPtr workPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dptsv.f>+ptsv ::+   IOArray ZeroInt Double {- ^ d -} ->+   IOArray ZeroInt Double {- ^ e -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   IO (Int)+ptsv d e b = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = dDim0+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "ptsv: n-1 == eDim0" (n-1 == eDim0)+   evalContT $ do+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.ptsv nPtr nrhsPtr dPtr ePtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dptsvx.f>+ptsvx ::+   Char {- ^ fact -} ->+   Array ZeroInt Double {- ^ d -} ->+   Array ZeroInt Double {- ^ e -} ->+   IOArray ZeroInt Double {- ^ df -} ->+   IOArray ZeroInt Double {- ^ ef -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->+   Int {- ^ ldx -} ->+   IO (Array (ZeroInt,ZeroInt) Double, Double, Array ZeroInt Double, Array ZeroInt Double, Int)+ptsvx fact d e df ef b ldx = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let eDim0 = Call.sizes1 $ Array.shape e+   let dfDim0 = Call.sizes1 $ MutArray.shape df+   let efDim0 = Call.sizes1 $ MutArray.shape ef+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let n = dDim0+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "ptsvx: n-1 == eDim0" (n-1 == eDim0)+   Call.assert "ptsvx: n == dfDim0" (n == dfDim0)+   Call.assert "ptsvx: n-1 == efDim0" (n-1 == efDim0)+   x <- Call.newArray2 nrhs ldx+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (2*n)+   evalContT $ do+      factPtr <- Call.char fact+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      dPtr <- Call.array d+      ePtr <- Call.array e+      dfPtr <- Call.ioarray df+      efPtr <- Call.ioarray ef+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      rcondPtr <- Call.alloca+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.ptsvx factPtr nPtr nrhsPtr dPtr ePtr dfPtr efPtr bPtr ldbPtr xPtr ldxPtr rcondPtr ferrPtr berrPtr workPtr infoPtr+      liftIO $ pure (,,,,)+         <*> Call.freezeArray x+         <*> peek rcondPtr+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpttrf.f>+pttrf ::+   IOArray ZeroInt Double {- ^ d -} ->+   IOArray ZeroInt Double {- ^ e -} ->+   IO (Int)+pttrf d e = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let n = dDim0+   Call.assert "pttrf: n-1 == eDim0" (n-1 == eDim0)+   evalContT $ do+      nPtr <- Call.cint n+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      infoPtr <- Call.alloca+      liftIO $ FFI.pttrf nPtr dPtr ePtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpttrs.f>+pttrs ::+   Array ZeroInt Double {- ^ d -} ->+   Array ZeroInt Double {- ^ e -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   IO (Int)+pttrs d e b = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let eDim0 = Call.sizes1 $ Array.shape e+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = dDim0+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "pttrs: n-1 == eDim0" (n-1 == eDim0)+   evalContT $ do+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      dPtr <- Call.array d+      ePtr <- Call.array e+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.pttrs nPtr nrhsPtr dPtr ePtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dptts2.f>+ptts2 ::+   Array ZeroInt Double {- ^ d -} ->+   Array ZeroInt Double {- ^ e -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   IO ()+ptts2 d e b = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let eDim0 = Call.sizes1 $ Array.shape e+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = dDim0+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "ptts2: n-1 == eDim0" (n-1 == eDim0)+   evalContT $ do+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      dPtr <- Call.array d+      ePtr <- Call.array e+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      liftIO $ FFI.ptts2 nPtr nrhsPtr dPtr ePtr bPtr ldbPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/drscl.f>+rscl ::+   Int {- ^ n -} ->+   Double {- ^ sa -} ->+   IOArray ZeroInt Double {- ^ sx -} ->+   Int {- ^ incx -} ->+   IO ()+rscl n sa sx incx = do+   let sxDim0 = Call.sizes1 $ MutArray.shape sx+   let _sxSize = sxDim0+   evalContT $ do+      nPtr <- Call.cint n+      saPtr <- Call.double sa+      sxPtr <- Call.ioarray sx+      incxPtr <- Call.cint incx+      liftIO $ FFI.rscl nPtr saPtr sxPtr incxPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsgesv.f>+sgesv ::+   Int {- ^ n -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->+   Int {- ^ ldx -} ->+   IO (Array ZeroInt CInt, Array (ZeroInt,ZeroInt) Double, Int, Int)+sgesv n a b ldx = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let _aSize = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   ipiv <- Call.newArray1 n+   x <- Call.newArray2 nrhs ldx+   work <- Call.newArray2 nrhs n+   swork <- Call.newArray1 (n*(n+nrhs))+   evalContT $ do+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.ioarray ipiv+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      workPtr <- Call.ioarray work+      sworkPtr <- Call.ioarray swork+      iterPtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.sgesv nPtr nrhsPtr aPtr ldaPtr ipivPtr bPtr ldbPtr xPtr ldxPtr workPtr sworkPtr iterPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray ipiv+         <*> Call.freezeArray x+         <*> fmap fromIntegral (peek iterPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dspcon.f>+spcon ::+   Char {- ^ uplo -} ->+   Array ZeroInt Double {- ^ ap -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Double {- ^ anorm -} ->+   IO (Double, Int)+spcon uplo ap ipiv anorm = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = ipivDim0+   Call.assert "spcon: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   work <- Call.newArray1 (2*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.array ap+      ipivPtr <- Call.array ipiv+      anormPtr <- Call.double anorm+      rcondPtr <- Call.alloca+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.spcon uploPtr nPtr apPtr ipivPtr anormPtr rcondPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,)+         <*> peek rcondPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsposv.f>+sposv ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->+   Int {- ^ ldx -} ->+   IO (Array (ZeroInt,ZeroInt) Double, Int, Int)+sposv uplo n a b ldx = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let _aSize = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   x <- Call.newArray2 nrhs ldx+   work <- Call.newArray2 nrhs n+   swork <- Call.newArray1 (n*(n+nrhs))+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      workPtr <- Call.ioarray work+      sworkPtr <- Call.ioarray swork+      iterPtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.sposv uploPtr nPtr nrhsPtr aPtr ldaPtr bPtr ldbPtr xPtr ldxPtr workPtr sworkPtr iterPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray x+         <*> fmap fromIntegral (peek iterPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsprfs.f>+sprfs ::+   Char {- ^ uplo -} ->+   Array ZeroInt Double {- ^ ap -} ->+   Array ZeroInt Double {- ^ afp -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ x -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Int)+sprfs uplo ap afp ipiv b x = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let afpDim0 = Call.sizes1 $ Array.shape afp+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (xDim0,xDim1) = Call.sizes2 $ MutArray.shape x+   let n = ipivDim0+   let nrhs = bDim0+   let ldb = bDim1+   let ldx = xDim1+   Call.assert "sprfs: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   Call.assert "sprfs: n*(n+1)`div`2 == afpDim0" (n*(n+1)`div`2 == afpDim0)+   Call.assert "sprfs: nrhs == xDim0" (nrhs == xDim0)+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (3*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      apPtr <- Call.array ap+      afpPtr <- Call.array afp+      ipivPtr <- Call.array ipiv+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.sprfs uploPtr nPtr nrhsPtr apPtr afpPtr ipivPtr bPtr ldbPtr xPtr ldxPtr ferrPtr berrPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dspsv.f>+spsv ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt Double {- ^ ap -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   IO (Array ZeroInt CInt, Int)+spsv uplo n ap b = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "spsv: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   ipiv <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      apPtr <- Call.ioarray ap+      ipivPtr <- Call.ioarray ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.spsv uploPtr nPtr nrhsPtr apPtr ipivPtr bPtr ldbPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dspsvx.f>+spsvx ::+   Char {- ^ fact -} ->+   Char {- ^ uplo -} ->+   Array ZeroInt Double {- ^ ap -} ->+   IOArray ZeroInt Double {- ^ afp -} ->+   IOArray ZeroInt CInt {- ^ ipiv -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->+   Int {- ^ ldx -} ->+   IO (Array (ZeroInt,ZeroInt) Double, Double, Array ZeroInt Double, Array ZeroInt Double, Int)+spsvx fact uplo ap afp ipiv b ldx = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let afpDim0 = Call.sizes1 $ MutArray.shape afp+   let ipivDim0 = Call.sizes1 $ MutArray.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let n = ipivDim0+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "spsvx: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   Call.assert "spsvx: n*(n+1)`div`2 == afpDim0" (n*(n+1)`div`2 == afpDim0)+   x <- Call.newArray2 nrhs ldx+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (3*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      factPtr <- Call.char fact+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      apPtr <- Call.array ap+      afpPtr <- Call.ioarray afp+      ipivPtr <- Call.ioarray ipiv+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      rcondPtr <- Call.alloca+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.spsvx factPtr uploPtr nPtr nrhsPtr apPtr afpPtr ipivPtr bPtr ldbPtr xPtr ldxPtr rcondPtr ferrPtr berrPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,,,,)+         <*> Call.freezeArray x+         <*> peek rcondPtr+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsptrf.f>+sptrf ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt Double {- ^ ap -} ->+   IO (Array ZeroInt CInt, Int)+sptrf uplo n ap = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   Call.assert "sptrf: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   ipiv <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      ipivPtr <- Call.ioarray ipiv+      infoPtr <- Call.alloca+      liftIO $ FFI.sptrf uploPtr nPtr apPtr ipivPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsptri.f>+sptri ::+   Char {- ^ uplo -} ->+   IOArray ZeroInt Double {- ^ ap -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   IO (Int)+sptri uplo ap ipiv = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = ipivDim0+   Call.assert "sptri: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   work <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      ipivPtr <- Call.array ipiv+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.sptri uploPtr nPtr apPtr ipivPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsptrs.f>+sptrs ::+   Char {- ^ uplo -} ->+   Array ZeroInt Double {- ^ ap -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   IO (Int)+sptrs uplo ap ipiv b = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = ipivDim0+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "sptrs: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      apPtr <- Call.array ap+      ipivPtr <- Call.array ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.sptrs uploPtr nPtr nrhsPtr apPtr ipivPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dstebz.f>+stebz ::+   Char {- ^ range -} ->+   Char {- ^ order -} ->+   Double {- ^ vl -} ->+   Double {- ^ vu -} ->+   Int {- ^ il -} ->+   Int {- ^ iu -} ->+   Double {- ^ abstol -} ->+   Array ZeroInt Double {- ^ d -} ->+   Array ZeroInt Double {- ^ e -} ->+   IO (Int, Int, Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt, Int)+stebz range order vl vu il iu abstol d e = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let eDim0 = Call.sizes1 $ Array.shape e+   let n = dDim0+   Call.assert "stebz: n-1 == eDim0" (n-1 == eDim0)+   w <- Call.newArray1 n+   iblock <- Call.newArray1 n+   isplit <- Call.newArray1 n+   work <- Call.newArray1 (4*n)+   iwork <- Call.newArray1 (3*n)+   evalContT $ do+      rangePtr <- Call.char range+      orderPtr <- Call.char order+      nPtr <- Call.cint n+      vlPtr <- Call.double vl+      vuPtr <- Call.double vu+      ilPtr <- Call.cint il+      iuPtr <- Call.cint iu+      abstolPtr <- Call.double abstol+      dPtr <- Call.array d+      ePtr <- Call.array e+      mPtr <- Call.alloca+      nsplitPtr <- Call.alloca+      wPtr <- Call.ioarray w+      iblockPtr <- Call.ioarray iblock+      isplitPtr <- Call.ioarray isplit+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.stebz rangePtr orderPtr nPtr vlPtr vuPtr ilPtr iuPtr abstolPtr dPtr ePtr mPtr nsplitPtr wPtr iblockPtr isplitPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> fmap fromIntegral (peek mPtr)+         <*> fmap fromIntegral (peek nsplitPtr)+         <*> Call.freezeArray w+         <*> Call.freezeArray iblock+         <*> Call.freezeArray isplit+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dstedc.f>+stedc ::+   Char {- ^ compz -} ->+   IOArray ZeroInt Double {- ^ d -} ->+   IOArray ZeroInt Double {- ^ e -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ z -} ->+   Int {- ^ lwork -} ->+   Int {- ^ liwork -} ->+   IO (Int)+stedc compz d e z lwork liwork = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = dDim0+   let ldz = zDim1+   Call.assert "stedc: n-1 == eDim0" (n-1 == eDim0)+   Call.assert "stedc: n == zDim0" (n == zDim0)+   work <- Call.newArray1 (maximum[1,lwork])+   iwork <- Call.newArray1 (maximum[1,liwork])+   evalContT $ do+      compzPtr <- Call.char compz+      nPtr <- Call.cint n+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      infoPtr <- Call.alloca+      liftIO $ FFI.stedc compzPtr nPtr dPtr ePtr zPtr ldzPtr workPtr lworkPtr iworkPtr liworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dstegr.f>+stegr ::+   Char {- ^ jobz -} ->+   Char {- ^ range -} ->+   IOArray ZeroInt Double {- ^ d -} ->+   IOArray ZeroInt Double {- ^ e -} ->+   Double {- ^ vl -} ->+   Double {- ^ vu -} ->+   Int {- ^ il -} ->+   Int {- ^ iu -} ->+   Double {- ^ abstol -} ->+   Int {- ^ m -} ->+   Int {- ^ ldz -} ->+   Int {- ^ lwork -} ->+   Int {- ^ liwork -} ->+   IO (Int, Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array ZeroInt CInt, Int)+stegr jobz range d e vl vu il iu abstol m ldz lwork liwork = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let n = dDim0+   Call.assert "stegr: n == eDim0" (n == eDim0)+   w <- Call.newArray1 n+   z <- Call.newArray2 (maximum[1,m]) ldz+   isuppz <- Call.newArray1 (2*maximum[1,m])+   work <- Call.newArray1 lwork+   iwork <- Call.newArray1 liwork+   evalContT $ do+      jobzPtr <- Call.char jobz+      rangePtr <- Call.char range+      nPtr <- Call.cint n+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      vlPtr <- Call.double vl+      vuPtr <- Call.double vu+      ilPtr <- Call.cint il+      iuPtr <- Call.cint iu+      abstolPtr <- Call.double abstol+      mPtr <- Call.alloca+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      isuppzPtr <- Call.ioarray isuppz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      infoPtr <- Call.alloca+      liftIO $ FFI.stegr jobzPtr rangePtr nPtr dPtr ePtr vlPtr vuPtr ilPtr iuPtr abstolPtr mPtr wPtr zPtr ldzPtr isuppzPtr workPtr lworkPtr iworkPtr liworkPtr infoPtr+      liftIO $ pure (,,,,)+         <*> fmap fromIntegral (peek mPtr)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> Call.freezeArray isuppz+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dstein.f>+stein ::+   Array ZeroInt Double {- ^ d -} ->+   Array ZeroInt Double {- ^ e -} ->+   Int {- ^ m -} ->+   Array ZeroInt Double {- ^ w -} ->+   Array ZeroInt CInt {- ^ iblock -} ->+   Array ZeroInt CInt {- ^ isplit -} ->+   Int {- ^ ldz -} ->+   IO (Array (ZeroInt,ZeroInt) Double, Array ZeroInt CInt, Int)+stein d e m w iblock isplit ldz = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let eDim0 = Call.sizes1 $ Array.shape e+   let wDim0 = Call.sizes1 $ Array.shape w+   let iblockDim0 = Call.sizes1 $ Array.shape iblock+   let isplitDim0 = Call.sizes1 $ Array.shape isplit+   let n = dDim0+   Call.assert "stein: n-1 == eDim0" (n-1 == eDim0)+   Call.assert "stein: n == wDim0" (n == wDim0)+   Call.assert "stein: n == iblockDim0" (n == iblockDim0)+   Call.assert "stein: n == isplitDim0" (n == isplitDim0)+   z <- Call.newArray2 m ldz+   work <- Call.newArray1 (5*n)+   iwork <- Call.newArray1 n+   ifail <- Call.newArray1 m+   evalContT $ do+      nPtr <- Call.cint n+      dPtr <- Call.array d+      ePtr <- Call.array e+      mPtr <- Call.cint m+      wPtr <- Call.array w+      iblockPtr <- Call.array iblock+      isplitPtr <- Call.array isplit+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      ifailPtr <- Call.ioarray ifail+      infoPtr <- Call.alloca+      liftIO $ FFI.stein nPtr dPtr ePtr mPtr wPtr iblockPtr isplitPtr zPtr ldzPtr workPtr iworkPtr ifailPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray z+         <*> Call.freezeArray ifail+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dstemr.f>+stemr ::+   Char {- ^ jobz -} ->+   Char {- ^ range -} ->+   IOArray ZeroInt Double {- ^ d -} ->+   IOArray ZeroInt Double {- ^ e -} ->+   Double {- ^ vl -} ->+   Double {- ^ vu -} ->+   Int {- ^ il -} ->+   Int {- ^ iu -} ->+   Int {- ^ m -} ->+   Int {- ^ ldz -} ->+   Int {- ^ nzc -} ->+   Bool {- ^ tryrac -} ->+   Int {- ^ lwork -} ->+   Int {- ^ liwork -} ->+   IO (Int, Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array ZeroInt CInt, Bool, Int)+stemr jobz range d e vl vu il iu m ldz nzc tryrac lwork liwork = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let n = dDim0+   Call.assert "stemr: n == eDim0" (n == eDim0)+   w <- Call.newArray1 n+   z <- Call.newArray2 (maximum[1,m]) ldz+   isuppz <- Call.newArray1 (2*maximum[1,m])+   work <- Call.newArray1 lwork+   iwork <- Call.newArray1 liwork+   evalContT $ do+      jobzPtr <- Call.char jobz+      rangePtr <- Call.char range+      nPtr <- Call.cint n+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      vlPtr <- Call.double vl+      vuPtr <- Call.double vu+      ilPtr <- Call.cint il+      iuPtr <- Call.cint iu+      mPtr <- Call.alloca+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      nzcPtr <- Call.cint nzc+      isuppzPtr <- Call.ioarray isuppz+      tryracPtr <- Call.bool tryrac+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      infoPtr <- Call.alloca+      liftIO $ FFI.stemr jobzPtr rangePtr nPtr dPtr ePtr vlPtr vuPtr ilPtr iuPtr mPtr wPtr zPtr ldzPtr nzcPtr isuppzPtr tryracPtr workPtr lworkPtr iworkPtr liworkPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> fmap fromIntegral (peek mPtr)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> Call.freezeArray isuppz+         <*> peek tryracPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsteqr.f>+steqr ::+   Char {- ^ compz -} ->+   IOArray ZeroInt Double {- ^ d -} ->+   IOArray ZeroInt Double {- ^ e -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ z -} ->+   IO (Int)+steqr compz d e z = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = dDim0+   let ldz = zDim1+   Call.assert "steqr: n-1 == eDim0" (n-1 == eDim0)+   Call.assert "steqr: n == zDim0" (n == zDim0)+   work <- Call.newArray1 (maximum[1,2*n-2])+   evalContT $ do+      compzPtr <- Call.char compz+      nPtr <- Call.cint n+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.steqr compzPtr nPtr dPtr ePtr zPtr ldzPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsterf.f>+sterf ::+   IOArray ZeroInt Double {- ^ d -} ->+   IOArray ZeroInt Double {- ^ e -} ->+   IO (Int)+sterf d e = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let n = dDim0+   Call.assert "sterf: n-1 == eDim0" (n-1 == eDim0)+   evalContT $ do+      nPtr <- Call.cint n+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      infoPtr <- Call.alloca+      liftIO $ FFI.sterf nPtr dPtr ePtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dstev.f>+stev ::+   Char {- ^ jobz -} ->+   IOArray ZeroInt Double {- ^ d -} ->+   IOArray ZeroInt Double {- ^ e -} ->+   Int {- ^ ldz -} ->+   IO (Array (ZeroInt,ZeroInt) Double, Int)+stev jobz d e ldz = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let n = dDim0+   Call.assert "stev: n-1 == eDim0" (n-1 == eDim0)+   z <- Call.newArray2 n ldz+   work <- Call.newArray1 (maximum[1,2*n-2])+   evalContT $ do+      jobzPtr <- Call.char jobz+      nPtr <- Call.cint n+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.stev jobzPtr nPtr dPtr ePtr zPtr ldzPtr workPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray z+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dstevd.f>+stevd ::+   Char {- ^ jobz -} ->+   IOArray ZeroInt Double {- ^ d -} ->+   IOArray ZeroInt Double {- ^ e -} ->+   Int {- ^ ldz -} ->+   Int {- ^ workSize -} ->+   Int {- ^ lwork -} ->+   Int {- ^ liwork -} ->+   IO (Array (ZeroInt,ZeroInt) Double, Int)+stevd jobz d e ldz workSize lwork liwork = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let n = dDim0+   Call.assert "stevd: n-1 == eDim0" (n-1 == eDim0)+   z <- Call.newArray2 n ldz+   work <- Call.newArray1 workSize+   iwork <- Call.newArray1 (maximum[1,liwork])+   evalContT $ do+      jobzPtr <- Call.char jobz+      nPtr <- Call.cint n+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      infoPtr <- Call.alloca+      liftIO $ FFI.stevd jobzPtr nPtr dPtr ePtr zPtr ldzPtr workPtr lworkPtr iworkPtr liworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray z+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dstevr.f>+stevr ::+   Char {- ^ jobz -} ->+   Char {- ^ range -} ->+   IOArray ZeroInt Double {- ^ d -} ->+   IOArray ZeroInt Double {- ^ e -} ->+   Double {- ^ vl -} ->+   Double {- ^ vu -} ->+   Int {- ^ il -} ->+   Int {- ^ iu -} ->+   Double {- ^ abstol -} ->+   Int {- ^ m -} ->+   Int {- ^ ldz -} ->+   Int {- ^ lwork -} ->+   Int {- ^ liwork -} ->+   IO (Int, Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array ZeroInt CInt, Int)+stevr jobz range d e vl vu il iu abstol m ldz lwork liwork = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let n = dDim0+   Call.assert "stevr: maximum[1,n-1] == eDim0" (maximum[1,n-1] == eDim0)+   w <- Call.newArray1 n+   z <- Call.newArray2 (maximum[1,m]) ldz+   isuppz <- Call.newArray1 (2*maximum[1,m])+   work <- Call.newArray1 (maximum[1,lwork])+   iwork <- Call.newArray1 (maximum[1,liwork])+   evalContT $ do+      jobzPtr <- Call.char jobz+      rangePtr <- Call.char range+      nPtr <- Call.cint n+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      vlPtr <- Call.double vl+      vuPtr <- Call.double vu+      ilPtr <- Call.cint il+      iuPtr <- Call.cint iu+      abstolPtr <- Call.double abstol+      mPtr <- Call.alloca+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      isuppzPtr <- Call.ioarray isuppz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      infoPtr <- Call.alloca+      liftIO $ FFI.stevr jobzPtr rangePtr nPtr dPtr ePtr vlPtr vuPtr ilPtr iuPtr abstolPtr mPtr wPtr zPtr ldzPtr isuppzPtr workPtr lworkPtr iworkPtr liworkPtr infoPtr+      liftIO $ pure (,,,,)+         <*> fmap fromIntegral (peek mPtr)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> Call.freezeArray isuppz+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dstevx.f>+stevx ::+   Char {- ^ jobz -} ->+   Char {- ^ range -} ->+   IOArray ZeroInt Double {- ^ d -} ->+   IOArray ZeroInt Double {- ^ e -} ->+   Double {- ^ vl -} ->+   Double {- ^ vu -} ->+   Int {- ^ il -} ->+   Int {- ^ iu -} ->+   Double {- ^ abstol -} ->+   Int {- ^ m -} ->+   Int {- ^ ldz -} ->+   IO (Int, Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array ZeroInt CInt, Int)+stevx jobz range d e vl vu il iu abstol m ldz = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let n = dDim0+   Call.assert "stevx: maximum[1,n-1] == eDim0" (maximum[1,n-1] == eDim0)+   w <- Call.newArray1 n+   z <- Call.newArray2 (maximum[1,m]) ldz+   work <- Call.newArray1 (5*n)+   iwork <- Call.newArray1 (5*n)+   ifail <- Call.newArray1 n+   evalContT $ do+      jobzPtr <- Call.char jobz+      rangePtr <- Call.char range+      nPtr <- Call.cint n+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      vlPtr <- Call.double vl+      vuPtr <- Call.double vu+      ilPtr <- Call.cint il+      iuPtr <- Call.cint iu+      abstolPtr <- Call.double abstol+      mPtr <- Call.alloca+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      ifailPtr <- Call.ioarray ifail+      infoPtr <- Call.alloca+      liftIO $ FFI.stevx jobzPtr rangePtr nPtr dPtr ePtr vlPtr vuPtr ilPtr iuPtr abstolPtr mPtr wPtr zPtr ldzPtr workPtr iworkPtr ifailPtr infoPtr+      liftIO $ pure (,,,,)+         <*> fmap fromIntegral (peek mPtr)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> Call.freezeArray ifail+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsycon.f>+sycon ::+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Double {- ^ anorm -} ->+   IO (Double, Int)+sycon uplo a ipiv anorm = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = aDim0+   let lda = aDim1+   Call.assert "sycon: n == ipivDim0" (n == ipivDim0)+   work <- Call.newArray1 (2*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.array ipiv+      anormPtr <- Call.double anorm+      rcondPtr <- Call.alloca+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.sycon uploPtr nPtr aPtr ldaPtr ipivPtr anormPtr rcondPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,)+         <*> peek rcondPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsyconv.f>+syconv ::+   Char {- ^ uplo -} ->+   Char {- ^ way -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   IO (Array ZeroInt Double, Int)+syconv uplo way a ipiv = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = aDim0+   let lda = aDim1+   Call.assert "syconv: n == ipivDim0" (n == ipivDim0)+   e <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      wayPtr <- Call.char way+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.array ipiv+      ePtr <- Call.ioarray e+      infoPtr <- Call.alloca+      liftIO $ FFI.syconv uploPtr wayPtr nPtr aPtr ldaPtr ipivPtr ePtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray e+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsyequb.f>+syequb ::+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IO (Array ZeroInt Double, Double, Double, Int)+syequb uplo a = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   s <- Call.newArray1 n+   work <- Call.newArray1 (2*n)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      sPtr <- Call.ioarray s+      scondPtr <- Call.alloca+      amaxPtr <- Call.alloca+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.syequb uploPtr nPtr aPtr ldaPtr sPtr scondPtr amaxPtr workPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray s+         <*> peek scondPtr+         <*> peek amaxPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsyrfs.f>+syrfs ::+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ af -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ x -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Int)+syrfs uplo a af ipiv b x = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (afDim0,afDim1) = Call.sizes2 $ Array.shape af+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (xDim0,xDim1) = Call.sizes2 $ MutArray.shape x+   let n = aDim0+   let lda = aDim1+   let ldaf = afDim1+   let nrhs = bDim0+   let ldb = bDim1+   let ldx = xDim1+   Call.assert "syrfs: n == afDim0" (n == afDim0)+   Call.assert "syrfs: n == ipivDim0" (n == ipivDim0)+   Call.assert "syrfs: nrhs == xDim0" (nrhs == xDim0)+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (3*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      afPtr <- Call.array af+      ldafPtr <- Call.cint ldaf+      ipivPtr <- Call.array ipiv+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.syrfs uploPtr nPtr nrhsPtr aPtr ldaPtr afPtr ldafPtr ipivPtr bPtr ldbPtr xPtr ldxPtr ferrPtr berrPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsysv.f>+sysv ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt CInt, Int)+sysv uplo a b lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   ipiv <- Call.newArray1 n+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.ioarray ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.sysv uploPtr nPtr nrhsPtr aPtr ldaPtr ipivPtr bPtr ldbPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsysvx.f>+sysvx ::+   Char {- ^ fact -} ->+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ af -} ->+   IOArray ZeroInt CInt {- ^ ipiv -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->+   Int {- ^ ldx -} ->+   Int {- ^ lwork -} ->+   IO (Array (ZeroInt,ZeroInt) Double, Double, Array ZeroInt Double, Array ZeroInt Double, Int)+sysvx fact uplo a af ipiv b ldx lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (afDim0,afDim1) = Call.sizes2 $ MutArray.shape af+   let ipivDim0 = Call.sizes1 $ MutArray.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let n = aDim0+   let lda = aDim1+   let ldaf = afDim1+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "sysvx: n == afDim0" (n == afDim0)+   Call.assert "sysvx: n == ipivDim0" (n == ipivDim0)+   x <- Call.newArray2 nrhs ldx+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (maximum[1,lwork])+   iwork <- Call.newArray1 n+   evalContT $ do+      factPtr <- Call.char fact+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      afPtr <- Call.ioarray af+      ldafPtr <- Call.cint ldaf+      ipivPtr <- Call.ioarray ipiv+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      rcondPtr <- Call.alloca+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.sysvx factPtr uploPtr nPtr nrhsPtr aPtr ldaPtr afPtr ldafPtr ipivPtr bPtr ldbPtr xPtr ldxPtr rcondPtr ferrPtr berrPtr workPtr lworkPtr iworkPtr infoPtr+      liftIO $ pure (,,,,)+         <*> Call.freezeArray x+         <*> peek rcondPtr+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsyswapr.f>+syswapr ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Int {- ^ i1 -} ->+   Int {- ^ i2 -} ->+   IO ()+syswapr uplo a i1 i2 = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      i1Ptr <- Call.cint i1+      i2Ptr <- Call.cint i2+      liftIO $ FFI.syswapr uploPtr nPtr aPtr ldaPtr i1Ptr i2Ptr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsytd2.f>+sytd2 ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Int)+sytd2 uplo a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   d <- Call.newArray1 n+   e <- Call.newArray1 (n-1)+   tau <- Call.newArray1 (n-1)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      tauPtr <- Call.ioarray tau+      infoPtr <- Call.alloca+      liftIO $ FFI.sytd2 uploPtr nPtr aPtr ldaPtr dPtr ePtr tauPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray d+         <*> Call.freezeArray e+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsytf2.f>+sytf2 ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IO (Array ZeroInt CInt, Int)+sytf2 uplo a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   ipiv <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.ioarray ipiv+      infoPtr <- Call.alloca+      liftIO $ FFI.sytf2 uploPtr nPtr aPtr ldaPtr ipivPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsytrd.f>+sytrd ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Int)+sytrd uplo a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   d <- Call.newArray1 n+   e <- Call.newArray1 (n-1)+   tau <- Call.newArray1 (n-1)+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.sytrd uploPtr nPtr aPtr ldaPtr dPtr ePtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray d+         <*> Call.freezeArray e+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsytrf.f>+sytrf ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt CInt, Int)+sytrf uplo a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   ipiv <- Call.newArray1 n+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.ioarray ipiv+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.sytrf uploPtr nPtr aPtr ldaPtr ipivPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsytri.f>+sytri ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   IO (Int)+sytri uplo a ipiv = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = aDim0+   let lda = aDim1+   Call.assert "sytri: n == ipivDim0" (n == ipivDim0)+   work <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.array ipiv+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.sytri uploPtr nPtr aPtr ldaPtr ipivPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsytri2.f>+sytri2 ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Int {- ^ nb -} ->+   Int {- ^ lwork -} ->+   IO (Int)+sytri2 uplo a ipiv nb lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = aDim0+   let lda = aDim1+   Call.assert "sytri2: n == ipivDim0" (n == ipivDim0)+   work <- Call.newArray1 (n+nb+1)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.array ipiv+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.sytri2 uploPtr nPtr aPtr ldaPtr ipivPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsytri2x.f>+sytri2x ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Int {- ^ nb -} ->+   IO (Int)+sytri2x uplo a ipiv nb = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = aDim0+   let lda = aDim1+   Call.assert "sytri2x: n == ipivDim0" (n == ipivDim0)+   work <- Call.newArray2 (nb+3) (n+nb+1)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.array ipiv+      workPtr <- Call.ioarray work+      nbPtr <- Call.cint nb+      infoPtr <- Call.alloca+      liftIO $ FFI.sytri2x uploPtr nPtr aPtr ldaPtr ipivPtr workPtr nbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsytrs.f>+sytrs ::+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   IO (Int)+sytrs uplo a ipiv b = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "sytrs: n == ipivDim0" (n == ipivDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.array ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.sytrs uploPtr nPtr nrhsPtr aPtr ldaPtr ipivPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsytrs2.f>+sytrs2 ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   IO (Int)+sytrs2 uplo a ipiv b = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "sytrs2: n == ipivDim0" (n == ipivDim0)+   work <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.array ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.sytrs2 uploPtr nPtr nrhsPtr aPtr ldaPtr ipivPtr bPtr ldbPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtbcon.f>+tbcon ::+   Char {- ^ norm -} ->+   Char {- ^ uplo -} ->+   Char {- ^ diag -} ->+   Int {- ^ kd -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ ab -} ->+   IO (Double, Int)+tbcon norm uplo diag kd ab = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let n = abDim0+   let ldab = abDim1+   work <- Call.newArray1 (3*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      normPtr <- Call.char norm+      uploPtr <- Call.char uplo+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      rcondPtr <- Call.alloca+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.tbcon normPtr uploPtr diagPtr nPtr kdPtr abPtr ldabPtr rcondPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,)+         <*> peek rcondPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtbrfs.f>+tbrfs ::+   Char {- ^ uplo -} ->+   Char {- ^ trans -} ->+   Char {- ^ diag -} ->+   Int {- ^ kd -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ ab -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ x -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Int)+tbrfs uplo trans diag kd ab b x = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (xDim0,xDim1) = Call.sizes2 $ Array.shape x+   let n = abDim0+   let ldab = abDim1+   let nrhs = bDim0+   let ldb = bDim1+   let ldx = xDim1+   Call.assert "tbrfs: nrhs == xDim0" (nrhs == xDim0)+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (3*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      transPtr <- Call.char trans+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      nrhsPtr <- Call.cint nrhs+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.array x+      ldxPtr <- Call.cint ldx+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.tbrfs uploPtr transPtr diagPtr nPtr kdPtr nrhsPtr abPtr ldabPtr bPtr ldbPtr xPtr ldxPtr ferrPtr berrPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtbtrs.f>+tbtrs ::+   Char {- ^ uplo -} ->+   Char {- ^ trans -} ->+   Char {- ^ diag -} ->+   Int {- ^ kd -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ ab -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   IO (Int)+tbtrs uplo trans diag kd ab b = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = abDim0+   let ldab = abDim1+   let nrhs = bDim0+   let ldb = bDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      transPtr <- Call.char trans+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      nrhsPtr <- Call.cint nrhs+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.tbtrs uploPtr transPtr diagPtr nPtr kdPtr nrhsPtr abPtr ldabPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtfsm.f>+tfsm ::+   Char {- ^ transr -} ->+   Char {- ^ side -} ->+   Char {- ^ uplo -} ->+   Char {- ^ trans -} ->+   Char {- ^ diag -} ->+   Int {- ^ m -} ->+   Double {- ^ alpha -} ->+   Array ZeroInt Double {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   IO ()+tfsm transr side uplo trans diag m alpha a b = do+   let aDim0 = Call.sizes1 $ Array.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let _nt = aDim0+   let n = bDim0+   let ldb = bDim1+   evalContT $ do+      transrPtr <- Call.char transr+      sidePtr <- Call.char side+      uploPtr <- Call.char uplo+      transPtr <- Call.char trans+      diagPtr <- Call.char diag+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      alphaPtr <- Call.double alpha+      aPtr <- Call.array a+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      liftIO $ FFI.tfsm transrPtr sidePtr uploPtr transPtr diagPtr mPtr nPtr alphaPtr aPtr bPtr ldbPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtftri.f>+tftri ::+   Char {- ^ transr -} ->+   Char {- ^ uplo -} ->+   Char {- ^ diag -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt Double {- ^ a -} ->+   IO (Int)+tftri transr uplo diag n a = do+   let aDim0 = Call.sizes1 $ MutArray.shape a+   Call.ignore "tftri: 0:nt-1 == aDim0" aDim0+   evalContT $ do+      transrPtr <- Call.char transr+      uploPtr <- Call.char uplo+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      infoPtr <- Call.alloca+      liftIO $ FFI.tftri transrPtr uploPtr diagPtr nPtr aPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtfttp.f>+tfttp ::+   Char {- ^ transr -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Array ZeroInt Double {- ^ arf -} ->+   IO (Array ZeroInt Double, Int)+tfttp transr uplo n arf = do+   let arfDim0 = Call.sizes1 $ Array.shape arf+   Call.assert "tfttp: n*(n+1)`div`2 == arfDim0" (n*(n+1)`div`2 == arfDim0)+   ap <- Call.newArray1 (n*(n+1)`div`2)+   evalContT $ do+      transrPtr <- Call.char transr+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      arfPtr <- Call.array arf+      apPtr <- Call.ioarray ap+      infoPtr <- Call.alloca+      liftIO $ FFI.tfttp transrPtr uploPtr nPtr arfPtr apPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ap+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtfttr.f>+tfttr ::+   Char {- ^ transr -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Array ZeroInt Double {- ^ arf -} ->+   Int {- ^ lda -} ->+   IO (Array (ZeroInt,ZeroInt) Double, Int)+tfttr transr uplo n arf lda = do+   let arfDim0 = Call.sizes1 $ Array.shape arf+   Call.assert "tfttr: n*(n+1)`div`2 == arfDim0" (n*(n+1)`div`2 == arfDim0)+   a <- Call.newArray2 n lda+   evalContT $ do+      transrPtr <- Call.char transr+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      arfPtr <- Call.array arf+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      infoPtr <- Call.alloca+      liftIO $ FFI.tfttr transrPtr uploPtr nPtr arfPtr aPtr ldaPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray a+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtgevc.f>+tgevc ::+   Char {- ^ side -} ->+   Char {- ^ howmny -} ->+   Array ZeroInt Bool {- ^ select -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ s -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ p -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ vl -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ vr -} ->+   IO (Int, Int)+tgevc side howmny select s p vl vr = do+   let selectDim0 = Call.sizes1 $ Array.shape select+   let (sDim0,sDim1) = Call.sizes2 $ Array.shape s+   let (pDim0,pDim1) = Call.sizes2 $ Array.shape p+   let (vlDim0,vlDim1) = Call.sizes2 $ MutArray.shape vl+   let (vrDim0,vrDim1) = Call.sizes2 $ MutArray.shape vr+   let n = selectDim0+   let lds = sDim1+   let ldp = pDim1+   let mm = vlDim0+   let ldvl = vlDim1+   let ldvr = vrDim1+   Call.assert "tgevc: n == sDim0" (n == sDim0)+   Call.assert "tgevc: n == pDim0" (n == pDim0)+   Call.assert "tgevc: mm == vrDim0" (mm == vrDim0)+   work <- Call.newArray1 (6*n)+   evalContT $ do+      sidePtr <- Call.char side+      howmnyPtr <- Call.char howmny+      selectPtr <- Call.array select+      nPtr <- Call.cint n+      sPtr <- Call.array s+      ldsPtr <- Call.cint lds+      pPtr <- Call.array p+      ldpPtr <- Call.cint ldp+      vlPtr <- Call.ioarray vl+      ldvlPtr <- Call.cint ldvl+      vrPtr <- Call.ioarray vr+      ldvrPtr <- Call.cint ldvr+      mmPtr <- Call.cint mm+      mPtr <- Call.alloca+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.tgevc sidePtr howmnyPtr selectPtr nPtr sPtr ldsPtr pPtr ldpPtr vlPtr ldvlPtr vrPtr ldvrPtr mmPtr mPtr workPtr infoPtr+      liftIO $ pure (,)+         <*> fmap fromIntegral (peek mPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtgex2.f>+tgex2 ::+   Bool {- ^ wantq -} ->+   Bool {- ^ wantz -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ q -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ z -} ->+   Int {- ^ j1 -} ->+   Int {- ^ n1 -} ->+   Int {- ^ n2 -} ->+   Int {- ^ lwork -} ->+   IO (Int)+tgex2 wantq wantz a b q z j1 n1 n2 lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let _aSize = aDim0+   let lda = aDim1+   let _bSize = bDim0+   let ldb = bDim1+   let n = qDim0+   let ldq = qDim1+   let ldz = zDim1+   Call.assert "tgex2: n == zDim0" (n == zDim0)+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      wantqPtr <- Call.bool wantq+      wantzPtr <- Call.bool wantz+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      j1Ptr <- Call.cint j1+      n1Ptr <- Call.cint n1+      n2Ptr <- Call.cint n2+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.tgex2 wantqPtr wantzPtr nPtr aPtr ldaPtr bPtr ldbPtr qPtr ldqPtr zPtr ldzPtr j1Ptr n1Ptr n2Ptr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtgexc.f>+tgexc ::+   Bool {- ^ wantq -} ->+   Bool {- ^ wantz -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ q -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ z -} ->+   Int {- ^ ifst -} ->+   Int {- ^ ilst -} ->+   Int {- ^ lwork -} ->+   IO (Int, Int, Int)+tgexc wantq wantz a b q z ifst ilst lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   let ldq = qDim1+   let ldz = zDim1+   Call.assert "tgexc: n == bDim0" (n == bDim0)+   Call.assert "tgexc: n == qDim0" (n == qDim0)+   Call.assert "tgexc: n == zDim0" (n == zDim0)+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      wantqPtr <- Call.bool wantq+      wantzPtr <- Call.bool wantz+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      ifstPtr <- Call.cint ifst+      ilstPtr <- Call.cint ilst+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.tgexc wantqPtr wantzPtr nPtr aPtr ldaPtr bPtr ldbPtr qPtr ldqPtr zPtr ldzPtr ifstPtr ilstPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,,)+         <*> fmap fromIntegral (peek ifstPtr)+         <*> fmap fromIntegral (peek ilstPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtgsen.f>+tgsen ::+   Int {- ^ ijob -} ->+   Bool {- ^ wantq -} ->+   Bool {- ^ wantz -} ->+   Array ZeroInt Bool {- ^ select -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ q -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ z -} ->+   Int {- ^ lwork -} ->+   Int {- ^ liwork -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double, Array ZeroInt Double, Int)+tgsen ijob wantq wantz select a b q z lwork liwork = do+   let selectDim0 = Call.sizes1 $ Array.shape select+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = selectDim0+   let lda = aDim1+   let ldb = bDim1+   let ldq = qDim1+   let ldz = zDim1+   Call.assert "tgsen: n == aDim0" (n == aDim0)+   Call.assert "tgsen: n == bDim0" (n == bDim0)+   Call.assert "tgsen: n == qDim0" (n == qDim0)+   Call.assert "tgsen: n == zDim0" (n == zDim0)+   alphar <- Call.newArray1 n+   alphai <- Call.newArray1 n+   beta <- Call.newArray1 n+   dif <- Call.newArray1 2+   work <- Call.newArray1 (maximum[1,lwork])+   iwork <- Call.newArray1 (maximum[1,liwork])+   evalContT $ do+      ijobPtr <- Call.cint ijob+      wantqPtr <- Call.bool wantq+      wantzPtr <- Call.bool wantz+      selectPtr <- Call.array select+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      alpharPtr <- Call.ioarray alphar+      alphaiPtr <- Call.ioarray alphai+      betaPtr <- Call.ioarray beta+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      mPtr <- Call.alloca+      plPtr <- Call.alloca+      prPtr <- Call.alloca+      difPtr <- Call.ioarray dif+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      infoPtr <- Call.alloca+      liftIO $ FFI.tgsen ijobPtr wantqPtr wantzPtr selectPtr nPtr aPtr ldaPtr bPtr ldbPtr alpharPtr alphaiPtr betaPtr qPtr ldqPtr zPtr ldzPtr mPtr plPtr prPtr difPtr workPtr lworkPtr iworkPtr liworkPtr infoPtr+      liftIO $ pure (,,,,,,,)+         <*> Call.freezeArray alphar+         <*> Call.freezeArray alphai+         <*> Call.freezeArray beta+         <*> fmap fromIntegral (peek mPtr)+         <*> peek plPtr+         <*> peek prPtr+         <*> Call.freezeArray dif+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtgsja.f>+tgsja ::+   Char {- ^ jobu -} ->+   Char {- ^ jobv -} ->+   Char {- ^ jobq -} ->+   Int {- ^ k -} ->+   Int {- ^ l -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   Double {- ^ tola -} ->+   Double {- ^ tolb -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ u -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ v -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ q -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Int, Int)+tgsja jobu jobv jobq k l a b tola tolb u v q = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let (uDim0,uDim1) = Call.sizes2 $ MutArray.shape u+   let (vDim0,vDim1) = Call.sizes2 $ MutArray.shape v+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   let m = uDim0+   let ldu = uDim1+   let p = vDim0+   let ldv = vDim1+   let ldq = qDim1+   Call.assert "tgsja: n == bDim0" (n == bDim0)+   Call.assert "tgsja: n == qDim0" (n == qDim0)+   alpha <- Call.newArray1 n+   beta <- Call.newArray1 n+   work <- Call.newArray1 (2*n)+   evalContT $ do+      jobuPtr <- Call.char jobu+      jobvPtr <- Call.char jobv+      jobqPtr <- Call.char jobq+      mPtr <- Call.cint m+      pPtr <- Call.cint p+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      lPtr <- Call.cint l+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      tolaPtr <- Call.double tola+      tolbPtr <- Call.double tolb+      alphaPtr <- Call.ioarray alpha+      betaPtr <- Call.ioarray beta+      uPtr <- Call.ioarray u+      lduPtr <- Call.cint ldu+      vPtr <- Call.ioarray v+      ldvPtr <- Call.cint ldv+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      workPtr <- Call.ioarray work+      ncyclePtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.tgsja jobuPtr jobvPtr jobqPtr mPtr pPtr nPtr kPtr lPtr aPtr ldaPtr bPtr ldbPtr tolaPtr tolbPtr alphaPtr betaPtr uPtr lduPtr vPtr ldvPtr qPtr ldqPtr workPtr ncyclePtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray alpha+         <*> Call.freezeArray beta+         <*> fmap fromIntegral (peek ncyclePtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtgsna.f>+tgsna ::+   Char {- ^ job -} ->+   Char {- ^ howmny -} ->+   Array ZeroInt Bool {- ^ select -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ vl -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ vr -} ->+   Int {- ^ mm -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Int, Int)+tgsna job howmny select a b vl vr mm lwork = do+   let selectDim0 = Call.sizes1 $ Array.shape select+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (vlDim0,vlDim1) = Call.sizes2 $ Array.shape vl+   let (vrDim0,vrDim1) = Call.sizes2 $ Array.shape vr+   let n = selectDim0+   let lda = aDim1+   let ldb = bDim1+   let m = vlDim0+   let ldvl = vlDim1+   let ldvr = vrDim1+   Call.assert "tgsna: n == aDim0" (n == aDim0)+   Call.assert "tgsna: n == bDim0" (n == bDim0)+   Call.assert "tgsna: m == vrDim0" (m == vrDim0)+   s <- Call.newArray1 mm+   dif <- Call.newArray1 mm+   work <- Call.newArray1 (maximum[1,lwork])+   iwork <- Call.newArray1 (n+6)+   evalContT $ do+      jobPtr <- Call.char job+      howmnyPtr <- Call.char howmny+      selectPtr <- Call.array select+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      vlPtr <- Call.array vl+      ldvlPtr <- Call.cint ldvl+      vrPtr <- Call.array vr+      ldvrPtr <- Call.cint ldvr+      sPtr <- Call.ioarray s+      difPtr <- Call.ioarray dif+      mmPtr <- Call.cint mm+      mPtr <- Call.alloca+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.tgsna jobPtr howmnyPtr selectPtr nPtr aPtr ldaPtr bPtr ldbPtr vlPtr ldvlPtr vrPtr ldvrPtr sPtr difPtr mmPtr mPtr workPtr lworkPtr iworkPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray s+         <*> Call.freezeArray dif+         <*> fmap fromIntegral (peek mPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtgsy2.f>+tgsy2 ::+   Char {- ^ trans -} ->+   Int {- ^ ijob -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ c -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ d -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ e -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ f -} ->+   Double {- ^ rdsum -} ->+   Double {- ^ rdscal -} ->+   IO (Double, Double, Double, Int, Int)+tgsy2 trans ijob a b c d e f rdsum rdscal = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let (dDim0,dDim1) = Call.sizes2 $ Array.shape d+   let (eDim0,eDim1) = Call.sizes2 $ Array.shape e+   let (fDim0,fDim1) = Call.sizes2 $ MutArray.shape f+   let m = aDim0+   let lda = aDim1+   let n = bDim0+   let ldb = bDim1+   let ldc = cDim1+   let ldd = dDim1+   let lde = eDim1+   let ldf = fDim1+   Call.assert "tgsy2: n == cDim0" (n == cDim0)+   Call.assert "tgsy2: m == dDim0" (m == dDim0)+   Call.assert "tgsy2: n == eDim0" (n == eDim0)+   Call.assert "tgsy2: n == fDim0" (n == fDim0)+   iwork <- Call.newArray1 (m+n+2)+   evalContT $ do+      transPtr <- Call.char trans+      ijobPtr <- Call.cint ijob+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      dPtr <- Call.array d+      lddPtr <- Call.cint ldd+      ePtr <- Call.array e+      ldePtr <- Call.cint lde+      fPtr <- Call.ioarray f+      ldfPtr <- Call.cint ldf+      scalePtr <- Call.alloca+      rdsumPtr <- Call.double rdsum+      rdscalPtr <- Call.double rdscal+      iworkPtr <- Call.ioarray iwork+      pqPtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.tgsy2 transPtr ijobPtr mPtr nPtr aPtr ldaPtr bPtr ldbPtr cPtr ldcPtr dPtr lddPtr ePtr ldePtr fPtr ldfPtr scalePtr rdsumPtr rdscalPtr iworkPtr pqPtr infoPtr+      liftIO $ pure (,,,,)+         <*> peek scalePtr+         <*> peek rdsumPtr+         <*> peek rdscalPtr+         <*> fmap fromIntegral (peek pqPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtgsyl.f>+tgsyl ::+   Char {- ^ trans -} ->+   Int {- ^ ijob -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ c -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ d -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ e -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ f -} ->+   Int {- ^ lwork -} ->+   IO (Double, Double, Int)+tgsyl trans ijob a b c d e f lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let (dDim0,dDim1) = Call.sizes2 $ Array.shape d+   let (eDim0,eDim1) = Call.sizes2 $ Array.shape e+   let (fDim0,fDim1) = Call.sizes2 $ MutArray.shape f+   let m = aDim0+   let lda = aDim1+   let n = bDim0+   let ldb = bDim1+   let ldc = cDim1+   let ldd = dDim1+   let lde = eDim1+   let ldf = fDim1+   Call.assert "tgsyl: n == cDim0" (n == cDim0)+   Call.assert "tgsyl: m == dDim0" (m == dDim0)+   Call.assert "tgsyl: n == eDim0" (n == eDim0)+   Call.assert "tgsyl: n == fDim0" (n == fDim0)+   work <- Call.newArray1 (maximum[1,lwork])+   iwork <- Call.newArray1 (m+n+6)+   evalContT $ do+      transPtr <- Call.char trans+      ijobPtr <- Call.cint ijob+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      dPtr <- Call.array d+      lddPtr <- Call.cint ldd+      ePtr <- Call.array e+      ldePtr <- Call.cint lde+      fPtr <- Call.ioarray f+      ldfPtr <- Call.cint ldf+      scalePtr <- Call.alloca+      difPtr <- Call.alloca+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.tgsyl transPtr ijobPtr mPtr nPtr aPtr ldaPtr bPtr ldbPtr cPtr ldcPtr dPtr lddPtr ePtr ldePtr fPtr ldfPtr scalePtr difPtr workPtr lworkPtr iworkPtr infoPtr+      liftIO $ pure (,,)+         <*> peek scalePtr+         <*> peek difPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtpcon.f>+tpcon ::+   Char {- ^ norm -} ->+   Char {- ^ uplo -} ->+   Char {- ^ diag -} ->+   Int {- ^ n -} ->+   Array ZeroInt Double {- ^ ap -} ->+   IO (Double, Int)+tpcon norm uplo diag n ap = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   Call.assert "tpcon: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   work <- Call.newArray1 (3*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      normPtr <- Call.char norm+      uploPtr <- Call.char uplo+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      apPtr <- Call.array ap+      rcondPtr <- Call.alloca+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.tpcon normPtr uploPtr diagPtr nPtr apPtr rcondPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,)+         <*> peek rcondPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtprfs.f>+tprfs ::+   Char {- ^ uplo -} ->+   Char {- ^ trans -} ->+   Char {- ^ diag -} ->+   Int {- ^ n -} ->+   Array ZeroInt Double {- ^ ap -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ x -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Int)+tprfs uplo trans diag n ap b x = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (xDim0,xDim1) = Call.sizes2 $ Array.shape x+   let nrhs = bDim0+   let ldb = bDim1+   let ldx = xDim1+   Call.assert "tprfs: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   Call.assert "tprfs: nrhs == xDim0" (nrhs == xDim0)+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (3*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      transPtr <- Call.char trans+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      apPtr <- Call.array ap+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.array x+      ldxPtr <- Call.cint ldx+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.tprfs uploPtr transPtr diagPtr nPtr nrhsPtr apPtr bPtr ldbPtr xPtr ldxPtr ferrPtr berrPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtptri.f>+tptri ::+   Char {- ^ uplo -} ->+   Char {- ^ diag -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt Double {- ^ ap -} ->+   IO (Int)+tptri uplo diag n ap = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   Call.assert "tptri: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      infoPtr <- Call.alloca+      liftIO $ FFI.tptri uploPtr diagPtr nPtr apPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtptrs.f>+tptrs ::+   Char {- ^ uplo -} ->+   Char {- ^ trans -} ->+   Char {- ^ diag -} ->+   Int {- ^ n -} ->+   Array ZeroInt Double {- ^ ap -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   IO (Int)+tptrs uplo trans diag n ap b = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "tptrs: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      transPtr <- Call.char trans+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      apPtr <- Call.array ap+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.tptrs uploPtr transPtr diagPtr nPtr nrhsPtr apPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtpttf.f>+tpttf ::+   Char {- ^ transr -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Array ZeroInt Double {- ^ ap -} ->+   IO (Array ZeroInt Double, Int)+tpttf transr uplo n ap = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   Call.assert "tpttf: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   arf <- Call.newArray1 (n*(n+1)`div`2)+   evalContT $ do+      transrPtr <- Call.char transr+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.array ap+      arfPtr <- Call.ioarray arf+      infoPtr <- Call.alloca+      liftIO $ FFI.tpttf transrPtr uploPtr nPtr apPtr arfPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray arf+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtpttr.f>+tpttr ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Array ZeroInt Double {- ^ ap -} ->+   Int {- ^ lda -} ->+   IO (Array (ZeroInt,ZeroInt) Double, Int)+tpttr uplo n ap lda = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   Call.assert "tpttr: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   a <- Call.newArray2 n lda+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.array ap+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      infoPtr <- Call.alloca+      liftIO $ FFI.tpttr uploPtr nPtr apPtr aPtr ldaPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray a+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtrcon.f>+trcon ::+   Char {- ^ norm -} ->+   Char {- ^ uplo -} ->+   Char {- ^ diag -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IO (Double, Int)+trcon norm uplo diag a = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   work <- Call.newArray1 (3*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      normPtr <- Call.char norm+      uploPtr <- Call.char uplo+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      rcondPtr <- Call.alloca+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.trcon normPtr uploPtr diagPtr nPtr aPtr ldaPtr rcondPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,)+         <*> peek rcondPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtrevc.f>+trevc ::+   Char {- ^ side -} ->+   Char {- ^ howmny -} ->+   IOArray ZeroInt Bool {- ^ select -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ t -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ vl -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ vr -} ->+   IO (Int, Int)+trevc side howmny select t vl vr = do+   let selectDim0 = Call.sizes1 $ MutArray.shape select+   let (tDim0,tDim1) = Call.sizes2 $ Array.shape t+   let (vlDim0,vlDim1) = Call.sizes2 $ MutArray.shape vl+   let (vrDim0,vrDim1) = Call.sizes2 $ MutArray.shape vr+   let n = selectDim0+   let ldt = tDim1+   let mm = vlDim0+   let ldvl = vlDim1+   let ldvr = vrDim1+   Call.assert "trevc: n == tDim0" (n == tDim0)+   Call.assert "trevc: mm == vrDim0" (mm == vrDim0)+   work <- Call.newArray1 (3*n)+   evalContT $ do+      sidePtr <- Call.char side+      howmnyPtr <- Call.char howmny+      selectPtr <- Call.ioarray select+      nPtr <- Call.cint n+      tPtr <- Call.array t+      ldtPtr <- Call.cint ldt+      vlPtr <- Call.ioarray vl+      ldvlPtr <- Call.cint ldvl+      vrPtr <- Call.ioarray vr+      ldvrPtr <- Call.cint ldvr+      mmPtr <- Call.cint mm+      mPtr <- Call.alloca+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.trevc sidePtr howmnyPtr selectPtr nPtr tPtr ldtPtr vlPtr ldvlPtr vrPtr ldvrPtr mmPtr mPtr workPtr infoPtr+      liftIO $ pure (,)+         <*> fmap fromIntegral (peek mPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtrexc.f>+trexc ::+   Char {- ^ compq -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ t -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ q -} ->+   Int {- ^ ifst -} ->+   Int {- ^ ilst -} ->+   IO (Int, Int, Int)+trexc compq t q ifst ilst = do+   let (tDim0,tDim1) = Call.sizes2 $ MutArray.shape t+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let n = tDim0+   let ldt = tDim1+   let ldq = qDim1+   Call.assert "trexc: n == qDim0" (n == qDim0)+   work <- Call.newArray1 n+   evalContT $ do+      compqPtr <- Call.char compq+      nPtr <- Call.cint n+      tPtr <- Call.ioarray t+      ldtPtr <- Call.cint ldt+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      ifstPtr <- Call.cint ifst+      ilstPtr <- Call.cint ilst+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.trexc compqPtr nPtr tPtr ldtPtr qPtr ldqPtr ifstPtr ilstPtr workPtr infoPtr+      liftIO $ pure (,,)+         <*> fmap fromIntegral (peek ifstPtr)+         <*> fmap fromIntegral (peek ilstPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtrrfs.f>+trrfs ::+   Char {- ^ uplo -} ->+   Char {- ^ trans -} ->+   Char {- ^ diag -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ x -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Int)+trrfs uplo trans diag a b x = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (xDim0,xDim1) = Call.sizes2 $ Array.shape x+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   let ldx = xDim1+   Call.assert "trrfs: nrhs == xDim0" (nrhs == xDim0)+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (3*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      transPtr <- Call.char trans+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.array x+      ldxPtr <- Call.cint ldx+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.trrfs uploPtr transPtr diagPtr nPtr nrhsPtr aPtr ldaPtr bPtr ldbPtr xPtr ldxPtr ferrPtr berrPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtrsen.f>+trsen ::+   Char {- ^ job -} ->+   Char {- ^ compq -} ->+   Array ZeroInt Bool {- ^ select -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ t -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ q -} ->+   Int {- ^ lwork -} ->+   Int {- ^ liwork -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double, Int)+trsen job compq select t q lwork liwork = do+   let selectDim0 = Call.sizes1 $ Array.shape select+   let (tDim0,tDim1) = Call.sizes2 $ MutArray.shape t+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let n = selectDim0+   let ldt = tDim1+   let ldq = qDim1+   Call.assert "trsen: n == tDim0" (n == tDim0)+   Call.assert "trsen: n == qDim0" (n == qDim0)+   wr <- Call.newArray1 n+   wi <- Call.newArray1 n+   work <- Call.newArray1 (maximum[1,lwork])+   iwork <- Call.newArray1 (maximum[1,liwork])+   evalContT $ do+      jobPtr <- Call.char job+      compqPtr <- Call.char compq+      selectPtr <- Call.array select+      nPtr <- Call.cint n+      tPtr <- Call.ioarray t+      ldtPtr <- Call.cint ldt+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      wrPtr <- Call.ioarray wr+      wiPtr <- Call.ioarray wi+      mPtr <- Call.alloca+      sPtr <- Call.alloca+      sepPtr <- Call.alloca+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      infoPtr <- Call.alloca+      liftIO $ FFI.trsen jobPtr compqPtr selectPtr nPtr tPtr ldtPtr qPtr ldqPtr wrPtr wiPtr mPtr sPtr sepPtr workPtr lworkPtr iworkPtr liworkPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> Call.freezeArray wr+         <*> Call.freezeArray wi+         <*> fmap fromIntegral (peek mPtr)+         <*> peek sPtr+         <*> peek sepPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtrsna.f>+trsna ::+   Char {- ^ job -} ->+   Char {- ^ howmny -} ->+   Array ZeroInt Bool {- ^ select -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ t -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ vl -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ vr -} ->+   Int {- ^ mm -} ->+   Int {- ^ ldwork -} ->+   IO (Array ZeroInt Double, Array ZeroInt Double, Int, Int)+trsna job howmny select t vl vr mm ldwork = do+   let selectDim0 = Call.sizes1 $ Array.shape select+   let (tDim0,tDim1) = Call.sizes2 $ Array.shape t+   let (vlDim0,vlDim1) = Call.sizes2 $ Array.shape vl+   let (vrDim0,vrDim1) = Call.sizes2 $ Array.shape vr+   let n = selectDim0+   let ldt = tDim1+   let m = vlDim0+   let ldvl = vlDim1+   let ldvr = vrDim1+   Call.assert "trsna: n == tDim0" (n == tDim0)+   Call.assert "trsna: m == vrDim0" (m == vrDim0)+   s <- Call.newArray1 mm+   sep <- Call.newArray1 mm+   work <- Call.newArray2 (n+6) ldwork+   iwork <- Call.newArray1 (2*(n-1))+   evalContT $ do+      jobPtr <- Call.char job+      howmnyPtr <- Call.char howmny+      selectPtr <- Call.array select+      nPtr <- Call.cint n+      tPtr <- Call.array t+      ldtPtr <- Call.cint ldt+      vlPtr <- Call.array vl+      ldvlPtr <- Call.cint ldvl+      vrPtr <- Call.array vr+      ldvrPtr <- Call.cint ldvr+      sPtr <- Call.ioarray s+      sepPtr <- Call.ioarray sep+      mmPtr <- Call.cint mm+      mPtr <- Call.alloca+      workPtr <- Call.ioarray work+      ldworkPtr <- Call.cint ldwork+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.trsna jobPtr howmnyPtr selectPtr nPtr tPtr ldtPtr vlPtr ldvlPtr vrPtr ldvrPtr sPtr sepPtr mmPtr mPtr workPtr ldworkPtr iworkPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray s+         <*> Call.freezeArray sep+         <*> fmap fromIntegral (peek mPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtrsyl.f>+trsyl ::+   Char {- ^ trana -} ->+   Char {- ^ tranb -} ->+   Int {- ^ isgn -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ c -} ->+   IO (Double, Int)+trsyl trana tranb isgn a b c = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let m = aDim0+   let lda = aDim1+   let n = bDim0+   let ldb = bDim1+   let ldc = cDim1+   Call.assert "trsyl: n == cDim0" (n == cDim0)+   evalContT $ do+      tranaPtr <- Call.char trana+      tranbPtr <- Call.char tranb+      isgnPtr <- Call.cint isgn+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      scalePtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.trsyl tranaPtr tranbPtr isgnPtr mPtr nPtr aPtr ldaPtr bPtr ldbPtr cPtr ldcPtr scalePtr infoPtr+      liftIO $ pure (,)+         <*> peek scalePtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtrti2.f>+trti2 ::+   Char {- ^ uplo -} ->+   Char {- ^ diag -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IO (Int)+trti2 uplo diag a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      infoPtr <- Call.alloca+      liftIO $ FFI.trti2 uploPtr diagPtr nPtr aPtr ldaPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtrtri.f>+trtri ::+   Char {- ^ uplo -} ->+   Char {- ^ diag -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IO (Int)+trtri uplo diag a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      infoPtr <- Call.alloca+      liftIO $ FFI.trtri uploPtr diagPtr nPtr aPtr ldaPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtrtrs.f>+trtrs ::+   Char {- ^ uplo -} ->+   Char {- ^ trans -} ->+   Char {- ^ diag -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->+   IO (Int)+trtrs uplo trans diag a b = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      transPtr <- Call.char trans+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.trtrs uploPtr transPtr diagPtr nPtr nrhsPtr aPtr ldaPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtrttf.f>+trttf ::+   Char {- ^ transr -} ->+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Int {- ^ nt -} ->+   IO (Array ZeroInt Double, Int)+trttf transr uplo a nt = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   arf <- Call.newArray1 nt+   evalContT $ do+      transrPtr <- Call.char transr+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      arfPtr <- Call.ioarray arf+      infoPtr <- Call.alloca+      liftIO $ FFI.trttf transrPtr uploPtr nPtr aPtr ldaPtr arfPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray arf+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtrttp.f>+trttp ::+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->+   IO (Array ZeroInt Double, Int)+trttp uplo a = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   ap <- Call.newArray1 (n*(n+1)`div`2)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      apPtr <- Call.ioarray ap+      infoPtr <- Call.alloca+      liftIO $ FFI.trttp uploPtr nPtr aPtr ldaPtr apPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ap+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtzrzf.f>+tzrzf ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Double, Int)+tzrzf m a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 m+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.tzrzf mPtr nPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorg2l.f>+org2l ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Array ZeroInt Double {- ^ tau -} ->+   IO (Int)+org2l m a tau = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let n = aDim0+   let lda = aDim1+   let k = tauDim0+   work <- Call.newArray1 n+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.org2l mPtr nPtr kPtr aPtr ldaPtr tauPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorg2r.f>+org2r ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Array ZeroInt Double {- ^ tau -} ->+   IO (Int)+org2r m a tau = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let n = aDim0+   let lda = aDim1+   let k = tauDim0+   work <- Call.newArray1 n+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.org2r mPtr nPtr kPtr aPtr ldaPtr tauPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorgbr.f>+orgbr ::+   Char {- ^ vect -} ->+   Int {- ^ m -} ->+   Int {- ^ k -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Array ZeroInt Double {- ^ tau -} ->+   Int {- ^ lwork -} ->+   IO (Int)+orgbr vect m k a tau lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let n = aDim0+   let lda = aDim1+   let _tauSize = tauDim0+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      vectPtr <- Call.char vect+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.orgbr vectPtr mPtr nPtr kPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorghr.f>+orghr ::+   Int {- ^ ilo -} ->+   Int {- ^ ihi -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Array ZeroInt Double {- ^ tau -} ->+   Int {- ^ lwork -} ->+   IO (Int)+orghr ilo ihi a tau lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let n = aDim0+   let lda = aDim1+   Call.assert "orghr: n-1 == tauDim0" (n-1 == tauDim0)+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      nPtr <- Call.cint n+      iloPtr <- Call.cint ilo+      ihiPtr <- Call.cint ihi+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.orghr nPtr iloPtr ihiPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorgl2.f>+orgl2 ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Array ZeroInt Double {- ^ tau -} ->+   IO (Int)+orgl2 m a tau = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let n = aDim0+   let lda = aDim1+   let k = tauDim0+   work <- Call.newArray1 m+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.orgl2 mPtr nPtr kPtr aPtr ldaPtr tauPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorglq.f>+orglq ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Array ZeroInt Double {- ^ tau -} ->+   Int {- ^ lwork -} ->+   IO (Int)+orglq m a tau lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let n = aDim0+   let lda = aDim1+   let k = tauDim0+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.orglq mPtr nPtr kPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorgql.f>+orgql ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Array ZeroInt Double {- ^ tau -} ->+   Int {- ^ lwork -} ->+   IO (Int)+orgql m a tau lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let n = aDim0+   let lda = aDim1+   let k = tauDim0+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.orgql mPtr nPtr kPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorgqr.f>+orgqr ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Array ZeroInt Double {- ^ tau -} ->+   Int {- ^ lwork -} ->+   IO (Int)+orgqr m a tau lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let n = aDim0+   let lda = aDim1+   let k = tauDim0+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.orgqr mPtr nPtr kPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorgr2.f>+orgr2 ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Array ZeroInt Double {- ^ tau -} ->+   IO (Int)+orgr2 m a tau = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let n = aDim0+   let lda = aDim1+   let k = tauDim0+   work <- Call.newArray1 m+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.orgr2 mPtr nPtr kPtr aPtr ldaPtr tauPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorgrq.f>+orgrq ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Array ZeroInt Double {- ^ tau -} ->+   Int {- ^ lwork -} ->+   IO (Int)+orgrq m a tau lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let n = aDim0+   let lda = aDim1+   let k = tauDim0+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.orgrq mPtr nPtr kPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorgtr.f>+orgtr ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Array ZeroInt Double {- ^ tau -} ->+   Int {- ^ lwork -} ->+   IO (Int)+orgtr uplo a tau lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let n = aDim0+   let lda = aDim1+   Call.assert "orgtr: n-1 == tauDim0" (n-1 == tauDim0)+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.orgtr uploPtr nPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorm2l.f>+orm2l ::+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Array ZeroInt Double {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ c -} ->+   Int {- ^ workSize -} ->+   IO (Int)+orm2l side trans m a tau c workSize = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let k = aDim0+   let lda = aDim1+   let n = cDim0+   let ldc = cDim1+   Call.assert "orm2l: k == tauDim0" (k == tauDim0)+   work <- Call.newArray1 workSize+   evalContT $ do+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.orm2l sidePtr transPtr mPtr nPtr kPtr aPtr ldaPtr tauPtr cPtr ldcPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorm2r.f>+orm2r ::+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Array ZeroInt Double {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ c -} ->+   Int {- ^ workSize -} ->+   IO (Int)+orm2r side trans m a tau c workSize = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let k = aDim0+   let lda = aDim1+   let n = cDim0+   let ldc = cDim1+   Call.assert "orm2r: k == tauDim0" (k == tauDim0)+   work <- Call.newArray1 workSize+   evalContT $ do+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.orm2r sidePtr transPtr mPtr nPtr kPtr aPtr ldaPtr tauPtr cPtr ldcPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dormbr.f>+ormbr ::+   Char {- ^ vect -} ->+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Int {- ^ k -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Array ZeroInt Double {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ c -} ->+   Int {- ^ lwork -} ->+   IO (Int)+ormbr vect side trans m k a tau c lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _aSize = aDim0+   let lda = aDim1+   let n = cDim0+   let ldc = cDim1+   Call.ignore "ormbr: minimum[nq,k] == tauDim0" tauDim0+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      vectPtr <- Call.char vect+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ormbr vectPtr sidePtr transPtr mPtr nPtr kPtr aPtr ldaPtr tauPtr cPtr ldcPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dormhr.f>+ormhr ::+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Int {- ^ ilo -} ->+   Int {- ^ ihi -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Array ZeroInt Double {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ c -} ->+   Int {- ^ lwork -} ->+   IO (Int)+ormhr side trans m ilo ihi a tau c lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _aSize = aDim0+   let lda = aDim1+   let _tauSize = tauDim0+   let n = cDim0+   let ldc = cDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      iloPtr <- Call.cint ilo+      ihiPtr <- Call.cint ihi+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ormhr sidePtr transPtr mPtr nPtr iloPtr ihiPtr aPtr ldaPtr tauPtr cPtr ldcPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorml2.f>+orml2 ::+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Array ZeroInt Double {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ c -} ->+   Int {- ^ workSize -} ->+   IO (Int)+orml2 side trans m a tau c workSize = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _aSize = aDim0+   let lda = aDim1+   let k = tauDim0+   let n = cDim0+   let ldc = cDim1+   work <- Call.newArray1 workSize+   evalContT $ do+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.orml2 sidePtr transPtr mPtr nPtr kPtr aPtr ldaPtr tauPtr cPtr ldcPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dormlq.f>+ormlq ::+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Array ZeroInt Double {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ c -} ->+   Int {- ^ lwork -} ->+   IO (Int)+ormlq side trans m a tau c lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _aSize = aDim0+   let lda = aDim1+   let k = tauDim0+   let n = cDim0+   let ldc = cDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ormlq sidePtr transPtr mPtr nPtr kPtr aPtr ldaPtr tauPtr cPtr ldcPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dormql.f>+ormql ::+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Array ZeroInt Double {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ c -} ->+   Int {- ^ lwork -} ->+   IO (Int)+ormql side trans m a tau c lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let k = aDim0+   let lda = aDim1+   let n = cDim0+   let ldc = cDim1+   Call.assert "ormql: k == tauDim0" (k == tauDim0)+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ormql sidePtr transPtr mPtr nPtr kPtr aPtr ldaPtr tauPtr cPtr ldcPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dormqr.f>+ormqr ::+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Array ZeroInt Double {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ c -} ->+   Int {- ^ lwork -} ->+   IO (Int)+ormqr side trans m a tau c lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let k = aDim0+   let lda = aDim1+   let n = cDim0+   let ldc = cDim1+   Call.assert "ormqr: k == tauDim0" (k == tauDim0)+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ormqr sidePtr transPtr mPtr nPtr kPtr aPtr ldaPtr tauPtr cPtr ldcPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dormr2.f>+ormr2 ::+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Array ZeroInt Double {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ c -} ->+   Int {- ^ workSize -} ->+   IO (Int)+ormr2 side trans m a tau c workSize = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _aSize = aDim0+   let lda = aDim1+   let k = tauDim0+   let n = cDim0+   let ldc = cDim1+   work <- Call.newArray1 workSize+   evalContT $ do+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.ormr2 sidePtr transPtr mPtr nPtr kPtr aPtr ldaPtr tauPtr cPtr ldcPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dormr3.f>+ormr3 ::+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Int {- ^ l -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Array ZeroInt Double {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ c -} ->+   Int {- ^ workSize -} ->+   IO (Int)+ormr3 side trans m l a tau c workSize = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _aSize = aDim0+   let lda = aDim1+   let k = tauDim0+   let n = cDim0+   let ldc = cDim1+   work <- Call.newArray1 workSize+   evalContT $ do+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      lPtr <- Call.cint l+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.ormr3 sidePtr transPtr mPtr nPtr kPtr lPtr aPtr ldaPtr tauPtr cPtr ldcPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dormrq.f>+ormrq ::+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Array ZeroInt Double {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ c -} ->+   Int {- ^ lwork -} ->+   IO (Int)+ormrq side trans m a tau c lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _aSize = aDim0+   let lda = aDim1+   let k = tauDim0+   let n = cDim0+   let ldc = cDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ormrq sidePtr transPtr mPtr nPtr kPtr aPtr ldaPtr tauPtr cPtr ldcPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dormrz.f>+ormrz ::+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Int {- ^ l -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Array ZeroInt Double {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ c -} ->+   Int {- ^ lwork -} ->+   IO (Int)+ormrz side trans m l a tau c lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _aSize = aDim0+   let lda = aDim1+   let k = tauDim0+   let n = cDim0+   let ldc = cDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      lPtr <- Call.cint l+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ormrz sidePtr transPtr mPtr nPtr kPtr lPtr aPtr ldaPtr tauPtr cPtr ldcPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dormtr.f>+ormtr ::+   Char {- ^ side -} ->+   Char {- ^ uplo -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->+   Array ZeroInt Double {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ c -} ->+   Int {- ^ lwork -} ->+   IO (Int)+ormtr side uplo trans m a tau c lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _aSize = aDim0+   let lda = aDim1+   let _tauSize = tauDim0+   let n = cDim0+   let ldc = cDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      sidePtr <- Call.char side+      uploPtr <- Call.char uplo+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ormtr sidePtr uploPtr transPtr mPtr nPtr aPtr ldaPtr tauPtr cPtr ldcPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dopgtr.f>+opgtr ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Array ZeroInt Double {- ^ ap -} ->+   Array ZeroInt Double {- ^ tau -} ->+   Int {- ^ ldq -} ->+   IO (Array (ZeroInt,ZeroInt) Double, Int)+opgtr uplo n ap tau ldq = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let tauDim0 = Call.sizes1 $ Array.shape tau+   Call.assert "opgtr: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   Call.assert "opgtr: n-1 == tauDim0" (n-1 == tauDim0)+   q <- Call.newArray2 n ldq+   work <- Call.newArray1 (n-1)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.array ap+      tauPtr <- Call.array tau+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.opgtr uploPtr nPtr apPtr tauPtr qPtr ldqPtr workPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray q+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dopmtr.f>+opmtr ::+   Char {- ^ side -} ->+   Char {- ^ uplo -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Array ZeroInt Double {- ^ ap -} ->+   Array ZeroInt Double {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) Double {- ^ c -} ->+   Int {- ^ workSize -} ->+   IO (Int)+opmtr side uplo trans m ap tau c workSize = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _apSize = apDim0+   let _tauSize = tauDim0+   let n = cDim0+   let ldc = cDim1+   work <- Call.newArray1 workSize+   evalContT $ do+      sidePtr <- Call.char side+      uploPtr <- Call.char uplo+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      apPtr <- Call.array ap+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.opmtr sidePtr uploPtr transPtr mPtr nPtr apPtr tauPtr cPtr ldcPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)
+ src/Numeric/LAPACK/ComfortArray/Example.hs view
@@ -0,0 +1,112 @@+module Numeric.LAPACK.ComfortArray.Example where++import qualified Numeric.LAPACK.FFI.Real as Lapack+import qualified Numeric.Netlib.Class as Class+import qualified Numeric.Netlib.ComfortArray.Utility as Call+import Numeric.Netlib.ComfortArray.Utility (ZeroInt)++import qualified Data.Array.Comfort.Storable.Mutable as MutArray+import qualified Data.Array.Comfort.Storable as Array+import qualified Data.Array.Comfort.Shape as Shape+import Data.Array.Comfort.Storable.Mutable (IOArray)+import Data.Array.Comfort.Storable (Array)++import qualified Foreign.C.Types as C+import Foreign.Storable (peek)+import Foreign.Ptr (Ptr, FunPtr)++import Control.Monad.Trans.Cont (evalContT)+import Control.Monad.IO.Class (liftIO)+import Control.Applicative (pure, (<*>))++++choleskyDecompose ::+   (Class.Real a) => Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> IO ()+choleskyDecompose uplo kd ab = do+   let (n,ldab) = MutArray.shape ab+   evalContT $+      Call.runChecked "Banded.choleskyDecompose" $+         pure Lapack.pbtrf+          <*> Call.char uplo+          <*> Call.shapeSize n+          <*> Call.cint kd+          <*> Call.ioarray ab+          <*> Call.shapeSize ldab++choleskySolve ::+   (Class.Real a) =>+   Char -> Int ->+   Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO ()+choleskySolve uplo kd ab b = do+   let (n,ldab) = Array.shape ab+   let (nrhs,ldb) = MutArray.shape b+   evalContT $+      Call.runChecked "Banded.choleskySolve" $+         pure Lapack.pbtrs+          <*> Call.char uplo+          <*> Call.shapeSize n+          <*> Call.cint kd+          <*> Call.shapeSize nrhs+          <*> Call.array ab+          <*> Call.shapeSize ldab+          <*> Call.ioarray b+          <*> Call.shapeSize ldb+++leastSquares ::+   (Class.Real a) =>+   Char -> Int ->+   IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO ()+leastSquares trans m a b lwork = do+   let (n,lda) = MutArray.shape a+   let (nrhs,ldb) = MutArray.shape b+   evalContT $+      Call.runChecked "Dense.leastSquares" $+         pure Lapack.gels+          <*> Call.char trans+          <*> Call.cint m+          <*> Call.shapeSize n+          <*> Call.shapeSize nrhs+          <*> Call.ioarray a+          <*> Call.shapeSize lda+          <*> Call.ioarray b+          <*> Call.shapeSize ldb+          <*> Call.allocaArray lwork+          <*> Call.cint lwork+++eigenvalues ::+   Class.Real a =>+   Char -> Char -> FunPtr (Ptr a -> Ptr a -> IO Bool) ->+   IOArray (ZeroInt,ZeroInt) a -> ZeroInt -> Int ->+   IO (C.CInt, Array ZeroInt a, Array ZeroInt a, Array (ZeroInt,ZeroInt) a)+eigenvalues jobvs sort select a ldvs lwork = do+   let (n,lda) = MutArray.shape a+   wr <- Call.newArray n+   wi <- Call.newArray n+   vs <- Call.newArray (n,ldvs)+   sdim <- evalContT $ do+      sdimPtr <- Call.alloca+      Call.runChecked "Dense.eigenvalues" $+         pure Lapack.gees+          <*> Call.char jobvs+          <*> Call.char sort+          <*> pure select+          <*> Call.shapeSize n+          <*> Call.ioarray a+          <*> Call.shapeSize lda+          <*> pure sdimPtr+          <*> Call.ioarray wr+          <*> Call.ioarray wi+          <*> Call.ioarray vs+          <*> Call.shapeSize ldvs+          <*> Call.allocaArray lwork+          <*> Call.cint lwork+          <*> Call.allocaArray (Shape.size n)+      liftIO $ peek sdimPtr+   pure (,,,)+      <*> pure sdim+      <*> Call.freezeArray wr+      <*> Call.freezeArray wi+      <*> Call.freezeArray vs
+ src/Numeric/LAPACK/ComfortArray/Float.hs view
@@ -0,0 +1,13471 @@+-- Do not edit! Automatically generated by create-lapack-ffi.+module Numeric.LAPACK.ComfortArray.Float where++import qualified Numeric.LAPACK.FFI.Float as FFI+import qualified Numeric.Netlib.ComfortArray.Utility as Call+import Numeric.Netlib.ComfortArray.Utility (ZeroInt, (^!))++import qualified Data.Array.Comfort.Storable.Mutable as MutArray+import qualified Data.Array.Comfort.Storable as Array+import Data.Array.Comfort.Storable.Mutable (IOArray)+import Data.Array.Comfort.Storable (Array)++import Foreign.Storable (peek)+import Foreign.Ptr (Ptr, FunPtr)+import Foreign.C.String (castCCharToChar)+import Foreign.C.Types (CInt)++import Control.Monad.Trans.Cont (evalContT)+import Control.Monad.IO.Class (liftIO)+import Control.Applicative (pure, (<*>))+++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sbbcsd.f>+bbcsd ::+   Char {- ^ jobu1 -} ->+   Char {- ^ jobu2 -} ->+   Char {- ^ jobv1t -} ->+   Char {- ^ jobv2t -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   IOArray ZeroInt Float {- ^ theta -} ->+   IOArray ZeroInt Float {- ^ phi -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ u1 -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ u2 -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ v1t -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ v2t -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)+bbcsd jobu1 jobu2 jobv1t jobv2t trans m theta phi u1 u2 v1t v2t lwork = do+   let thetaDim0 = Call.sizes1 $ MutArray.shape theta+   let phiDim0 = Call.sizes1 $ MutArray.shape phi+   let (u1Dim0,u1Dim1) = Call.sizes2 $ MutArray.shape u1+   let (u2Dim0,u2Dim1) = Call.sizes2 $ MutArray.shape u2+   let (v1tDim0,v1tDim1) = Call.sizes2 $ MutArray.shape v1t+   let (v2tDim0,v2tDim1) = Call.sizes2 $ MutArray.shape v2t+   let q = thetaDim0+   let p = u1Dim0+   let ldu1 = u1Dim1+   let ldu2 = u2Dim1+   let ldv1t = v1tDim1+   let ldv2t = v2tDim1+   Call.assert "bbcsd: q-1 == phiDim0" (q-1 == phiDim0)+   Call.assert "bbcsd: m-p == u2Dim0" (m-p == u2Dim0)+   Call.assert "bbcsd: q == v1tDim0" (q == v1tDim0)+   Call.assert "bbcsd: m-q == v2tDim0" (m-q == v2tDim0)+   b11d <- Call.newArray1 q+   b11e <- Call.newArray1 (q-1)+   b12d <- Call.newArray1 q+   b12e <- Call.newArray1 (q-1)+   b21d <- Call.newArray1 q+   b21e <- Call.newArray1 (q-1)+   b22d <- Call.newArray1 q+   b22e <- Call.newArray1 (q-1)+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      jobu1Ptr <- Call.char jobu1+      jobu2Ptr <- Call.char jobu2+      jobv1tPtr <- Call.char jobv1t+      jobv2tPtr <- Call.char jobv2t+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      pPtr <- Call.cint p+      qPtr <- Call.cint q+      thetaPtr <- Call.ioarray theta+      phiPtr <- Call.ioarray phi+      u1Ptr <- Call.ioarray u1+      ldu1Ptr <- Call.cint ldu1+      u2Ptr <- Call.ioarray u2+      ldu2Ptr <- Call.cint ldu2+      v1tPtr <- Call.ioarray v1t+      ldv1tPtr <- Call.cint ldv1t+      v2tPtr <- Call.ioarray v2t+      ldv2tPtr <- Call.cint ldv2t+      b11dPtr <- Call.ioarray b11d+      b11ePtr <- Call.ioarray b11e+      b12dPtr <- Call.ioarray b12d+      b12ePtr <- Call.ioarray b12e+      b21dPtr <- Call.ioarray b21d+      b21ePtr <- Call.ioarray b21e+      b22dPtr <- Call.ioarray b22d+      b22ePtr <- Call.ioarray b22e+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.bbcsd jobu1Ptr jobu2Ptr jobv1tPtr jobv2tPtr transPtr mPtr pPtr qPtr thetaPtr phiPtr u1Ptr ldu1Ptr u2Ptr ldu2Ptr v1tPtr ldv1tPtr v2tPtr ldv2tPtr b11dPtr b11ePtr b12dPtr b12ePtr b21dPtr b21ePtr b22dPtr b22ePtr workPtr lworkPtr infoPtr+      liftIO $ pure (,,,,,,,,)+         <*> Call.freezeArray b11d+         <*> Call.freezeArray b11e+         <*> Call.freezeArray b12d+         <*> Call.freezeArray b12e+         <*> Call.freezeArray b21d+         <*> Call.freezeArray b21e+         <*> Call.freezeArray b22d+         <*> Call.freezeArray b22e+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sbdsdc.f>+bdsdc ::+   Char {- ^ uplo -} ->+   Char {- ^ compq -} ->+   IOArray ZeroInt Float {- ^ d -} ->+   IOArray ZeroInt Float {- ^ e -} ->+   Int {- ^ ldu -} ->+   Int {- ^ ldvt -} ->+   Int {- ^ ldq -} ->+   Int {- ^ ldiq -} ->+   Int {- ^ lwork -} ->+   IO (Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Array ZeroInt Float, Array ZeroInt CInt, Int)+bdsdc uplo compq d e ldu ldvt ldq ldiq lwork = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let n = dDim0+   Call.assert "bdsdc: n-1 == eDim0" (n-1 == eDim0)+   u <- Call.newArray2 n ldu+   vt <- Call.newArray2 n ldvt+   q <- Call.newArray1 ldq+   iq <- Call.newArray1 ldiq+   work <- Call.newArray1 (maximum[1,lwork])+   iwork <- Call.newArray1 (8*n)+   evalContT $ do+      uploPtr <- Call.char uplo+      compqPtr <- Call.char compq+      nPtr <- Call.cint n+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      uPtr <- Call.ioarray u+      lduPtr <- Call.cint ldu+      vtPtr <- Call.ioarray vt+      ldvtPtr <- Call.cint ldvt+      qPtr <- Call.ioarray q+      iqPtr <- Call.ioarray iq+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.bdsdc uploPtr compqPtr nPtr dPtr ePtr uPtr lduPtr vtPtr ldvtPtr qPtr iqPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,,,,)+         <*> Call.freezeArray u+         <*> Call.freezeArray vt+         <*> Call.freezeArray q+         <*> Call.freezeArray iq+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sbdsqr.f>+bdsqr ::+   Char {- ^ uplo -} ->+   Int {- ^ nru -} ->+   IOArray ZeroInt Float {- ^ d -} ->+   IOArray ZeroInt Float {- ^ e -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ vt -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ u -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ c -} ->+   IO (Int)+bdsqr uplo nru d e vt u c = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let (vtDim0,vtDim1) = Call.sizes2 $ MutArray.shape vt+   let (uDim0,uDim1) = Call.sizes2 $ MutArray.shape u+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let n = dDim0+   let ncvt = vtDim0+   let ldvt = vtDim1+   let ldu = uDim1+   let ncc = cDim0+   let ldc = cDim1+   Call.assert "bdsqr: n-1 == eDim0" (n-1 == eDim0)+   Call.assert "bdsqr: n == uDim0" (n == uDim0)+   work <- Call.newArray1 (4*n)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      ncvtPtr <- Call.cint ncvt+      nruPtr <- Call.cint nru+      nccPtr <- Call.cint ncc+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      vtPtr <- Call.ioarray vt+      ldvtPtr <- Call.cint ldvt+      uPtr <- Call.ioarray u+      lduPtr <- Call.cint ldu+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.bdsqr uploPtr nPtr ncvtPtr nruPtr nccPtr dPtr ePtr vtPtr ldvtPtr uPtr lduPtr cPtr ldcPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sdisna.f>+disna ::+   Char {- ^ job -} ->+   Int {- ^ m -} ->+   Int {- ^ n -} ->+   Array ZeroInt Float {- ^ d -} ->+   Int {- ^ sepSize -} ->+   IO (Array ZeroInt Float, Int)+disna job m n d sepSize = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let _dSize = dDim0+   sep <- Call.newArray1 sepSize+   evalContT $ do+      jobPtr <- Call.char job+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      dPtr <- Call.array d+      sepPtr <- Call.ioarray sep+      infoPtr <- Call.alloca+      liftIO $ FFI.disna jobPtr mPtr nPtr dPtr sepPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray sep+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgbbrd.f>+gbbrd ::+   Char {- ^ vect -} ->+   Int {- ^ m -} ->+   Int {- ^ kl -} ->+   Int {- ^ ku -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ ab -} ->+   Int {- ^ ldq -} ->+   Int {- ^ ldpt -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ c -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Int)+gbbrd vect m kl ku ab ldq ldpt c = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let n = abDim0+   let ldab = abDim1+   let ncc = cDim0+   let ldc = cDim1+   d <- Call.newArray1 (minimum[m,n])+   e <- Call.newArray1 (minimum[m,n]-1)+   q <- Call.newArray2 m ldq+   pt <- Call.newArray2 n ldpt+   work <- Call.newArray1 (2*maximum[m,n])+   evalContT $ do+      vectPtr <- Call.char vect+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      nccPtr <- Call.cint ncc+      klPtr <- Call.cint kl+      kuPtr <- Call.cint ku+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      ptPtr <- Call.ioarray pt+      ldptPtr <- Call.cint ldpt+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.gbbrd vectPtr mPtr nPtr nccPtr klPtr kuPtr abPtr ldabPtr dPtr ePtr qPtr ldqPtr ptPtr ldptPtr cPtr ldcPtr workPtr infoPtr+      liftIO $ pure (,,,,)+         <*> Call.freezeArray d+         <*> Call.freezeArray e+         <*> Call.freezeArray q+         <*> Call.freezeArray pt+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgbcon.f>+gbcon ::+   Char {- ^ norm -} ->+   Int {- ^ kl -} ->+   Int {- ^ ku -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ ab -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Float {- ^ anorm -} ->+   IO (Float, Int)+gbcon norm kl ku ab ipiv anorm = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = abDim0+   let ldab = abDim1+   Call.assert "gbcon: n == ipivDim0" (n == ipivDim0)+   work <- Call.newArray1 (3*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      normPtr <- Call.char norm+      nPtr <- Call.cint n+      klPtr <- Call.cint kl+      kuPtr <- Call.cint ku+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      ipivPtr <- Call.array ipiv+      anormPtr <- Call.float anorm+      rcondPtr <- Call.alloca+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gbcon normPtr nPtr klPtr kuPtr abPtr ldabPtr ipivPtr anormPtr rcondPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,)+         <*> peek rcondPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgbequ.f>+gbequ ::+   Int {- ^ m -} ->+   Int {- ^ kl -} ->+   Int {- ^ ku -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ ab -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float, Int)+gbequ m kl ku ab = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let n = abDim0+   let ldab = abDim1+   r <- Call.newArray1 m+   c <- Call.newArray1 n+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      klPtr <- Call.cint kl+      kuPtr <- Call.cint ku+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      rPtr <- Call.ioarray r+      cPtr <- Call.ioarray c+      rowcndPtr <- Call.alloca+      colcndPtr <- Call.alloca+      amaxPtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.gbequ mPtr nPtr klPtr kuPtr abPtr ldabPtr rPtr cPtr rowcndPtr colcndPtr amaxPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> Call.freezeArray r+         <*> Call.freezeArray c+         <*> peek rowcndPtr+         <*> peek colcndPtr+         <*> peek amaxPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgbequb.f>+gbequb ::+   Int {- ^ m -} ->+   Int {- ^ kl -} ->+   Int {- ^ ku -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ ab -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float, Int)+gbequb m kl ku ab = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let n = abDim0+   let ldab = abDim1+   r <- Call.newArray1 m+   c <- Call.newArray1 n+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      klPtr <- Call.cint kl+      kuPtr <- Call.cint ku+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      rPtr <- Call.ioarray r+      cPtr <- Call.ioarray c+      rowcndPtr <- Call.alloca+      colcndPtr <- Call.alloca+      amaxPtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.gbequb mPtr nPtr klPtr kuPtr abPtr ldabPtr rPtr cPtr rowcndPtr colcndPtr amaxPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> Call.freezeArray r+         <*> Call.freezeArray c+         <*> peek rowcndPtr+         <*> peek colcndPtr+         <*> peek amaxPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgbrfs.f>+gbrfs ::+   Char {- ^ trans -} ->+   Int {- ^ kl -} ->+   Int {- ^ ku -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ ab -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ afb -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ x -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Int)+gbrfs trans kl ku ab afb ipiv b x = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let (afbDim0,afbDim1) = Call.sizes2 $ Array.shape afb+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (xDim0,xDim1) = Call.sizes2 $ MutArray.shape x+   let n = abDim0+   let ldab = abDim1+   let ldafb = afbDim1+   let nrhs = bDim0+   let ldb = bDim1+   let ldx = xDim1+   Call.assert "gbrfs: n == afbDim0" (n == afbDim0)+   Call.assert "gbrfs: n == ipivDim0" (n == ipivDim0)+   Call.assert "gbrfs: nrhs == xDim0" (nrhs == xDim0)+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (3*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      transPtr <- Call.char trans+      nPtr <- Call.cint n+      klPtr <- Call.cint kl+      kuPtr <- Call.cint ku+      nrhsPtr <- Call.cint nrhs+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      afbPtr <- Call.array afb+      ldafbPtr <- Call.cint ldafb+      ipivPtr <- Call.array ipiv+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gbrfs transPtr nPtr klPtr kuPtr nrhsPtr abPtr ldabPtr afbPtr ldafbPtr ipivPtr bPtr ldbPtr xPtr ldxPtr ferrPtr berrPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgbsv.f>+gbsv ::+   Int {- ^ kl -} ->+   Int {- ^ ku -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ ab -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   IO (Array ZeroInt CInt, Int)+gbsv kl ku ab b = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = abDim0+   let ldab = abDim1+   let nrhs = bDim0+   let ldb = bDim1+   ipiv <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      klPtr <- Call.cint kl+      kuPtr <- Call.cint ku+      nrhsPtr <- Call.cint nrhs+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      ipivPtr <- Call.ioarray ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.gbsv nPtr klPtr kuPtr nrhsPtr abPtr ldabPtr ipivPtr bPtr ldbPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgbsvx.f>+gbsvx ::+   Char {- ^ fact -} ->+   Char {- ^ trans -} ->+   Int {- ^ kl -} ->+   Int {- ^ ku -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ ab -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ afb -} ->+   IOArray ZeroInt CInt {- ^ ipiv -} ->+   Char {- ^ equed -} ->+   IOArray ZeroInt Float {- ^ r -} ->+   IOArray ZeroInt Float {- ^ c -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   Int {- ^ ldx -} ->+   IO (Char, Array (ZeroInt,ZeroInt) Float, Float, Array ZeroInt Float, Array ZeroInt Float, Int)+gbsvx fact trans kl ku ab afb ipiv equed r c b ldx = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let (afbDim0,afbDim1) = Call.sizes2 $ MutArray.shape afb+   let ipivDim0 = Call.sizes1 $ MutArray.shape ipiv+   let rDim0 = Call.sizes1 $ MutArray.shape r+   let cDim0 = Call.sizes1 $ MutArray.shape c+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = abDim0+   let ldab = abDim1+   let ldafb = afbDim1+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "gbsvx: n == afbDim0" (n == afbDim0)+   Call.assert "gbsvx: n == ipivDim0" (n == ipivDim0)+   Call.assert "gbsvx: n == rDim0" (n == rDim0)+   Call.assert "gbsvx: n == cDim0" (n == cDim0)+   x <- Call.newArray2 nrhs ldx+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (3*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      factPtr <- Call.char fact+      transPtr <- Call.char trans+      nPtr <- Call.cint n+      klPtr <- Call.cint kl+      kuPtr <- Call.cint ku+      nrhsPtr <- Call.cint nrhs+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      afbPtr <- Call.ioarray afb+      ldafbPtr <- Call.cint ldafb+      ipivPtr <- Call.ioarray ipiv+      equedPtr <- Call.char equed+      rPtr <- Call.ioarray r+      cPtr <- Call.ioarray c+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      rcondPtr <- Call.alloca+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gbsvx factPtr transPtr nPtr klPtr kuPtr nrhsPtr abPtr ldabPtr afbPtr ldafbPtr ipivPtr equedPtr rPtr cPtr bPtr ldbPtr xPtr ldxPtr rcondPtr ferrPtr berrPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> fmap castCCharToChar (peek equedPtr)+         <*> Call.freezeArray x+         <*> peek rcondPtr+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgbtf2.f>+gbtf2 ::+   Int {- ^ m -} ->+   Int {- ^ kl -} ->+   Int {- ^ ku -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ ab -} ->+   IO (Array ZeroInt CInt, Int)+gbtf2 m kl ku ab = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let n = abDim0+   let ldab = abDim1+   ipiv <- Call.newArray1 (minimum[m,n])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      klPtr <- Call.cint kl+      kuPtr <- Call.cint ku+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      ipivPtr <- Call.ioarray ipiv+      infoPtr <- Call.alloca+      liftIO $ FFI.gbtf2 mPtr nPtr klPtr kuPtr abPtr ldabPtr ipivPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgbtrf.f>+gbtrf ::+   Int {- ^ m -} ->+   Int {- ^ kl -} ->+   Int {- ^ ku -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ ab -} ->+   IO (Array ZeroInt CInt, Int)+gbtrf m kl ku ab = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let n = abDim0+   let ldab = abDim1+   ipiv <- Call.newArray1 (minimum[m,n])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      klPtr <- Call.cint kl+      kuPtr <- Call.cint ku+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      ipivPtr <- Call.ioarray ipiv+      infoPtr <- Call.alloca+      liftIO $ FFI.gbtrf mPtr nPtr klPtr kuPtr abPtr ldabPtr ipivPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgbtrs.f>+gbtrs ::+   Char {- ^ trans -} ->+   Int {- ^ kl -} ->+   Int {- ^ ku -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ ab -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   IO (Int)+gbtrs trans kl ku ab ipiv b = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = abDim0+   let ldab = abDim1+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "gbtrs: n == ipivDim0" (n == ipivDim0)+   evalContT $ do+      transPtr <- Call.char trans+      nPtr <- Call.cint n+      klPtr <- Call.cint kl+      kuPtr <- Call.cint ku+      nrhsPtr <- Call.cint nrhs+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      ipivPtr <- Call.array ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.gbtrs transPtr nPtr klPtr kuPtr nrhsPtr abPtr ldabPtr ipivPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgebak.f>+gebak ::+   Char {- ^ job -} ->+   Char {- ^ side -} ->+   Int {- ^ ilo -} ->+   Int {- ^ ihi -} ->+   Array ZeroInt Float {- ^ scale -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ v -} ->+   IO (Int)+gebak job side ilo ihi scale v = do+   let scaleDim0 = Call.sizes1 $ Array.shape scale+   let (vDim0,vDim1) = Call.sizes2 $ MutArray.shape v+   let n = scaleDim0+   let m = vDim0+   let ldv = vDim1+   evalContT $ do+      jobPtr <- Call.char job+      sidePtr <- Call.char side+      nPtr <- Call.cint n+      iloPtr <- Call.cint ilo+      ihiPtr <- Call.cint ihi+      scalePtr <- Call.array scale+      mPtr <- Call.cint m+      vPtr <- Call.ioarray v+      ldvPtr <- Call.cint ldv+      infoPtr <- Call.alloca+      liftIO $ FFI.gebak jobPtr sidePtr nPtr iloPtr ihiPtr scalePtr mPtr vPtr ldvPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgebal.f>+gebal ::+   Char {- ^ job -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IO (Int, Int, Array ZeroInt Float, Int)+gebal job a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   scale <- Call.newArray1 n+   evalContT $ do+      jobPtr <- Call.char job+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      iloPtr <- Call.alloca+      ihiPtr <- Call.alloca+      scalePtr <- Call.ioarray scale+      infoPtr <- Call.alloca+      liftIO $ FFI.gebal jobPtr nPtr aPtr ldaPtr iloPtr ihiPtr scalePtr infoPtr+      liftIO $ pure (,,,)+         <*> fmap fromIntegral (peek iloPtr)+         <*> fmap fromIntegral (peek ihiPtr)+         <*> Call.freezeArray scale+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgebd2.f>+gebd2 ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)+gebd2 m a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   d <- Call.newArray1 (minimum[m,n])+   e <- Call.newArray1 (minimum[m,n]-1)+   tauq <- Call.newArray1 (minimum[m,n])+   taup <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 (maximum[m,n])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      tauqPtr <- Call.ioarray tauq+      taupPtr <- Call.ioarray taup+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.gebd2 mPtr nPtr aPtr ldaPtr dPtr ePtr tauqPtr taupPtr workPtr infoPtr+      liftIO $ pure (,,,,)+         <*> Call.freezeArray d+         <*> Call.freezeArray e+         <*> Call.freezeArray tauq+         <*> Call.freezeArray taup+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgebrd.f>+gebrd ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)+gebrd m a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   d <- Call.newArray1 (minimum[m,n])+   e <- Call.newArray1 (minimum[m,n]-1)+   tauq <- Call.newArray1 (minimum[m,n])+   taup <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      tauqPtr <- Call.ioarray tauq+      taupPtr <- Call.ioarray taup+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gebrd mPtr nPtr aPtr ldaPtr dPtr ePtr tauqPtr taupPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,,,,)+         <*> Call.freezeArray d+         <*> Call.freezeArray e+         <*> Call.freezeArray tauq+         <*> Call.freezeArray taup+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgecon.f>+gecon ::+   Char {- ^ norm -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Float {- ^ anorm -} ->+   IO (Float, Int)+gecon norm a anorm = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   work <- Call.newArray1 (4*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      normPtr <- Call.char norm+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      anormPtr <- Call.float anorm+      rcondPtr <- Call.alloca+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gecon normPtr nPtr aPtr ldaPtr anormPtr rcondPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,)+         <*> peek rcondPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgeequ.f>+geequ ::+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float, Int)+geequ m a = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   r <- Call.newArray1 m+   c <- Call.newArray1 n+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      rPtr <- Call.ioarray r+      cPtr <- Call.ioarray c+      rowcndPtr <- Call.alloca+      colcndPtr <- Call.alloca+      amaxPtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.geequ mPtr nPtr aPtr ldaPtr rPtr cPtr rowcndPtr colcndPtr amaxPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> Call.freezeArray r+         <*> Call.freezeArray c+         <*> peek rowcndPtr+         <*> peek colcndPtr+         <*> peek amaxPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgeequb.f>+geequb ::+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float, Int)+geequb m a = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   r <- Call.newArray1 m+   c <- Call.newArray1 n+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      rPtr <- Call.ioarray r+      cPtr <- Call.ioarray c+      rowcndPtr <- Call.alloca+      colcndPtr <- Call.alloca+      amaxPtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.geequb mPtr nPtr aPtr ldaPtr rPtr cPtr rowcndPtr colcndPtr amaxPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> Call.freezeArray r+         <*> Call.freezeArray c+         <*> peek rowcndPtr+         <*> peek colcndPtr+         <*> peek amaxPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgees.f>+gees ::+   Char {- ^ jobvs -} ->+   Char {- ^ sort -} ->+   FunPtr (Ptr Float -> Ptr Float -> IO Bool) {- ^ select -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Int {- ^ ldvs -} ->+   Int {- ^ lwork -} ->+   IO (Int, Array ZeroInt Float, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Int)+gees jobvs sort select a ldvs lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   wr <- Call.newArray1 n+   wi <- Call.newArray1 n+   vs <- Call.newArray2 n ldvs+   work <- Call.newArray1 (maximum[1,lwork])+   bwork <- Call.newArray1 n+   evalContT $ do+      jobvsPtr <- Call.char jobvs+      sortPtr <- Call.char sort+      selectPtr <- pure select+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      sdimPtr <- Call.alloca+      wrPtr <- Call.ioarray wr+      wiPtr <- Call.ioarray wi+      vsPtr <- Call.ioarray vs+      ldvsPtr <- Call.cint ldvs+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      bworkPtr <- Call.ioarray bwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gees jobvsPtr sortPtr selectPtr nPtr aPtr ldaPtr sdimPtr wrPtr wiPtr vsPtr ldvsPtr workPtr lworkPtr bworkPtr infoPtr+      liftIO $ pure (,,,,)+         <*> fmap fromIntegral (peek sdimPtr)+         <*> Call.freezeArray wr+         <*> Call.freezeArray wi+         <*> Call.freezeArray vs+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgeesx.f>+geesx ::+   Char {- ^ jobvs -} ->+   Char {- ^ sort -} ->+   FunPtr (Ptr Float -> Ptr Float -> IO Bool) {- ^ select -} ->+   Char {- ^ sense -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Int {- ^ ldvs -} ->+   Int {- ^ lwork -} ->+   Int {- ^ liwork -} ->+   IO (Int, Array ZeroInt Float, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Float, Float, Int)+geesx jobvs sort select sense a ldvs lwork liwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   wr <- Call.newArray1 n+   wi <- Call.newArray1 n+   vs <- Call.newArray2 n ldvs+   work <- Call.newArray1 (maximum[1,lwork])+   iwork <- Call.newArray1 (maximum[1,liwork])+   bwork <- Call.newArray1 n+   evalContT $ do+      jobvsPtr <- Call.char jobvs+      sortPtr <- Call.char sort+      selectPtr <- pure select+      sensePtr <- Call.char sense+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      sdimPtr <- Call.alloca+      wrPtr <- Call.ioarray wr+      wiPtr <- Call.ioarray wi+      vsPtr <- Call.ioarray vs+      ldvsPtr <- Call.cint ldvs+      rcondePtr <- Call.alloca+      rcondvPtr <- Call.alloca+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      bworkPtr <- Call.ioarray bwork+      infoPtr <- Call.alloca+      liftIO $ FFI.geesx jobvsPtr sortPtr selectPtr sensePtr nPtr aPtr ldaPtr sdimPtr wrPtr wiPtr vsPtr ldvsPtr rcondePtr rcondvPtr workPtr lworkPtr iworkPtr liworkPtr bworkPtr infoPtr+      liftIO $ pure (,,,,,,)+         <*> fmap fromIntegral (peek sdimPtr)+         <*> Call.freezeArray wr+         <*> Call.freezeArray wi+         <*> Call.freezeArray vs+         <*> peek rcondePtr+         <*> peek rcondvPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgeev.f>+geev ::+   Char {- ^ jobvl -} ->+   Char {- ^ jobvr -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Int {- ^ ldvl -} ->+   Int {- ^ ldvr -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Int)+geev jobvl jobvr a ldvl ldvr lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   wr <- Call.newArray1 n+   wi <- Call.newArray1 n+   vl <- Call.newArray2 n ldvl+   vr <- Call.newArray2 n ldvr+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      jobvlPtr <- Call.char jobvl+      jobvrPtr <- Call.char jobvr+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      wrPtr <- Call.ioarray wr+      wiPtr <- Call.ioarray wi+      vlPtr <- Call.ioarray vl+      ldvlPtr <- Call.cint ldvl+      vrPtr <- Call.ioarray vr+      ldvrPtr <- Call.cint ldvr+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.geev jobvlPtr jobvrPtr nPtr aPtr ldaPtr wrPtr wiPtr vlPtr ldvlPtr vrPtr ldvrPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,,,,)+         <*> Call.freezeArray wr+         <*> Call.freezeArray wi+         <*> Call.freezeArray vl+         <*> Call.freezeArray vr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgeevx.f>+geevx ::+   Char {- ^ balanc -} ->+   Char {- ^ jobvl -} ->+   Char {- ^ jobvr -} ->+   Char {- ^ sense -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Int {- ^ ldvl -} ->+   Int {- ^ ldvr -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float, Array ZeroInt Float, Int)+geevx balanc jobvl jobvr sense a ldvl ldvr lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   wr <- Call.newArray1 n+   wi <- Call.newArray1 n+   vl <- Call.newArray2 n ldvl+   vr <- Call.newArray2 n ldvr+   scale <- Call.newArray1 n+   rconde <- Call.newArray1 n+   rcondv <- Call.newArray1 n+   work <- Call.newArray1 (maximum[1,lwork])+   iwork <- Call.newArray1 (2*n-2)+   evalContT $ do+      balancPtr <- Call.char balanc+      jobvlPtr <- Call.char jobvl+      jobvrPtr <- Call.char jobvr+      sensePtr <- Call.char sense+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      wrPtr <- Call.ioarray wr+      wiPtr <- Call.ioarray wi+      vlPtr <- Call.ioarray vl+      ldvlPtr <- Call.cint ldvl+      vrPtr <- Call.ioarray vr+      ldvrPtr <- Call.cint ldvr+      iloPtr <- Call.alloca+      ihiPtr <- Call.alloca+      scalePtr <- Call.ioarray scale+      abnrmPtr <- Call.alloca+      rcondePtr <- Call.ioarray rconde+      rcondvPtr <- Call.ioarray rcondv+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.geevx balancPtr jobvlPtr jobvrPtr sensePtr nPtr aPtr ldaPtr wrPtr wiPtr vlPtr ldvlPtr vrPtr ldvrPtr iloPtr ihiPtr scalePtr abnrmPtr rcondePtr rcondvPtr workPtr lworkPtr iworkPtr infoPtr+      liftIO $ pure (,,,,,,,,,,)+         <*> Call.freezeArray wr+         <*> Call.freezeArray wi+         <*> Call.freezeArray vl+         <*> Call.freezeArray vr+         <*> fmap fromIntegral (peek iloPtr)+         <*> fmap fromIntegral (peek ihiPtr)+         <*> Call.freezeArray scale+         <*> peek abnrmPtr+         <*> Call.freezeArray rconde+         <*> Call.freezeArray rcondv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgehd2.f>+gehd2 ::+   Int {- ^ ilo -} ->+   Int {- ^ ihi -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IO (Array ZeroInt Float, Int)+gehd2 ilo ihi a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 (n-1)+   work <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      iloPtr <- Call.cint ilo+      ihiPtr <- Call.cint ihi+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.gehd2 nPtr iloPtr ihiPtr aPtr ldaPtr tauPtr workPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgehrd.f>+gehrd ::+   Int {- ^ ilo -} ->+   Int {- ^ ihi -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Float, Int)+gehrd ilo ihi a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 (n-1)+   work <- Call.newArray1 lwork+   evalContT $ do+      nPtr <- Call.cint n+      iloPtr <- Call.cint ilo+      ihiPtr <- Call.cint ihi+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gehrd nPtr iloPtr ihiPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgejsv.f>+gejsv ::+   Char {- ^ joba -} ->+   Char {- ^ jobu -} ->+   Char {- ^ jobv -} ->+   Char {- ^ jobr -} ->+   Char {- ^ jobt -} ->+   Char {- ^ jobp -} ->+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Int {- ^ ldu -} ->+   Int {- ^ ldv -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Int)+gejsv joba jobu jobv jobr jobt jobp m a ldu ldv lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   sva <- Call.newArray1 n+   u <- Call.newArray2 n ldu+   v <- Call.newArray2 n ldv+   work <- Call.newArray1 lwork+   iwork <- Call.newArray1 (m+3*n)+   evalContT $ do+      jobaPtr <- Call.char joba+      jobuPtr <- Call.char jobu+      jobvPtr <- Call.char jobv+      jobrPtr <- Call.char jobr+      jobtPtr <- Call.char jobt+      jobpPtr <- Call.char jobp+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      svaPtr <- Call.ioarray sva+      uPtr <- Call.ioarray u+      lduPtr <- Call.cint ldu+      vPtr <- Call.ioarray v+      ldvPtr <- Call.cint ldv+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gejsv jobaPtr jobuPtr jobvPtr jobrPtr jobtPtr jobpPtr mPtr nPtr aPtr ldaPtr svaPtr uPtr lduPtr vPtr ldvPtr workPtr lworkPtr iworkPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray sva+         <*> Call.freezeArray u+         <*> Call.freezeArray v+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgelq2.f>+gelq2 ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IO (Array ZeroInt Float, Int)+gelq2 m a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 m+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.gelq2 mPtr nPtr aPtr ldaPtr tauPtr workPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgelqf.f>+gelqf ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Float, Int)+gelqf m a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gelqf mPtr nPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgels.f>+gels ::+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   Int {- ^ lwork -} ->+   IO (Int)+gels trans m a b lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gels transPtr mPtr nPtr nrhsPtr aPtr ldaPtr bPtr ldbPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgelsd.f>+gelsd ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   Float {- ^ rcond -} ->+   Int {- ^ lwork -} ->+   Int {- ^ liwork -} ->+   IO (Array ZeroInt Float, Int, Int)+gelsd m a b rcond lwork liwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   s <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 (maximum[1,lwork])+   iwork <- Call.newArray1 (maximum[1,liwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      sPtr <- Call.ioarray s+      rcondPtr <- Call.float rcond+      rankPtr <- Call.alloca+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gelsd mPtr nPtr nrhsPtr aPtr ldaPtr bPtr ldbPtr sPtr rcondPtr rankPtr workPtr lworkPtr iworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray s+         <*> fmap fromIntegral (peek rankPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgelss.f>+gelss ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   Float {- ^ rcond -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Float, Int, Int)+gelss m a b rcond lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   s <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      sPtr <- Call.ioarray s+      rcondPtr <- Call.float rcond+      rankPtr <- Call.alloca+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gelss mPtr nPtr nrhsPtr aPtr ldaPtr bPtr ldbPtr sPtr rcondPtr rankPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray s+         <*> fmap fromIntegral (peek rankPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgelsy.f>+gelsy ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   IOArray ZeroInt CInt {- ^ jpvt -} ->+   Float {- ^ rcond -} ->+   Int {- ^ lwork -} ->+   IO (Int, Int)+gelsy m a b jpvt rcond lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let jpvtDim0 = Call.sizes1 $ MutArray.shape jpvt+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "gelsy: n == jpvtDim0" (n == jpvtDim0)+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      jpvtPtr <- Call.ioarray jpvt+      rcondPtr <- Call.float rcond+      rankPtr <- Call.alloca+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gelsy mPtr nPtr nrhsPtr aPtr ldaPtr bPtr ldbPtr jpvtPtr rcondPtr rankPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> fmap fromIntegral (peek rankPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgeql2.f>+geql2 ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IO (Array ZeroInt Float, Int)+geql2 m a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 n+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.geql2 mPtr nPtr aPtr ldaPtr tauPtr workPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgeqlf.f>+geqlf ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Float, Int)+geqlf m a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.geqlf mPtr nPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgeqp3.f>+geqp3 ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IOArray ZeroInt CInt {- ^ jpvt -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Float, Int)+geqp3 m a jpvt lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let jpvtDim0 = Call.sizes1 $ MutArray.shape jpvt+   let n = aDim0+   let lda = aDim1+   Call.assert "geqp3: n == jpvtDim0" (n == jpvtDim0)+   tau <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      jpvtPtr <- Call.ioarray jpvt+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.geqp3 mPtr nPtr aPtr ldaPtr jpvtPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgeqr2.f>+geqr2 ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IO (Array ZeroInt Float, Int)+geqr2 m a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 n+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.geqr2 mPtr nPtr aPtr ldaPtr tauPtr workPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgeqr2p.f>+geqr2p ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IO (Array ZeroInt Float, Int)+geqr2p m a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 n+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.geqr2p mPtr nPtr aPtr ldaPtr tauPtr workPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgeqrf.f>+geqrf ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Float, Int)+geqrf m a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.geqrf mPtr nPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgeqrfp.f>+geqrfp ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Float, Int)+geqrfp m a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.geqrfp mPtr nPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgerfs.f>+gerfs ::+   Char {- ^ trans -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ af -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ x -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Int)+gerfs trans a af ipiv b x = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (afDim0,afDim1) = Call.sizes2 $ Array.shape af+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (xDim0,xDim1) = Call.sizes2 $ MutArray.shape x+   let n = aDim0+   let lda = aDim1+   let ldaf = afDim1+   let nrhs = bDim0+   let ldb = bDim1+   let ldx = xDim1+   Call.assert "gerfs: n == afDim0" (n == afDim0)+   Call.assert "gerfs: n == ipivDim0" (n == ipivDim0)+   Call.assert "gerfs: nrhs == xDim0" (nrhs == xDim0)+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (3*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      transPtr <- Call.char trans+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      afPtr <- Call.array af+      ldafPtr <- Call.cint ldaf+      ipivPtr <- Call.array ipiv+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gerfs transPtr nPtr nrhsPtr aPtr ldaPtr afPtr ldafPtr ipivPtr bPtr ldbPtr xPtr ldxPtr ferrPtr berrPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgerq2.f>+gerq2 ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IO (Array ZeroInt Float, Int)+gerq2 m a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 m+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.gerq2 mPtr nPtr aPtr ldaPtr tauPtr workPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgerqf.f>+gerqf ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Float, Int)+gerqf m a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gerqf mPtr nPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgesc2.f>+gesc2 ::+   Array (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IOArray ZeroInt Float {- ^ rhs -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Array ZeroInt CInt {- ^ jpiv -} ->+   IO (Float)+gesc2 a rhs ipiv jpiv = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let rhsDim0 = Call.sizes1 $ MutArray.shape rhs+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let jpivDim0 = Call.sizes1 $ Array.shape jpiv+   let n = aDim0+   let lda = aDim1+   Call.assert "gesc2: n == rhsDim0" (n == rhsDim0)+   Call.assert "gesc2: n == ipivDim0" (n == ipivDim0)+   Call.assert "gesc2: n == jpivDim0" (n == jpivDim0)+   evalContT $ do+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      rhsPtr <- Call.ioarray rhs+      ipivPtr <- Call.array ipiv+      jpivPtr <- Call.array jpiv+      scalePtr <- Call.alloca+      liftIO $ FFI.gesc2 nPtr aPtr ldaPtr rhsPtr ipivPtr jpivPtr scalePtr+      liftIO $ peek scalePtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgesdd.f>+gesdd ::+   Char {- ^ jobz -} ->+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Int {- ^ ucol -} ->+   Int {- ^ ldu -} ->+   Int {- ^ ldvt -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Int)+gesdd jobz m a ucol ldu ldvt lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   s <- Call.newArray1 (minimum[m,n])+   u <- Call.newArray2 ucol ldu+   vt <- Call.newArray2 n ldvt+   work <- Call.newArray1 (maximum[1,lwork])+   iwork <- Call.newArray1 (8*minimum[m,n])+   evalContT $ do+      jobzPtr <- Call.char jobz+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      sPtr <- Call.ioarray s+      uPtr <- Call.ioarray u+      lduPtr <- Call.cint ldu+      vtPtr <- Call.ioarray vt+      ldvtPtr <- Call.cint ldvt+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gesdd jobzPtr mPtr nPtr aPtr ldaPtr sPtr uPtr lduPtr vtPtr ldvtPtr workPtr lworkPtr iworkPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray s+         <*> Call.freezeArray u+         <*> Call.freezeArray vt+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgesv.f>+gesv ::+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   IO (Array ZeroInt CInt, Int)+gesv a b = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   ipiv <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.ioarray ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.gesv nPtr nrhsPtr aPtr ldaPtr ipivPtr bPtr ldbPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgesvd.f>+gesvd ::+   Char {- ^ jobu -} ->+   Char {- ^ jobvt -} ->+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Int {- ^ ucol -} ->+   Int {- ^ ldu -} ->+   Int {- ^ ldvt -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Int)+gesvd jobu jobvt m a ucol ldu ldvt lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   s <- Call.newArray1 (minimum[m,n])+   u <- Call.newArray2 ucol ldu+   vt <- Call.newArray2 n ldvt+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      jobuPtr <- Call.char jobu+      jobvtPtr <- Call.char jobvt+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      sPtr <- Call.ioarray s+      uPtr <- Call.ioarray u+      lduPtr <- Call.cint ldu+      vtPtr <- Call.ioarray vt+      ldvtPtr <- Call.cint ldvt+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gesvd jobuPtr jobvtPtr mPtr nPtr aPtr ldaPtr sPtr uPtr lduPtr vtPtr ldvtPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray s+         <*> Call.freezeArray u+         <*> Call.freezeArray vt+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgesvj.f>+gesvj ::+   Char {- ^ joba -} ->+   Char {- ^ jobu -} ->+   Char {- ^ jobv -} ->+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Int {- ^ mv -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ v -} ->+   IOArray ZeroInt Float {- ^ work -} ->+   IO (Array ZeroInt Float, Int)+gesvj joba jobu jobv m a mv v work = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (vDim0,vDim1) = Call.sizes2 $ MutArray.shape v+   let workDim0 = Call.sizes1 $ MutArray.shape work+   let n = aDim0+   let lda = aDim1+   let ldv = vDim1+   let lwork = workDim0+   Call.assert "gesvj: n == vDim0" (n == vDim0)+   sva <- Call.newArray1 n+   evalContT $ do+      jobaPtr <- Call.char joba+      jobuPtr <- Call.char jobu+      jobvPtr <- Call.char jobv+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      svaPtr <- Call.ioarray sva+      mvPtr <- Call.cint mv+      vPtr <- Call.ioarray v+      ldvPtr <- Call.cint ldv+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gesvj jobaPtr jobuPtr jobvPtr mPtr nPtr aPtr ldaPtr svaPtr mvPtr vPtr ldvPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray sva+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgesvx.f>+gesvx ::+   Char {- ^ fact -} ->+   Char {- ^ trans -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ af -} ->+   IOArray ZeroInt CInt {- ^ ipiv -} ->+   Char {- ^ equed -} ->+   IOArray ZeroInt Float {- ^ r -} ->+   IOArray ZeroInt Float {- ^ c -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   Int {- ^ ldx -} ->+   IO (Char, Array (ZeroInt,ZeroInt) Float, Float, Array ZeroInt Float, Array ZeroInt Float, Int)+gesvx fact trans a af ipiv equed r c b ldx = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (afDim0,afDim1) = Call.sizes2 $ MutArray.shape af+   let ipivDim0 = Call.sizes1 $ MutArray.shape ipiv+   let rDim0 = Call.sizes1 $ MutArray.shape r+   let cDim0 = Call.sizes1 $ MutArray.shape c+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let ldaf = afDim1+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "gesvx: n == afDim0" (n == afDim0)+   Call.assert "gesvx: n == ipivDim0" (n == ipivDim0)+   Call.assert "gesvx: n == rDim0" (n == rDim0)+   Call.assert "gesvx: n == cDim0" (n == cDim0)+   x <- Call.newArray2 nrhs ldx+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (4*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      factPtr <- Call.char fact+      transPtr <- Call.char trans+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      afPtr <- Call.ioarray af+      ldafPtr <- Call.cint ldaf+      ipivPtr <- Call.ioarray ipiv+      equedPtr <- Call.char equed+      rPtr <- Call.ioarray r+      cPtr <- Call.ioarray c+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      rcondPtr <- Call.alloca+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gesvx factPtr transPtr nPtr nrhsPtr aPtr ldaPtr afPtr ldafPtr ipivPtr equedPtr rPtr cPtr bPtr ldbPtr xPtr ldxPtr rcondPtr ferrPtr berrPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> fmap castCCharToChar (peek equedPtr)+         <*> Call.freezeArray x+         <*> peek rcondPtr+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgetc2.f>+getc2 ::+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IO (Array ZeroInt CInt, Array ZeroInt CInt, Int)+getc2 a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   ipiv <- Call.newArray1 n+   jpiv <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.ioarray ipiv+      jpivPtr <- Call.ioarray jpiv+      infoPtr <- Call.alloca+      liftIO $ FFI.getc2 nPtr aPtr ldaPtr ipivPtr jpivPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ipiv+         <*> Call.freezeArray jpiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgetf2.f>+getf2 ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IO (Array ZeroInt CInt, Int)+getf2 m a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   ipiv <- Call.newArray1 (minimum[m,n])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.ioarray ipiv+      infoPtr <- Call.alloca+      liftIO $ FFI.getf2 mPtr nPtr aPtr ldaPtr ipivPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgetrf.f>+getrf ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IO (Array ZeroInt CInt, Int)+getrf m a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   ipiv <- Call.newArray1 (minimum[m,n])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.ioarray ipiv+      infoPtr <- Call.alloca+      liftIO $ FFI.getrf mPtr nPtr aPtr ldaPtr ipivPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgetri.f>+getri ::+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Int {- ^ lwork -} ->+   IO (Int)+getri a ipiv lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = aDim0+   let lda = aDim1+   Call.assert "getri: n == ipivDim0" (n == ipivDim0)+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.array ipiv+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.getri nPtr aPtr ldaPtr ipivPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgetrs.f>+getrs ::+   Char {- ^ trans -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   IO (Int)+getrs trans a ipiv b = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "getrs: n == ipivDim0" (n == ipivDim0)+   evalContT $ do+      transPtr <- Call.char trans+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.array ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.getrs transPtr nPtr nrhsPtr aPtr ldaPtr ipivPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sggbak.f>+ggbak ::+   Char {- ^ job -} ->+   Char {- ^ side -} ->+   Int {- ^ ilo -} ->+   Int {- ^ ihi -} ->+   Array ZeroInt Float {- ^ lscale -} ->+   Array ZeroInt Float {- ^ rscale -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ v -} ->+   IO (Int)+ggbak job side ilo ihi lscale rscale v = do+   let lscaleDim0 = Call.sizes1 $ Array.shape lscale+   let rscaleDim0 = Call.sizes1 $ Array.shape rscale+   let (vDim0,vDim1) = Call.sizes2 $ MutArray.shape v+   let n = lscaleDim0+   let m = vDim0+   let ldv = vDim1+   Call.assert "ggbak: n == rscaleDim0" (n == rscaleDim0)+   evalContT $ do+      jobPtr <- Call.char job+      sidePtr <- Call.char side+      nPtr <- Call.cint n+      iloPtr <- Call.cint ilo+      ihiPtr <- Call.cint ihi+      lscalePtr <- Call.array lscale+      rscalePtr <- Call.array rscale+      mPtr <- Call.cint m+      vPtr <- Call.ioarray v+      ldvPtr <- Call.cint ldv+      infoPtr <- Call.alloca+      liftIO $ FFI.ggbak jobPtr sidePtr nPtr iloPtr ihiPtr lscalePtr rscalePtr mPtr vPtr ldvPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sggbal.f>+ggbal ::+   Char {- ^ job -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   Int {- ^ lwork -} ->+   IO (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)+ggbal job a b lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   Call.assert "ggbal: n == bDim0" (n == bDim0)+   lscale <- Call.newArray1 n+   rscale <- Call.newArray1 n+   work <- Call.newArray1 lwork+   evalContT $ do+      jobPtr <- Call.char job+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      iloPtr <- Call.alloca+      ihiPtr <- Call.alloca+      lscalePtr <- Call.ioarray lscale+      rscalePtr <- Call.ioarray rscale+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.ggbal jobPtr nPtr aPtr ldaPtr bPtr ldbPtr iloPtr ihiPtr lscalePtr rscalePtr workPtr infoPtr+      liftIO $ pure (,,,,)+         <*> fmap fromIntegral (peek iloPtr)+         <*> fmap fromIntegral (peek ihiPtr)+         <*> Call.freezeArray lscale+         <*> Call.freezeArray rscale+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgges.f>+gges ::+   Char {- ^ jobvsl -} ->+   Char {- ^ jobvsr -} ->+   Char {- ^ sort -} ->+   FunPtr (Ptr Float -> Ptr Float -> Ptr Float -> IO Bool) {- ^ selctg -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   Int {- ^ ldvsl -} ->+   Int {- ^ ldvsr -} ->+   Int {- ^ lwork -} ->+   IO (Int, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Int)+gges jobvsl jobvsr sort selctg a b ldvsl ldvsr lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   Call.assert "gges: n == bDim0" (n == bDim0)+   alphar <- Call.newArray1 n+   alphai <- Call.newArray1 n+   beta <- Call.newArray1 n+   vsl <- Call.newArray2 n ldvsl+   vsr <- Call.newArray2 n ldvsr+   work <- Call.newArray1 (maximum[1,lwork])+   bwork <- Call.newArray1 n+   evalContT $ do+      jobvslPtr <- Call.char jobvsl+      jobvsrPtr <- Call.char jobvsr+      sortPtr <- Call.char sort+      selctgPtr <- pure selctg+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      sdimPtr <- Call.alloca+      alpharPtr <- Call.ioarray alphar+      alphaiPtr <- Call.ioarray alphai+      betaPtr <- Call.ioarray beta+      vslPtr <- Call.ioarray vsl+      ldvslPtr <- Call.cint ldvsl+      vsrPtr <- Call.ioarray vsr+      ldvsrPtr <- Call.cint ldvsr+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      bworkPtr <- Call.ioarray bwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gges jobvslPtr jobvsrPtr sortPtr selctgPtr nPtr aPtr ldaPtr bPtr ldbPtr sdimPtr alpharPtr alphaiPtr betaPtr vslPtr ldvslPtr vsrPtr ldvsrPtr workPtr lworkPtr bworkPtr infoPtr+      liftIO $ pure (,,,,,,)+         <*> fmap fromIntegral (peek sdimPtr)+         <*> Call.freezeArray alphar+         <*> Call.freezeArray alphai+         <*> Call.freezeArray beta+         <*> Call.freezeArray vsl+         <*> Call.freezeArray vsr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sggesx.f>+ggesx ::+   Char {- ^ jobvsl -} ->+   Char {- ^ jobvsr -} ->+   Char {- ^ sort -} ->+   FunPtr (Ptr Float -> Ptr Float -> Ptr Float -> IO Bool) {- ^ selctg -} ->+   Char {- ^ sense -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   Int {- ^ ldvsl -} ->+   Int {- ^ ldvsr -} ->+   Int {- ^ lwork -} ->+   Int {- ^ liwork -} ->+   IO (Int, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Array ZeroInt Float, Array ZeroInt Float, Int)+ggesx jobvsl jobvsr sort selctg sense a b ldvsl ldvsr lwork liwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   Call.assert "ggesx: n == bDim0" (n == bDim0)+   alphar <- Call.newArray1 n+   alphai <- Call.newArray1 n+   beta <- Call.newArray1 n+   vsl <- Call.newArray2 n ldvsl+   vsr <- Call.newArray2 n ldvsr+   rconde <- Call.newArray1 2+   rcondv <- Call.newArray1 2+   work <- Call.newArray1 (maximum[1,lwork])+   iwork <- Call.newArray1 (maximum[1,liwork])+   bwork <- Call.newArray1 n+   evalContT $ do+      jobvslPtr <- Call.char jobvsl+      jobvsrPtr <- Call.char jobvsr+      sortPtr <- Call.char sort+      selctgPtr <- pure selctg+      sensePtr <- Call.char sense+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      sdimPtr <- Call.alloca+      alpharPtr <- Call.ioarray alphar+      alphaiPtr <- Call.ioarray alphai+      betaPtr <- Call.ioarray beta+      vslPtr <- Call.ioarray vsl+      ldvslPtr <- Call.cint ldvsl+      vsrPtr <- Call.ioarray vsr+      ldvsrPtr <- Call.cint ldvsr+      rcondePtr <- Call.ioarray rconde+      rcondvPtr <- Call.ioarray rcondv+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      bworkPtr <- Call.ioarray bwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ggesx jobvslPtr jobvsrPtr sortPtr selctgPtr sensePtr nPtr aPtr ldaPtr bPtr ldbPtr sdimPtr alpharPtr alphaiPtr betaPtr vslPtr ldvslPtr vsrPtr ldvsrPtr rcondePtr rcondvPtr workPtr lworkPtr iworkPtr liworkPtr bworkPtr infoPtr+      liftIO $ pure (,,,,,,,,)+         <*> fmap fromIntegral (peek sdimPtr)+         <*> Call.freezeArray alphar+         <*> Call.freezeArray alphai+         <*> Call.freezeArray beta+         <*> Call.freezeArray vsl+         <*> Call.freezeArray vsr+         <*> Call.freezeArray rconde+         <*> Call.freezeArray rcondv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sggev.f>+ggev ::+   Char {- ^ jobvl -} ->+   Char {- ^ jobvr -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   Int {- ^ ldvl -} ->+   Int {- ^ ldvr -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Int)+ggev jobvl jobvr a b ldvl ldvr lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   Call.assert "ggev: n == bDim0" (n == bDim0)+   alphar <- Call.newArray1 n+   alphai <- Call.newArray1 n+   beta <- Call.newArray1 n+   vl <- Call.newArray2 n ldvl+   vr <- Call.newArray2 n ldvr+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      jobvlPtr <- Call.char jobvl+      jobvrPtr <- Call.char jobvr+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      alpharPtr <- Call.ioarray alphar+      alphaiPtr <- Call.ioarray alphai+      betaPtr <- Call.ioarray beta+      vlPtr <- Call.ioarray vl+      ldvlPtr <- Call.cint ldvl+      vrPtr <- Call.ioarray vr+      ldvrPtr <- Call.cint ldvr+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ggev jobvlPtr jobvrPtr nPtr aPtr ldaPtr bPtr ldbPtr alpharPtr alphaiPtr betaPtr vlPtr ldvlPtr vrPtr ldvrPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> Call.freezeArray alphar+         <*> Call.freezeArray alphai+         <*> Call.freezeArray beta+         <*> Call.freezeArray vl+         <*> Call.freezeArray vr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sggevx.f>+ggevx ::+   Char {- ^ balanc -} ->+   Char {- ^ jobvl -} ->+   Char {- ^ jobvr -} ->+   Char {- ^ sense -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   Int {- ^ ldvl -} ->+   Int {- ^ ldvr -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float, Array ZeroInt Float, Array ZeroInt Float, Int)+ggevx balanc jobvl jobvr sense a b ldvl ldvr lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   Call.assert "ggevx: n == bDim0" (n == bDim0)+   alphar <- Call.newArray1 n+   alphai <- Call.newArray1 n+   beta <- Call.newArray1 n+   vl <- Call.newArray2 n ldvl+   vr <- Call.newArray2 n ldvr+   lscale <- Call.newArray1 n+   rscale <- Call.newArray1 n+   rconde <- Call.newArray1 n+   rcondv <- Call.newArray1 n+   work <- Call.newArray1 (maximum[1,lwork])+   iwork <- Call.newArray1 (n+6)+   bwork <- Call.newArray1 n+   evalContT $ do+      balancPtr <- Call.char balanc+      jobvlPtr <- Call.char jobvl+      jobvrPtr <- Call.char jobvr+      sensePtr <- Call.char sense+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      alpharPtr <- Call.ioarray alphar+      alphaiPtr <- Call.ioarray alphai+      betaPtr <- Call.ioarray beta+      vlPtr <- Call.ioarray vl+      ldvlPtr <- Call.cint ldvl+      vrPtr <- Call.ioarray vr+      ldvrPtr <- Call.cint ldvr+      iloPtr <- Call.alloca+      ihiPtr <- Call.alloca+      lscalePtr <- Call.ioarray lscale+      rscalePtr <- Call.ioarray rscale+      abnrmPtr <- Call.alloca+      bbnrmPtr <- Call.alloca+      rcondePtr <- Call.ioarray rconde+      rcondvPtr <- Call.ioarray rcondv+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      bworkPtr <- Call.ioarray bwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ggevx balancPtr jobvlPtr jobvrPtr sensePtr nPtr aPtr ldaPtr bPtr ldbPtr alpharPtr alphaiPtr betaPtr vlPtr ldvlPtr vrPtr ldvrPtr iloPtr ihiPtr lscalePtr rscalePtr abnrmPtr bbnrmPtr rcondePtr rcondvPtr workPtr lworkPtr iworkPtr bworkPtr infoPtr+      liftIO $ pure (,,,,,,,,,,,,,)+         <*> Call.freezeArray alphar+         <*> Call.freezeArray alphai+         <*> Call.freezeArray beta+         <*> Call.freezeArray vl+         <*> Call.freezeArray vr+         <*> fmap fromIntegral (peek iloPtr)+         <*> fmap fromIntegral (peek ihiPtr)+         <*> Call.freezeArray lscale+         <*> Call.freezeArray rscale+         <*> peek abnrmPtr+         <*> peek bbnrmPtr+         <*> Call.freezeArray rconde+         <*> Call.freezeArray rcondv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sggglm.f>+ggglm ::+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   IOArray ZeroInt Float {- ^ d -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Int)+ggglm a b d lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let m = aDim0+   let lda = aDim1+   let p = bDim0+   let ldb = bDim1+   let n = dDim0+   x <- Call.newArray1 m+   y <- Call.newArray1 p+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      nPtr <- Call.cint n+      mPtr <- Call.cint m+      pPtr <- Call.cint p+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      dPtr <- Call.ioarray d+      xPtr <- Call.ioarray x+      yPtr <- Call.ioarray y+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ggglm nPtr mPtr pPtr aPtr ldaPtr bPtr ldbPtr dPtr xPtr yPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray x+         <*> Call.freezeArray y+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgghrd.f>+gghrd ::+   Char {- ^ compq -} ->+   Char {- ^ compz -} ->+   Int {- ^ ilo -} ->+   Int {- ^ ihi -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ q -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ z -} ->+   IO (Int)+gghrd compq compz ilo ihi a b q z = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   let ldq = qDim1+   let ldz = zDim1+   Call.assert "gghrd: n == bDim0" (n == bDim0)+   Call.assert "gghrd: n == qDim0" (n == qDim0)+   Call.assert "gghrd: n == zDim0" (n == zDim0)+   evalContT $ do+      compqPtr <- Call.char compq+      compzPtr <- Call.char compz+      nPtr <- Call.cint n+      iloPtr <- Call.cint ilo+      ihiPtr <- Call.cint ihi+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      infoPtr <- Call.alloca+      liftIO $ FFI.gghrd compqPtr compzPtr nPtr iloPtr ihiPtr aPtr ldaPtr bPtr ldbPtr qPtr ldqPtr zPtr ldzPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgglse.f>+gglse ::+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   IOArray ZeroInt Float {- ^ c -} ->+   IOArray ZeroInt Float {- ^ d -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Float, Int)+gglse a b c d lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let cDim0 = Call.sizes1 $ MutArray.shape c+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   let m = cDim0+   let p = dDim0+   Call.assert "gglse: n == bDim0" (n == bDim0)+   x <- Call.newArray1 n+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      pPtr <- Call.cint p+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      cPtr <- Call.ioarray c+      dPtr <- Call.ioarray d+      xPtr <- Call.ioarray x+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gglse mPtr nPtr pPtr aPtr ldaPtr bPtr ldbPtr cPtr dPtr xPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray x+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sggqrf.f>+ggqrf ::+   Int {- ^ n -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Int)+ggqrf n a b lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let m = aDim0+   let lda = aDim1+   let p = bDim0+   let ldb = bDim1+   taua <- Call.newArray1 (minimum[n,m])+   taub <- Call.newArray1 (minimum[n,p])+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      nPtr <- Call.cint n+      mPtr <- Call.cint m+      pPtr <- Call.cint p+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauaPtr <- Call.ioarray taua+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      taubPtr <- Call.ioarray taub+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ggqrf nPtr mPtr pPtr aPtr ldaPtr tauaPtr bPtr ldbPtr taubPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray taua+         <*> Call.freezeArray taub+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sggrqf.f>+ggrqf ::+   Int {- ^ m -} ->+   Int {- ^ p -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Int)+ggrqf m p a b lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   Call.assert "ggrqf: n == bDim0" (n == bDim0)+   taua <- Call.newArray1 (minimum[m,n])+   taub <- Call.newArray1 (minimum[p,n])+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      pPtr <- Call.cint p+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauaPtr <- Call.ioarray taua+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      taubPtr <- Call.ioarray taub+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ggrqf mPtr pPtr nPtr aPtr ldaPtr tauaPtr bPtr ldbPtr taubPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray taua+         <*> Call.freezeArray taub+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgsvj0.f>+gsvj0 ::+   Char {- ^ jobv -} ->+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IOArray ZeroInt Float {- ^ d -} ->+   IOArray ZeroInt Float {- ^ sva -} ->+   Int {- ^ mv -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ v -} ->+   Float {- ^ eps -} ->+   Float {- ^ sfmin -} ->+   Float {- ^ tol -} ->+   Int {- ^ nsweep -} ->+   Int {- ^ lwork -} ->+   IO (Int)+gsvj0 jobv m a d sva mv v eps sfmin tol nsweep lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let svaDim0 = Call.sizes1 $ MutArray.shape sva+   let (vDim0,vDim1) = Call.sizes2 $ MutArray.shape v+   let n = aDim0+   let lda = aDim1+   let ldv = vDim1+   Call.assert "gsvj0: n == dDim0" (n == dDim0)+   Call.assert "gsvj0: n == svaDim0" (n == svaDim0)+   Call.assert "gsvj0: n == vDim0" (n == vDim0)+   work <- Call.newArray1 lwork+   evalContT $ do+      jobvPtr <- Call.char jobv+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      dPtr <- Call.ioarray d+      svaPtr <- Call.ioarray sva+      mvPtr <- Call.cint mv+      vPtr <- Call.ioarray v+      ldvPtr <- Call.cint ldv+      epsPtr <- Call.float eps+      sfminPtr <- Call.float sfmin+      tolPtr <- Call.float tol+      nsweepPtr <- Call.cint nsweep+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gsvj0 jobvPtr mPtr nPtr aPtr ldaPtr dPtr svaPtr mvPtr vPtr ldvPtr epsPtr sfminPtr tolPtr nsweepPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgsvj1.f>+gsvj1 ::+   Char {- ^ jobv -} ->+   Int {- ^ m -} ->+   Int {- ^ n1 -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IOArray ZeroInt Float {- ^ d -} ->+   IOArray ZeroInt Float {- ^ sva -} ->+   Int {- ^ mv -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ v -} ->+   Float {- ^ eps -} ->+   Float {- ^ sfmin -} ->+   Float {- ^ tol -} ->+   Int {- ^ nsweep -} ->+   Int {- ^ lwork -} ->+   IO (Int)+gsvj1 jobv m n1 a d sva mv v eps sfmin tol nsweep lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let svaDim0 = Call.sizes1 $ MutArray.shape sva+   let (vDim0,vDim1) = Call.sizes2 $ MutArray.shape v+   let n = aDim0+   let lda = aDim1+   let ldv = vDim1+   Call.assert "gsvj1: n == dDim0" (n == dDim0)+   Call.assert "gsvj1: n == svaDim0" (n == svaDim0)+   Call.assert "gsvj1: n == vDim0" (n == vDim0)+   work <- Call.newArray1 lwork+   evalContT $ do+      jobvPtr <- Call.char jobv+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      n1Ptr <- Call.cint n1+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      dPtr <- Call.ioarray d+      svaPtr <- Call.ioarray sva+      mvPtr <- Call.cint mv+      vPtr <- Call.ioarray v+      ldvPtr <- Call.cint ldv+      epsPtr <- Call.float eps+      sfminPtr <- Call.float sfmin+      tolPtr <- Call.float tol+      nsweepPtr <- Call.cint nsweep+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gsvj1 jobvPtr mPtr nPtr n1Ptr aPtr ldaPtr dPtr svaPtr mvPtr vPtr ldvPtr epsPtr sfminPtr tolPtr nsweepPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgtcon.f>+gtcon ::+   Char {- ^ norm -} ->+   Array ZeroInt Float {- ^ dl -} ->+   Array ZeroInt Float {- ^ d -} ->+   Array ZeroInt Float {- ^ du -} ->+   Array ZeroInt Float {- ^ du2 -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Float {- ^ anorm -} ->+   IO (Float, Int)+gtcon norm dl d du du2 ipiv anorm = do+   let dlDim0 = Call.sizes1 $ Array.shape dl+   let dDim0 = Call.sizes1 $ Array.shape d+   let duDim0 = Call.sizes1 $ Array.shape du+   let du2Dim0 = Call.sizes1 $ Array.shape du2+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = dDim0+   Call.assert "gtcon: n-1 == dlDim0" (n-1 == dlDim0)+   Call.assert "gtcon: n-1 == duDim0" (n-1 == duDim0)+   Call.assert "gtcon: n-2 == du2Dim0" (n-2 == du2Dim0)+   Call.assert "gtcon: n == ipivDim0" (n == ipivDim0)+   work <- Call.newArray1 (2*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      normPtr <- Call.char norm+      nPtr <- Call.cint n+      dlPtr <- Call.array dl+      dPtr <- Call.array d+      duPtr <- Call.array du+      du2Ptr <- Call.array du2+      ipivPtr <- Call.array ipiv+      anormPtr <- Call.float anorm+      rcondPtr <- Call.alloca+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gtcon normPtr nPtr dlPtr dPtr duPtr du2Ptr ipivPtr anormPtr rcondPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,)+         <*> peek rcondPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgtrfs.f>+gtrfs ::+   Char {- ^ trans -} ->+   Array ZeroInt Float {- ^ dl -} ->+   Array ZeroInt Float {- ^ d -} ->+   Array ZeroInt Float {- ^ du -} ->+   Array ZeroInt Float {- ^ dlf -} ->+   Array ZeroInt Float {- ^ df -} ->+   Array ZeroInt Float {- ^ duf -} ->+   Array ZeroInt Float {- ^ du2 -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ x -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Int)+gtrfs trans dl d du dlf df duf du2 ipiv b x = do+   let dlDim0 = Call.sizes1 $ Array.shape dl+   let dDim0 = Call.sizes1 $ Array.shape d+   let duDim0 = Call.sizes1 $ Array.shape du+   let dlfDim0 = Call.sizes1 $ Array.shape dlf+   let dfDim0 = Call.sizes1 $ Array.shape df+   let dufDim0 = Call.sizes1 $ Array.shape duf+   let du2Dim0 = Call.sizes1 $ Array.shape du2+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (xDim0,xDim1) = Call.sizes2 $ MutArray.shape x+   let n = dDim0+   let nrhs = bDim0+   let ldb = bDim1+   let ldx = xDim1+   Call.assert "gtrfs: n-1 == dlDim0" (n-1 == dlDim0)+   Call.assert "gtrfs: n-1 == duDim0" (n-1 == duDim0)+   Call.assert "gtrfs: n-1 == dlfDim0" (n-1 == dlfDim0)+   Call.assert "gtrfs: n == dfDim0" (n == dfDim0)+   Call.assert "gtrfs: n-1 == dufDim0" (n-1 == dufDim0)+   Call.assert "gtrfs: n-2 == du2Dim0" (n-2 == du2Dim0)+   Call.assert "gtrfs: n == ipivDim0" (n == ipivDim0)+   Call.assert "gtrfs: nrhs == xDim0" (nrhs == xDim0)+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (3*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      transPtr <- Call.char trans+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      dlPtr <- Call.array dl+      dPtr <- Call.array d+      duPtr <- Call.array du+      dlfPtr <- Call.array dlf+      dfPtr <- Call.array df+      dufPtr <- Call.array duf+      du2Ptr <- Call.array du2+      ipivPtr <- Call.array ipiv+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gtrfs transPtr nPtr nrhsPtr dlPtr dPtr duPtr dlfPtr dfPtr dufPtr du2Ptr ipivPtr bPtr ldbPtr xPtr ldxPtr ferrPtr berrPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgtsv.f>+gtsv ::+   IOArray ZeroInt Float {- ^ dl -} ->+   IOArray ZeroInt Float {- ^ d -} ->+   IOArray ZeroInt Float {- ^ du -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   IO (Int)+gtsv dl d du b = do+   let dlDim0 = Call.sizes1 $ MutArray.shape dl+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let duDim0 = Call.sizes1 $ MutArray.shape du+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = dDim0+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "gtsv: n-1 == dlDim0" (n-1 == dlDim0)+   Call.assert "gtsv: n-1 == duDim0" (n-1 == duDim0)+   evalContT $ do+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      dlPtr <- Call.ioarray dl+      dPtr <- Call.ioarray d+      duPtr <- Call.ioarray du+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.gtsv nPtr nrhsPtr dlPtr dPtr duPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgtsvx.f>+gtsvx ::+   Char {- ^ fact -} ->+   Char {- ^ trans -} ->+   Array ZeroInt Float {- ^ dl -} ->+   Array ZeroInt Float {- ^ d -} ->+   Array ZeroInt Float {- ^ du -} ->+   IOArray ZeroInt Float {- ^ dlf -} ->+   IOArray ZeroInt Float {- ^ df -} ->+   IOArray ZeroInt Float {- ^ duf -} ->+   IOArray ZeroInt Float {- ^ du2 -} ->+   IOArray ZeroInt CInt {- ^ ipiv -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ b -} ->+   Int {- ^ ldx -} ->+   IO (Array (ZeroInt,ZeroInt) Float, Float, Array ZeroInt Float, Array ZeroInt Float, Int)+gtsvx fact trans dl d du dlf df duf du2 ipiv b ldx = do+   let dlDim0 = Call.sizes1 $ Array.shape dl+   let dDim0 = Call.sizes1 $ Array.shape d+   let duDim0 = Call.sizes1 $ Array.shape du+   let dlfDim0 = Call.sizes1 $ MutArray.shape dlf+   let dfDim0 = Call.sizes1 $ MutArray.shape df+   let dufDim0 = Call.sizes1 $ MutArray.shape duf+   let du2Dim0 = Call.sizes1 $ MutArray.shape du2+   let ipivDim0 = Call.sizes1 $ MutArray.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let n = dDim0+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "gtsvx: n-1 == dlDim0" (n-1 == dlDim0)+   Call.assert "gtsvx: n-1 == duDim0" (n-1 == duDim0)+   Call.assert "gtsvx: n-1 == dlfDim0" (n-1 == dlfDim0)+   Call.assert "gtsvx: n == dfDim0" (n == dfDim0)+   Call.assert "gtsvx: n-1 == dufDim0" (n-1 == dufDim0)+   Call.assert "gtsvx: n-2 == du2Dim0" (n-2 == du2Dim0)+   Call.assert "gtsvx: n == ipivDim0" (n == ipivDim0)+   x <- Call.newArray2 nrhs ldx+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (3*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      factPtr <- Call.char fact+      transPtr <- Call.char trans+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      dlPtr <- Call.array dl+      dPtr <- Call.array d+      duPtr <- Call.array du+      dlfPtr <- Call.ioarray dlf+      dfPtr <- Call.ioarray df+      dufPtr <- Call.ioarray duf+      du2Ptr <- Call.ioarray du2+      ipivPtr <- Call.ioarray ipiv+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      rcondPtr <- Call.alloca+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.gtsvx factPtr transPtr nPtr nrhsPtr dlPtr dPtr duPtr dlfPtr dfPtr dufPtr du2Ptr ipivPtr bPtr ldbPtr xPtr ldxPtr rcondPtr ferrPtr berrPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,,,,)+         <*> Call.freezeArray x+         <*> peek rcondPtr+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgttrf.f>+gttrf ::+   IOArray ZeroInt Float {- ^ dl -} ->+   IOArray ZeroInt Float {- ^ d -} ->+   IOArray ZeroInt Float {- ^ du -} ->+   IO (Array ZeroInt Float, Array ZeroInt CInt, Int)+gttrf dl d du = do+   let dlDim0 = Call.sizes1 $ MutArray.shape dl+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let duDim0 = Call.sizes1 $ MutArray.shape du+   let n = dDim0+   Call.assert "gttrf: n-1 == dlDim0" (n-1 == dlDim0)+   Call.assert "gttrf: n-1 == duDim0" (n-1 == duDim0)+   du2 <- Call.newArray1 (n-2)+   ipiv <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      dlPtr <- Call.ioarray dl+      dPtr <- Call.ioarray d+      duPtr <- Call.ioarray du+      du2Ptr <- Call.ioarray du2+      ipivPtr <- Call.ioarray ipiv+      infoPtr <- Call.alloca+      liftIO $ FFI.gttrf nPtr dlPtr dPtr duPtr du2Ptr ipivPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray du2+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgttrs.f>+gttrs ::+   Char {- ^ trans -} ->+   Array ZeroInt Float {- ^ dl -} ->+   Array ZeroInt Float {- ^ d -} ->+   Array ZeroInt Float {- ^ du -} ->+   Array ZeroInt Float {- ^ du2 -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   IO (Int)+gttrs trans dl d du du2 ipiv b = do+   let dlDim0 = Call.sizes1 $ Array.shape dl+   let dDim0 = Call.sizes1 $ Array.shape d+   let duDim0 = Call.sizes1 $ Array.shape du+   let du2Dim0 = Call.sizes1 $ Array.shape du2+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = dDim0+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "gttrs: n-1 == dlDim0" (n-1 == dlDim0)+   Call.assert "gttrs: n-1 == duDim0" (n-1 == duDim0)+   Call.assert "gttrs: n-2 == du2Dim0" (n-2 == du2Dim0)+   Call.assert "gttrs: n == ipivDim0" (n == ipivDim0)+   evalContT $ do+      transPtr <- Call.char trans+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      dlPtr <- Call.array dl+      dPtr <- Call.array d+      duPtr <- Call.array du+      du2Ptr <- Call.array du2+      ipivPtr <- Call.array ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.gttrs transPtr nPtr nrhsPtr dlPtr dPtr duPtr du2Ptr ipivPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sgtts2.f>+gtts2 ::+   Int {- ^ itrans -} ->+   Array ZeroInt Float {- ^ dl -} ->+   Array ZeroInt Float {- ^ d -} ->+   Array ZeroInt Float {- ^ du -} ->+   Array ZeroInt Float {- ^ du2 -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   IO ()+gtts2 itrans dl d du du2 ipiv b = do+   let dlDim0 = Call.sizes1 $ Array.shape dl+   let dDim0 = Call.sizes1 $ Array.shape d+   let duDim0 = Call.sizes1 $ Array.shape du+   let du2Dim0 = Call.sizes1 $ Array.shape du2+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = dDim0+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "gtts2: n-1 == dlDim0" (n-1 == dlDim0)+   Call.assert "gtts2: n-1 == duDim0" (n-1 == duDim0)+   Call.assert "gtts2: n-2 == du2Dim0" (n-2 == du2Dim0)+   Call.assert "gtts2: n == ipivDim0" (n == ipivDim0)+   evalContT $ do+      itransPtr <- Call.cint itrans+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      dlPtr <- Call.array dl+      dPtr <- Call.array d+      duPtr <- Call.array du+      du2Ptr <- Call.array du2+      ipivPtr <- Call.array ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      liftIO $ FFI.gtts2 itransPtr nPtr nrhsPtr dlPtr dPtr duPtr du2Ptr ipivPtr bPtr ldbPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssbev.f>+sbev ::+   Char {- ^ jobz -} ->+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ ab -} ->+   Int {- ^ ldz -} ->+   IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Int)+sbev jobz uplo kd ab ldz = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let n = abDim0+   let ldab = abDim1+   w <- Call.newArray1 n+   z <- Call.newArray2 n ldz+   work <- Call.newArray1 (maximum[1,3*n-2])+   evalContT $ do+      jobzPtr <- Call.char jobz+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.sbev jobzPtr uploPtr nPtr kdPtr abPtr ldabPtr wPtr zPtr ldzPtr workPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssbevd.f>+sbevd ::+   Char {- ^ jobz -} ->+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ ab -} ->+   Int {- ^ ldz -} ->+   Int {- ^ workSize -} ->+   Int {- ^ lwork -} ->+   Int {- ^ liwork -} ->+   IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Int)+sbevd jobz uplo kd ab ldz workSize lwork liwork = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let n = abDim0+   let ldab = abDim1+   w <- Call.newArray1 n+   z <- Call.newArray2 n ldz+   work <- Call.newArray1 workSize+   iwork <- Call.newArray1 (maximum[1,liwork])+   evalContT $ do+      jobzPtr <- Call.char jobz+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      infoPtr <- Call.alloca+      liftIO $ FFI.sbevd jobzPtr uploPtr nPtr kdPtr abPtr ldabPtr wPtr zPtr ldzPtr workPtr lworkPtr iworkPtr liworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssbevx.f>+sbevx ::+   Char {- ^ jobz -} ->+   Char {- ^ range -} ->+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ ab -} ->+   Int {- ^ ldq -} ->+   Float {- ^ vl -} ->+   Float {- ^ vu -} ->+   Int {- ^ il -} ->+   Int {- ^ iu -} ->+   Float {- ^ abstol -} ->+   Int {- ^ m -} ->+   Int {- ^ ldz -} ->+   IO (Array (ZeroInt,ZeroInt) Float, Int, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array ZeroInt CInt, Int)+sbevx jobz range uplo kd ab ldq vl vu il iu abstol m ldz = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let n = abDim0+   let ldab = abDim1+   q <- Call.newArray2 n ldq+   w <- Call.newArray1 n+   z <- Call.newArray2 (maximum[1,m]) ldz+   work <- Call.newArray1 (7*n)+   iwork <- Call.newArray1 (5*n)+   ifail <- Call.newArray1 n+   evalContT $ do+      jobzPtr <- Call.char jobz+      rangePtr <- Call.char range+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      vlPtr <- Call.float vl+      vuPtr <- Call.float vu+      ilPtr <- Call.cint il+      iuPtr <- Call.cint iu+      abstolPtr <- Call.float abstol+      mPtr <- Call.alloca+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      ifailPtr <- Call.ioarray ifail+      infoPtr <- Call.alloca+      liftIO $ FFI.sbevx jobzPtr rangePtr uploPtr nPtr kdPtr abPtr ldabPtr qPtr ldqPtr vlPtr vuPtr ilPtr iuPtr abstolPtr mPtr wPtr zPtr ldzPtr workPtr iworkPtr ifailPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> Call.freezeArray q+         <*> fmap fromIntegral (peek mPtr)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> Call.freezeArray ifail+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssbgst.f>+sbgst ::+   Char {- ^ vect -} ->+   Char {- ^ uplo -} ->+   Int {- ^ ka -} ->+   Int {- ^ kb -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ ab -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ bb -} ->+   Int {- ^ ldx -} ->+   IO (Array (ZeroInt,ZeroInt) Float, Int)+sbgst vect uplo ka kb ab bb ldx = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let (bbDim0,bbDim1) = Call.sizes2 $ Array.shape bb+   let n = abDim0+   let ldab = abDim1+   let ldbb = bbDim1+   Call.assert "sbgst: n == bbDim0" (n == bbDim0)+   x <- Call.newArray2 n ldx+   work <- Call.newArray1 (2*n)+   evalContT $ do+      vectPtr <- Call.char vect+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kaPtr <- Call.cint ka+      kbPtr <- Call.cint kb+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      bbPtr <- Call.array bb+      ldbbPtr <- Call.cint ldbb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.sbgst vectPtr uploPtr nPtr kaPtr kbPtr abPtr ldabPtr bbPtr ldbbPtr xPtr ldxPtr workPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray x+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssbgv.f>+sbgv ::+   Char {- ^ jobz -} ->+   Char {- ^ uplo -} ->+   Int {- ^ ka -} ->+   Int {- ^ kb -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ ab -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ bb -} ->+   Int {- ^ ldz -} ->+   IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Int)+sbgv jobz uplo ka kb ab bb ldz = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let (bbDim0,bbDim1) = Call.sizes2 $ MutArray.shape bb+   let n = abDim0+   let ldab = abDim1+   let ldbb = bbDim1+   Call.assert "sbgv: n == bbDim0" (n == bbDim0)+   w <- Call.newArray1 n+   z <- Call.newArray2 n ldz+   work <- Call.newArray1 (3*n)+   evalContT $ do+      jobzPtr <- Call.char jobz+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kaPtr <- Call.cint ka+      kbPtr <- Call.cint kb+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      bbPtr <- Call.ioarray bb+      ldbbPtr <- Call.cint ldbb+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.sbgv jobzPtr uploPtr nPtr kaPtr kbPtr abPtr ldabPtr bbPtr ldbbPtr wPtr zPtr ldzPtr workPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssbgvd.f>+sbgvd ::+   Char {- ^ jobz -} ->+   Char {- ^ uplo -} ->+   Int {- ^ ka -} ->+   Int {- ^ kb -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ ab -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ bb -} ->+   Int {- ^ ldz -} ->+   Int {- ^ lwork -} ->+   Int {- ^ liwork -} ->+   IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Int)+sbgvd jobz uplo ka kb ab bb ldz lwork liwork = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let (bbDim0,bbDim1) = Call.sizes2 $ MutArray.shape bb+   let n = abDim0+   let ldab = abDim1+   let ldbb = bbDim1+   Call.assert "sbgvd: n == bbDim0" (n == bbDim0)+   w <- Call.newArray1 n+   z <- Call.newArray2 n ldz+   work <- Call.newArray1 (maximum[1,lwork])+   iwork <- Call.newArray1 (maximum[1,liwork])+   evalContT $ do+      jobzPtr <- Call.char jobz+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kaPtr <- Call.cint ka+      kbPtr <- Call.cint kb+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      bbPtr <- Call.ioarray bb+      ldbbPtr <- Call.cint ldbb+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      infoPtr <- Call.alloca+      liftIO $ FFI.sbgvd jobzPtr uploPtr nPtr kaPtr kbPtr abPtr ldabPtr bbPtr ldbbPtr wPtr zPtr ldzPtr workPtr lworkPtr iworkPtr liworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssbgvx.f>+sbgvx ::+   Char {- ^ jobz -} ->+   Char {- ^ range -} ->+   Char {- ^ uplo -} ->+   Int {- ^ ka -} ->+   Int {- ^ kb -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ ab -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ bb -} ->+   Int {- ^ ldq -} ->+   Float {- ^ vl -} ->+   Float {- ^ vu -} ->+   Int {- ^ il -} ->+   Int {- ^ iu -} ->+   Float {- ^ abstol -} ->+   Int {- ^ ldz -} ->+   Int {- ^ m -} ->+   IO (Array (ZeroInt,ZeroInt) Float, Int, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array ZeroInt CInt, Int)+sbgvx jobz range uplo ka kb ab bb ldq vl vu il iu abstol ldz m = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let (bbDim0,bbDim1) = Call.sizes2 $ MutArray.shape bb+   let n = abDim0+   let ldab = abDim1+   let ldbb = bbDim1+   Call.assert "sbgvx: n == bbDim0" (n == bbDim0)+   q <- Call.newArray2 n ldq+   w <- Call.newArray1 n+   z <- Call.newArray2 n ldz+   work <- Call.newArray1 (7*n)+   iwork <- Call.newArray1 (5*n)+   ifail <- Call.newArray1 m+   evalContT $ do+      jobzPtr <- Call.char jobz+      rangePtr <- Call.char range+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kaPtr <- Call.cint ka+      kbPtr <- Call.cint kb+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      bbPtr <- Call.ioarray bb+      ldbbPtr <- Call.cint ldbb+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      vlPtr <- Call.float vl+      vuPtr <- Call.float vu+      ilPtr <- Call.cint il+      iuPtr <- Call.cint iu+      abstolPtr <- Call.float abstol+      mPtr <- Call.alloca+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      ifailPtr <- Call.ioarray ifail+      infoPtr <- Call.alloca+      liftIO $ FFI.sbgvx jobzPtr rangePtr uploPtr nPtr kaPtr kbPtr abPtr ldabPtr bbPtr ldbbPtr qPtr ldqPtr vlPtr vuPtr ilPtr iuPtr abstolPtr mPtr wPtr zPtr ldzPtr workPtr iworkPtr ifailPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> Call.freezeArray q+         <*> fmap fromIntegral (peek mPtr)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> Call.freezeArray ifail+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssbtrd.f>+sbtrd ::+   Char {- ^ vect -} ->+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ ab -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ q -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Int)+sbtrd vect uplo kd ab q = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let n = abDim0+   let ldab = abDim1+   let ldq = qDim1+   Call.assert "sbtrd: n == qDim0" (n == qDim0)+   d <- Call.newArray1 n+   e <- Call.newArray1 (n-1)+   work <- Call.newArray1 n+   evalContT $ do+      vectPtr <- Call.char vect+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.sbtrd vectPtr uploPtr nPtr kdPtr abPtr ldabPtr dPtr ePtr qPtr ldqPtr workPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray d+         <*> Call.freezeArray e+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssyev.f>+syev ::+   Char {- ^ jobz -} ->+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Float, Int)+syev jobz uplo a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   w <- Call.newArray1 n+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      jobzPtr <- Call.char jobz+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      wPtr <- Call.ioarray w+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.syev jobzPtr uploPtr nPtr aPtr ldaPtr wPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray w+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssyevd.f>+syevd ::+   Char {- ^ jobz -} ->+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Int {- ^ workSize -} ->+   Int {- ^ lwork -} ->+   Int {- ^ liwork -} ->+   IO (Array ZeroInt Float, Int)+syevd jobz uplo a workSize lwork liwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   w <- Call.newArray1 n+   work <- Call.newArray1 workSize+   iwork <- Call.newArray1 (maximum[1,liwork])+   evalContT $ do+      jobzPtr <- Call.char jobz+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      wPtr <- Call.ioarray w+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      infoPtr <- Call.alloca+      liftIO $ FFI.syevd jobzPtr uploPtr nPtr aPtr ldaPtr wPtr workPtr lworkPtr iworkPtr liworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray w+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssyevr.f>+syevr ::+   Char {- ^ jobz -} ->+   Char {- ^ range -} ->+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Float {- ^ vl -} ->+   Float {- ^ vu -} ->+   Int {- ^ il -} ->+   Int {- ^ iu -} ->+   Float {- ^ abstol -} ->+   Int {- ^ m -} ->+   Int {- ^ ldz -} ->+   Int {- ^ lwork -} ->+   Int {- ^ liwork -} ->+   IO (Int, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array ZeroInt CInt, Int)+syevr jobz range uplo a vl vu il iu abstol m ldz lwork liwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   w <- Call.newArray1 n+   z <- Call.newArray2 (maximum[1,m]) ldz+   isuppz <- Call.newArray1 (2*maximum[1,m])+   work <- Call.newArray1 (maximum[1,lwork])+   iwork <- Call.newArray1 (maximum[1,liwork])+   evalContT $ do+      jobzPtr <- Call.char jobz+      rangePtr <- Call.char range+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      vlPtr <- Call.float vl+      vuPtr <- Call.float vu+      ilPtr <- Call.cint il+      iuPtr <- Call.cint iu+      abstolPtr <- Call.float abstol+      mPtr <- Call.alloca+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      isuppzPtr <- Call.ioarray isuppz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      infoPtr <- Call.alloca+      liftIO $ FFI.syevr jobzPtr rangePtr uploPtr nPtr aPtr ldaPtr vlPtr vuPtr ilPtr iuPtr abstolPtr mPtr wPtr zPtr ldzPtr isuppzPtr workPtr lworkPtr iworkPtr liworkPtr infoPtr+      liftIO $ pure (,,,,)+         <*> fmap fromIntegral (peek mPtr)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> Call.freezeArray isuppz+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssyevx.f>+syevx ::+   Char {- ^ jobz -} ->+   Char {- ^ range -} ->+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Float {- ^ vl -} ->+   Float {- ^ vu -} ->+   Int {- ^ il -} ->+   Int {- ^ iu -} ->+   Float {- ^ abstol -} ->+   Int {- ^ m -} ->+   Int {- ^ ldz -} ->+   Int {- ^ lwork -} ->+   IO (Int, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array ZeroInt CInt, Int)+syevx jobz range uplo a vl vu il iu abstol m ldz lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   w <- Call.newArray1 n+   z <- Call.newArray2 (maximum[1,m]) ldz+   work <- Call.newArray1 (maximum[1,lwork])+   iwork <- Call.newArray1 (5*n)+   ifail <- Call.newArray1 n+   evalContT $ do+      jobzPtr <- Call.char jobz+      rangePtr <- Call.char range+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      vlPtr <- Call.float vl+      vuPtr <- Call.float vu+      ilPtr <- Call.cint il+      iuPtr <- Call.cint iu+      abstolPtr <- Call.float abstol+      mPtr <- Call.alloca+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      ifailPtr <- Call.ioarray ifail+      infoPtr <- Call.alloca+      liftIO $ FFI.syevx jobzPtr rangePtr uploPtr nPtr aPtr ldaPtr vlPtr vuPtr ilPtr iuPtr abstolPtr mPtr wPtr zPtr ldzPtr workPtr lworkPtr iworkPtr ifailPtr infoPtr+      liftIO $ pure (,,,,)+         <*> fmap fromIntegral (peek mPtr)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> Call.freezeArray ifail+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssygs2.f>+sygs2 ::+   Int {- ^ itype -} ->+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ b -} ->+   IO (Int)+sygs2 itype uplo a b = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   Call.assert "sygs2: n == bDim0" (n == bDim0)+   evalContT $ do+      itypePtr <- Call.cint itype+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.sygs2 itypePtr uploPtr nPtr aPtr ldaPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssygst.f>+sygst ::+   Int {- ^ itype -} ->+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ b -} ->+   IO (Int)+sygst itype uplo a b = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   Call.assert "sygst: n == bDim0" (n == bDim0)+   evalContT $ do+      itypePtr <- Call.cint itype+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.sygst itypePtr uploPtr nPtr aPtr ldaPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssygv.f>+sygv ::+   Int {- ^ itype -} ->+   Char {- ^ jobz -} ->+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Float, Int)+sygv itype jobz uplo a b lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   Call.assert "sygv: n == bDim0" (n == bDim0)+   w <- Call.newArray1 n+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      itypePtr <- Call.cint itype+      jobzPtr <- Call.char jobz+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      wPtr <- Call.ioarray w+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.sygv itypePtr jobzPtr uploPtr nPtr aPtr ldaPtr bPtr ldbPtr wPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray w+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssygvd.f>+sygvd ::+   Int {- ^ itype -} ->+   Char {- ^ jobz -} ->+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   Int {- ^ lwork -} ->+   Int {- ^ liwork -} ->+   IO (Array ZeroInt Float, Int)+sygvd itype jobz uplo a b lwork liwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   Call.assert "sygvd: n == bDim0" (n == bDim0)+   w <- Call.newArray1 n+   work <- Call.newArray1 (maximum[1,lwork])+   iwork <- Call.newArray1 (maximum[1,liwork])+   evalContT $ do+      itypePtr <- Call.cint itype+      jobzPtr <- Call.char jobz+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      wPtr <- Call.ioarray w+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      infoPtr <- Call.alloca+      liftIO $ FFI.sygvd itypePtr jobzPtr uploPtr nPtr aPtr ldaPtr bPtr ldbPtr wPtr workPtr lworkPtr iworkPtr liworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray w+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssygvx.f>+sygvx ::+   Int {- ^ itype -} ->+   Char {- ^ jobz -} ->+   Char {- ^ range -} ->+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   Float {- ^ vl -} ->+   Float {- ^ vu -} ->+   Int {- ^ il -} ->+   Int {- ^ iu -} ->+   Float {- ^ abstol -} ->+   Int {- ^ m -} ->+   Int {- ^ ldz -} ->+   Int {- ^ lwork -} ->+   IO (Int, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array ZeroInt CInt, Int)+sygvx itype jobz range uplo a b vl vu il iu abstol m ldz lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   Call.assert "sygvx: n == bDim0" (n == bDim0)+   w <- Call.newArray1 n+   z <- Call.newArray2 (maximum[1,m]) ldz+   work <- Call.newArray1 (maximum[1,lwork])+   iwork <- Call.newArray1 (5*n)+   ifail <- Call.newArray1 n+   evalContT $ do+      itypePtr <- Call.cint itype+      jobzPtr <- Call.char jobz+      rangePtr <- Call.char range+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      vlPtr <- Call.float vl+      vuPtr <- Call.float vu+      ilPtr <- Call.cint il+      iuPtr <- Call.cint iu+      abstolPtr <- Call.float abstol+      mPtr <- Call.alloca+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      ifailPtr <- Call.ioarray ifail+      infoPtr <- Call.alloca+      liftIO $ FFI.sygvx itypePtr jobzPtr rangePtr uploPtr nPtr aPtr ldaPtr bPtr ldbPtr vlPtr vuPtr ilPtr iuPtr abstolPtr mPtr wPtr zPtr ldzPtr workPtr lworkPtr iworkPtr ifailPtr infoPtr+      liftIO $ pure (,,,,)+         <*> fmap fromIntegral (peek mPtr)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> Call.freezeArray ifail+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssfrk.f>+sfrk ::+   Char {- ^ transr -} ->+   Char {- ^ uplo -} ->+   Char {- ^ trans -} ->+   Int {- ^ n -} ->+   Int {- ^ k -} ->+   Float {- ^ alpha -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Float {- ^ beta -} ->+   IOArray ZeroInt Float {- ^ c -} ->+   IO ()+sfrk transr uplo trans n k alpha a beta c = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let cDim0 = Call.sizes1 $ MutArray.shape c+   let _ka = aDim0+   let lda = aDim1+   let _nt = cDim0+   evalContT $ do+      transrPtr <- Call.char transr+      uploPtr <- Call.char uplo+      transPtr <- Call.char trans+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      alphaPtr <- Call.float alpha+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      betaPtr <- Call.float beta+      cPtr <- Call.ioarray c+      liftIO $ FFI.sfrk transrPtr uploPtr transPtr nPtr kPtr alphaPtr aPtr ldaPtr betaPtr cPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/shgeqz.f>+hgeqz ::+   Char {- ^ job -} ->+   Char {- ^ compq -} ->+   Char {- ^ compz -} ->+   Int {- ^ ilo -} ->+   Int {- ^ ihi -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ h -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ t -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ q -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ z -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)+hgeqz job compq compz ilo ihi h t q z lwork = do+   let (hDim0,hDim1) = Call.sizes2 $ MutArray.shape h+   let (tDim0,tDim1) = Call.sizes2 $ MutArray.shape t+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = hDim0+   let ldh = hDim1+   let ldt = tDim1+   let ldq = qDim1+   let ldz = zDim1+   Call.assert "hgeqz: n == tDim0" (n == tDim0)+   Call.assert "hgeqz: n == qDim0" (n == qDim0)+   Call.assert "hgeqz: n == zDim0" (n == zDim0)+   alphar <- Call.newArray1 n+   alphai <- Call.newArray1 n+   beta <- Call.newArray1 n+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      jobPtr <- Call.char job+      compqPtr <- Call.char compq+      compzPtr <- Call.char compz+      nPtr <- Call.cint n+      iloPtr <- Call.cint ilo+      ihiPtr <- Call.cint ihi+      hPtr <- Call.ioarray h+      ldhPtr <- Call.cint ldh+      tPtr <- Call.ioarray t+      ldtPtr <- Call.cint ldt+      alpharPtr <- Call.ioarray alphar+      alphaiPtr <- Call.ioarray alphai+      betaPtr <- Call.ioarray beta+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.hgeqz jobPtr compqPtr compzPtr nPtr iloPtr ihiPtr hPtr ldhPtr tPtr ldtPtr alpharPtr alphaiPtr betaPtr qPtr ldqPtr zPtr ldzPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray alphar+         <*> Call.freezeArray alphai+         <*> Call.freezeArray beta+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sspev.f>+spev ::+   Char {- ^ jobz -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt Float {- ^ ap -} ->+   Int {- ^ ldz -} ->+   IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Int)+spev jobz uplo n ap ldz = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   Call.assert "spev: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   w <- Call.newArray1 n+   z <- Call.newArray2 n ldz+   work <- Call.newArray1 (3*n)+   evalContT $ do+      jobzPtr <- Call.char jobz+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.spev jobzPtr uploPtr nPtr apPtr wPtr zPtr ldzPtr workPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sspevd.f>+spevd ::+   Char {- ^ jobz -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt Float {- ^ ap -} ->+   Int {- ^ ldz -} ->+   Int {- ^ lwork -} ->+   Int {- ^ liwork -} ->+   IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Int)+spevd jobz uplo n ap ldz lwork liwork = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   Call.assert "spevd: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   w <- Call.newArray1 n+   z <- Call.newArray2 n ldz+   work <- Call.newArray1 (maximum[1,lwork])+   iwork <- Call.newArray1 (maximum[1,liwork])+   evalContT $ do+      jobzPtr <- Call.char jobz+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      infoPtr <- Call.alloca+      liftIO $ FFI.spevd jobzPtr uploPtr nPtr apPtr wPtr zPtr ldzPtr workPtr lworkPtr iworkPtr liworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sspevx.f>+spevx ::+   Char {- ^ jobz -} ->+   Char {- ^ range -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt Float {- ^ ap -} ->+   Float {- ^ vl -} ->+   Float {- ^ vu -} ->+   Int {- ^ il -} ->+   Int {- ^ iu -} ->+   Float {- ^ abstol -} ->+   Int {- ^ m -} ->+   Int {- ^ ldz -} ->+   IO (Int, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array ZeroInt CInt, Int)+spevx jobz range uplo n ap vl vu il iu abstol m ldz = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   Call.assert "spevx: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   w <- Call.newArray1 n+   z <- Call.newArray2 (maximum[1,m]) ldz+   work <- Call.newArray1 (8*n)+   iwork <- Call.newArray1 (5*n)+   ifail <- Call.newArray1 n+   evalContT $ do+      jobzPtr <- Call.char jobz+      rangePtr <- Call.char range+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      vlPtr <- Call.float vl+      vuPtr <- Call.float vu+      ilPtr <- Call.cint il+      iuPtr <- Call.cint iu+      abstolPtr <- Call.float abstol+      mPtr <- Call.alloca+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      ifailPtr <- Call.ioarray ifail+      infoPtr <- Call.alloca+      liftIO $ FFI.spevx jobzPtr rangePtr uploPtr nPtr apPtr vlPtr vuPtr ilPtr iuPtr abstolPtr mPtr wPtr zPtr ldzPtr workPtr iworkPtr ifailPtr infoPtr+      liftIO $ pure (,,,,)+         <*> fmap fromIntegral (peek mPtr)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> Call.freezeArray ifail+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sspgst.f>+spgst ::+   Int {- ^ itype -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt Float {- ^ ap -} ->+   Array ZeroInt Float {- ^ bp -} ->+   IO (Int)+spgst itype uplo n ap bp = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   let bpDim0 = Call.sizes1 $ Array.shape bp+   Call.assert "spgst: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   Call.assert "spgst: n*(n+1)`div`2 == bpDim0" (n*(n+1)`div`2 == bpDim0)+   evalContT $ do+      itypePtr <- Call.cint itype+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      bpPtr <- Call.array bp+      infoPtr <- Call.alloca+      liftIO $ FFI.spgst itypePtr uploPtr nPtr apPtr bpPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sspgv.f>+spgv ::+   Int {- ^ itype -} ->+   Char {- ^ jobz -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt Float {- ^ ap -} ->+   IOArray ZeroInt Float {- ^ bp -} ->+   Int {- ^ ldz -} ->+   IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Int)+spgv itype jobz uplo n ap bp ldz = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   let bpDim0 = Call.sizes1 $ MutArray.shape bp+   Call.assert "spgv: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   Call.assert "spgv: n*(n+1)`div`2 == bpDim0" (n*(n+1)`div`2 == bpDim0)+   w <- Call.newArray1 n+   z <- Call.newArray2 n ldz+   work <- Call.newArray1 (3*n)+   evalContT $ do+      itypePtr <- Call.cint itype+      jobzPtr <- Call.char jobz+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      bpPtr <- Call.ioarray bp+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.spgv itypePtr jobzPtr uploPtr nPtr apPtr bpPtr wPtr zPtr ldzPtr workPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sspgvd.f>+spgvd ::+   Int {- ^ itype -} ->+   Char {- ^ jobz -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt Float {- ^ ap -} ->+   IOArray ZeroInt Float {- ^ bp -} ->+   Int {- ^ ldz -} ->+   Int {- ^ lwork -} ->+   Int {- ^ liwork -} ->+   IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Int)+spgvd itype jobz uplo n ap bp ldz lwork liwork = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   let bpDim0 = Call.sizes1 $ MutArray.shape bp+   Call.assert "spgvd: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   Call.assert "spgvd: n*(n+1)`div`2 == bpDim0" (n*(n+1)`div`2 == bpDim0)+   w <- Call.newArray1 n+   z <- Call.newArray2 n ldz+   work <- Call.newArray1 (maximum[1,lwork])+   iwork <- Call.newArray1 (maximum[1,liwork])+   evalContT $ do+      itypePtr <- Call.cint itype+      jobzPtr <- Call.char jobz+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      bpPtr <- Call.ioarray bp+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      infoPtr <- Call.alloca+      liftIO $ FFI.spgvd itypePtr jobzPtr uploPtr nPtr apPtr bpPtr wPtr zPtr ldzPtr workPtr lworkPtr iworkPtr liworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sspgvx.f>+spgvx ::+   Int {- ^ itype -} ->+   Char {- ^ jobz -} ->+   Char {- ^ range -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt Float {- ^ ap -} ->+   IOArray ZeroInt Float {- ^ bp -} ->+   Float {- ^ vl -} ->+   Float {- ^ vu -} ->+   Int {- ^ il -} ->+   Int {- ^ iu -} ->+   Float {- ^ abstol -} ->+   Int {- ^ m -} ->+   Int {- ^ ldz -} ->+   IO (Int, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array ZeroInt CInt, Int)+spgvx itype jobz range uplo n ap bp vl vu il iu abstol m ldz = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   let bpDim0 = Call.sizes1 $ MutArray.shape bp+   Call.assert "spgvx: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   Call.assert "spgvx: n*(n+1)`div`2 == bpDim0" (n*(n+1)`div`2 == bpDim0)+   w <- Call.newArray1 n+   z <- Call.newArray2 (maximum[1,m]) ldz+   work <- Call.newArray1 (8*n)+   iwork <- Call.newArray1 (5*n)+   ifail <- Call.newArray1 n+   evalContT $ do+      itypePtr <- Call.cint itype+      jobzPtr <- Call.char jobz+      rangePtr <- Call.char range+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      bpPtr <- Call.ioarray bp+      vlPtr <- Call.float vl+      vuPtr <- Call.float vu+      ilPtr <- Call.cint il+      iuPtr <- Call.cint iu+      abstolPtr <- Call.float abstol+      mPtr <- Call.alloca+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      ifailPtr <- Call.ioarray ifail+      infoPtr <- Call.alloca+      liftIO $ FFI.spgvx itypePtr jobzPtr rangePtr uploPtr nPtr apPtr bpPtr vlPtr vuPtr ilPtr iuPtr abstolPtr mPtr wPtr zPtr ldzPtr workPtr iworkPtr ifailPtr infoPtr+      liftIO $ pure (,,,,)+         <*> fmap fromIntegral (peek mPtr)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> Call.freezeArray ifail+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssptrd.f>+sptrd ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt Float {- ^ ap -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)+sptrd uplo n ap = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   Call.assert "sptrd: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   d <- Call.newArray1 n+   e <- Call.newArray1 (n-1)+   tau <- Call.newArray1 (n-1)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      tauPtr <- Call.ioarray tau+      infoPtr <- Call.alloca+      liftIO $ FFI.sptrd uploPtr nPtr apPtr dPtr ePtr tauPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray d+         <*> Call.freezeArray e+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/shsein.f>+hsein ::+   Char {- ^ side -} ->+   Char {- ^ eigsrc -} ->+   Char {- ^ initv -} ->+   IOArray ZeroInt Bool {- ^ select -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ h -} ->+   IOArray ZeroInt Float {- ^ wr -} ->+   Array ZeroInt Float {- ^ wi -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ vl -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ vr -} ->+   IO (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)+hsein side eigsrc initv select h wr wi vl vr = do+   let selectDim0 = Call.sizes1 $ MutArray.shape select+   let (hDim0,hDim1) = Call.sizes2 $ Array.shape h+   let wrDim0 = Call.sizes1 $ MutArray.shape wr+   let wiDim0 = Call.sizes1 $ Array.shape wi+   let (vlDim0,vlDim1) = Call.sizes2 $ MutArray.shape vl+   let (vrDim0,vrDim1) = Call.sizes2 $ MutArray.shape vr+   let n = selectDim0+   let ldh = hDim1+   let mm = vlDim0+   let ldvl = vlDim1+   let ldvr = vrDim1+   Call.assert "hsein: n == hDim0" (n == hDim0)+   Call.assert "hsein: n == wrDim0" (n == wrDim0)+   Call.assert "hsein: n == wiDim0" (n == wiDim0)+   Call.assert "hsein: mm == vrDim0" (mm == vrDim0)+   work <- Call.newArray1 ((n+2)*n)+   ifaill <- Call.newArray1 mm+   ifailr <- Call.newArray1 mm+   evalContT $ do+      sidePtr <- Call.char side+      eigsrcPtr <- Call.char eigsrc+      initvPtr <- Call.char initv+      selectPtr <- Call.ioarray select+      nPtr <- Call.cint n+      hPtr <- Call.array h+      ldhPtr <- Call.cint ldh+      wrPtr <- Call.ioarray wr+      wiPtr <- Call.array wi+      vlPtr <- Call.ioarray vl+      ldvlPtr <- Call.cint ldvl+      vrPtr <- Call.ioarray vr+      ldvrPtr <- Call.cint ldvr+      mmPtr <- Call.cint mm+      mPtr <- Call.alloca+      workPtr <- Call.ioarray work+      ifaillPtr <- Call.ioarray ifaill+      ifailrPtr <- Call.ioarray ifailr+      infoPtr <- Call.alloca+      liftIO $ FFI.hsein sidePtr eigsrcPtr initvPtr selectPtr nPtr hPtr ldhPtr wrPtr wiPtr vlPtr ldvlPtr vrPtr ldvrPtr mmPtr mPtr workPtr ifaillPtr ifailrPtr infoPtr+      liftIO $ pure (,,,)+         <*> fmap fromIntegral (peek mPtr)+         <*> Call.freezeArray ifaill+         <*> Call.freezeArray ifailr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/shseqr.f>+hseqr ::+   Char {- ^ job -} ->+   Char {- ^ compz -} ->+   Int {- ^ ilo -} ->+   Int {- ^ ihi -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ h -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ z -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Int)+hseqr job compz ilo ihi h z lwork = do+   let (hDim0,hDim1) = Call.sizes2 $ MutArray.shape h+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = hDim0+   let ldh = hDim1+   let ldz = zDim1+   Call.assert "hseqr: n == zDim0" (n == zDim0)+   wr <- Call.newArray1 n+   wi <- Call.newArray1 n+   work <- Call.newArray1 lwork+   evalContT $ do+      jobPtr <- Call.char job+      compzPtr <- Call.char compz+      nPtr <- Call.cint n+      iloPtr <- Call.cint ilo+      ihiPtr <- Call.cint ihi+      hPtr <- Call.ioarray h+      ldhPtr <- Call.cint ldh+      wrPtr <- Call.ioarray wr+      wiPtr <- Call.ioarray wi+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.hseqr jobPtr compzPtr nPtr iloPtr ihiPtr hPtr ldhPtr wrPtr wiPtr zPtr ldzPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray wr+         <*> Call.freezeArray wi+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ilaslc.f>+ilalc ::+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IO CInt+ilalc m a = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      liftIO $ FFI.ilalc mPtr nPtr aPtr ldaPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ilaslr.f>+ilalr ::+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IO CInt+ilalr m a = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      liftIO $ FFI.ilalr mPtr nPtr aPtr ldaPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sisnan.f>+isnan ::+   Float {- ^ sin_ -} ->+   IO Bool+isnan sin_ = do+   evalContT $ do+      sin_Ptr <- Call.float sin_+      liftIO $ FFI.isnan sin_Ptr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slabad.f>+labad ::+   Float {- ^ small -} ->+   Float {- ^ large -} ->+   IO (Float, Float)+labad small large = do+   evalContT $ do+      smallPtr <- Call.float small+      largePtr <- Call.float large+      liftIO $ FFI.labad smallPtr largePtr+      liftIO $ pure (,)+         <*> peek smallPtr+         <*> peek largePtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slabrd.f>+labrd ::+   Int {- ^ m -} ->+   Int {- ^ nb -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Int {- ^ ldx -} ->+   Int {- ^ ldy -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float)+labrd m nb a ldx ldy = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   d <- Call.newArray1 nb+   e <- Call.newArray1 nb+   tauq <- Call.newArray1 nb+   taup <- Call.newArray1 nb+   x <- Call.newArray2 nb ldx+   y <- Call.newArray2 nb ldy+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      nbPtr <- Call.cint nb+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      tauqPtr <- Call.ioarray tauq+      taupPtr <- Call.ioarray taup+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      yPtr <- Call.ioarray y+      ldyPtr <- Call.cint ldy+      liftIO $ FFI.labrd mPtr nPtr nbPtr aPtr ldaPtr dPtr ePtr tauqPtr taupPtr xPtr ldxPtr yPtr ldyPtr+      liftIO $ pure (,,,,,)+         <*> Call.freezeArray d+         <*> Call.freezeArray e+         <*> Call.freezeArray tauq+         <*> Call.freezeArray taup+         <*> Call.freezeArray x+         <*> Call.freezeArray y++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slacn2.f>+lacn2 ::+   IOArray ZeroInt Float {- ^ x -} ->+   Float {- ^ est -} ->+   Int {- ^ kase -} ->+   IOArray ZeroInt CInt {- ^ isave -} ->+   IO (Array ZeroInt Float, Array ZeroInt CInt, Float, Int)+lacn2 x est kase isave = do+   let xDim0 = Call.sizes1 $ MutArray.shape x+   let isaveDim0 = Call.sizes1 $ MutArray.shape isave+   let n = xDim0+   Call.assert "lacn2: 3 == isaveDim0" (3 == isaveDim0)+   v <- Call.newArray1 n+   isgn <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      vPtr <- Call.ioarray v+      xPtr <- Call.ioarray x+      isgnPtr <- Call.ioarray isgn+      estPtr <- Call.float est+      kasePtr <- Call.cint kase+      isavePtr <- Call.ioarray isave+      liftIO $ FFI.lacn2 nPtr vPtr xPtr isgnPtr estPtr kasePtr isavePtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray v+         <*> Call.freezeArray isgn+         <*> peek estPtr+         <*> fmap fromIntegral (peek kasePtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slacon.f>+lacon ::+   IOArray ZeroInt Float {- ^ x -} ->+   Float {- ^ est -} ->+   Int {- ^ kase -} ->+   IO (Array ZeroInt Float, Array ZeroInt CInt, Float, Int)+lacon x est kase = do+   let xDim0 = Call.sizes1 $ MutArray.shape x+   let n = xDim0+   v <- Call.newArray1 n+   isgn <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      vPtr <- Call.ioarray v+      xPtr <- Call.ioarray x+      isgnPtr <- Call.ioarray isgn+      estPtr <- Call.float est+      kasePtr <- Call.cint kase+      liftIO $ FFI.lacon nPtr vPtr xPtr isgnPtr estPtr kasePtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray v+         <*> Call.freezeArray isgn+         <*> peek estPtr+         <*> fmap fromIntegral (peek kasePtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slacpy.f>+lacpy ::+   Char {- ^ uplo -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Int {- ^ ldb -} ->+   IO (Array (ZeroInt,ZeroInt) Float)+lacpy uplo m a ldb = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   b <- Call.newArray2 n ldb+   evalContT $ do+      uploPtr <- Call.char uplo+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      liftIO $ FFI.lacpy uploPtr mPtr nPtr aPtr ldaPtr bPtr ldbPtr+      liftIO $ Call.freezeArray b++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sladiv.f>+ladiv ::+   Float {- ^ a -} ->+   Float {- ^ b -} ->+   Float {- ^ c -} ->+   Float {- ^ d -} ->+   IO (Float, Float)+ladiv a b c d = do+   evalContT $ do+      aPtr <- Call.float a+      bPtr <- Call.float b+      cPtr <- Call.float c+      dPtr <- Call.float d+      pPtr <- Call.alloca+      qPtr <- Call.alloca+      liftIO $ FFI.ladiv aPtr bPtr cPtr dPtr pPtr qPtr+      liftIO $ pure (,)+         <*> peek pPtr+         <*> peek qPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slae2.f>+lae2 ::+   Float {- ^ a -} ->+   Float {- ^ b -} ->+   Float {- ^ c -} ->+   IO (Float, Float)+lae2 a b c = do+   evalContT $ do+      aPtr <- Call.float a+      bPtr <- Call.float b+      cPtr <- Call.float c+      rt1Ptr <- Call.alloca+      rt2Ptr <- Call.alloca+      liftIO $ FFI.lae2 aPtr bPtr cPtr rt1Ptr rt2Ptr+      liftIO $ pure (,)+         <*> peek rt1Ptr+         <*> peek rt2Ptr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slaebz.f>+laebz ::+   Int {- ^ ijob -} ->+   Int {- ^ nitmax -} ->+   Int {- ^ nbmin -} ->+   Float {- ^ abstol -} ->+   Float {- ^ reltol -} ->+   Float {- ^ pivmin -} ->+   Array ZeroInt Float {- ^ d -} ->+   Array ZeroInt Float {- ^ e -} ->+   Array ZeroInt Float {- ^ e2 -} ->+   IOArray ZeroInt CInt {- ^ nval -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ ab -} ->+   IOArray ZeroInt Float {- ^ c -} ->+   IOArray (ZeroInt,ZeroInt) CInt {- ^ nab -} ->+   IO (Int, Int)+laebz ijob nitmax nbmin abstol reltol pivmin d e e2 nval ab c nab = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let eDim0 = Call.sizes1 $ Array.shape e+   let e2Dim0 = Call.sizes1 $ Array.shape e2+   let nvalDim0 = Call.sizes1 $ MutArray.shape nval+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let cDim0 = Call.sizes1 $ MutArray.shape c+   let (nabDim0,nabDim1) = Call.sizes2 $ MutArray.shape nab+   let n = dDim0+   let minp = nvalDim0+   let mmax = abDim1+   Call.assert "laebz: n == eDim0" (n == eDim0)+   Call.assert "laebz: n == e2Dim0" (n == e2Dim0)+   Call.assert "laebz: 2 == abDim0" (2 == abDim0)+   Call.assert "laebz: mmax == cDim0" (mmax == cDim0)+   Call.assert "laebz: 2 == nabDim0" (2 == nabDim0)+   Call.assert "laebz: mmax == nabDim1" (mmax == nabDim1)+   work <- Call.newArray1 mmax+   iwork <- Call.newArray1 mmax+   evalContT $ do+      ijobPtr <- Call.cint ijob+      nitmaxPtr <- Call.cint nitmax+      nPtr <- Call.cint n+      mmaxPtr <- Call.cint mmax+      minpPtr <- Call.cint minp+      nbminPtr <- Call.cint nbmin+      abstolPtr <- Call.float abstol+      reltolPtr <- Call.float reltol+      pivminPtr <- Call.float pivmin+      dPtr <- Call.array d+      ePtr <- Call.array e+      e2Ptr <- Call.array e2+      nvalPtr <- Call.ioarray nval+      abPtr <- Call.ioarray ab+      cPtr <- Call.ioarray c+      moutPtr <- Call.alloca+      nabPtr <- Call.ioarray nab+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.laebz ijobPtr nitmaxPtr nPtr mmaxPtr minpPtr nbminPtr abstolPtr reltolPtr pivminPtr dPtr ePtr e2Ptr nvalPtr abPtr cPtr moutPtr nabPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,)+         <*> fmap fromIntegral (peek moutPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slaed0.f>+laed0 ::+   Int {- ^ icompq -} ->+   Int {- ^ qsiz -} ->+   IOArray ZeroInt Float {- ^ d -} ->+   Array ZeroInt Float {- ^ e -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ q -} ->+   Int {- ^ ldqs -} ->+   Int {- ^ workSize -} ->+   Int {- ^ iworkSize -} ->+   IO (Array (ZeroInt,ZeroInt) Float, Int)+laed0 icompq qsiz d e q ldqs workSize iworkSize = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ Array.shape e+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let n = dDim0+   let ldq = qDim1+   Call.assert "laed0: n-1 == eDim0" (n-1 == eDim0)+   Call.assert "laed0: n == qDim0" (n == qDim0)+   qstore <- Call.newArray2 n ldqs+   work <- Call.newArray1 workSize+   iwork <- Call.newArray1 iworkSize+   evalContT $ do+      icompqPtr <- Call.cint icompq+      qsizPtr <- Call.cint qsiz+      nPtr <- Call.cint n+      dPtr <- Call.ioarray d+      ePtr <- Call.array e+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      qstorePtr <- Call.ioarray qstore+      ldqsPtr <- Call.cint ldqs+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.laed0 icompqPtr qsizPtr nPtr dPtr ePtr qPtr ldqPtr qstorePtr ldqsPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray qstore+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slaed1.f>+laed1 ::+   IOArray ZeroInt Float {- ^ d -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ q -} ->+   IOArray ZeroInt CInt {- ^ indxq -} ->+   Float {- ^ rho -} ->+   Int {- ^ cutpnt -} ->+   IO (Int)+laed1 d q indxq rho cutpnt = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let indxqDim0 = Call.sizes1 $ MutArray.shape indxq+   let n = dDim0+   let ldq = qDim1+   Call.assert "laed1: n == qDim0" (n == qDim0)+   Call.assert "laed1: n == indxqDim0" (n == indxqDim0)+   work <- Call.newArray1 (4*n+n^!2)+   iwork <- Call.newArray1 (4*n)+   evalContT $ do+      nPtr <- Call.cint n+      dPtr <- Call.ioarray d+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      indxqPtr <- Call.ioarray indxq+      rhoPtr <- Call.float rho+      cutpntPtr <- Call.cint cutpnt+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.laed1 nPtr dPtr qPtr ldqPtr indxqPtr rhoPtr cutpntPtr workPtr iworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slaed2.f>+laed2 ::+   Int {- ^ n1 -} ->+   IOArray ZeroInt Float {- ^ d -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ q -} ->+   IOArray ZeroInt CInt {- ^ indxq -} ->+   Float {- ^ rho -} ->+   Array ZeroInt Float {- ^ z -} ->+   IO (Int, Float, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int)+laed2 n1 d q indxq rho z = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let indxqDim0 = Call.sizes1 $ MutArray.shape indxq+   let zDim0 = Call.sizes1 $ Array.shape z+   let n = dDim0+   let ldq = qDim1+   Call.assert "laed2: n == qDim0" (n == qDim0)+   Call.assert "laed2: n == indxqDim0" (n == indxqDim0)+   Call.assert "laed2: n == zDim0" (n == zDim0)+   dlamda <- Call.newArray1 n+   w <- Call.newArray1 n+   q2 <- Call.newArray1 (n1^!2+(n-n1)^!2)+   indx <- Call.newArray1 n+   indxc <- Call.newArray1 n+   indxp <- Call.newArray1 n+   coltyp <- Call.newArray1 n+   evalContT $ do+      kPtr <- Call.alloca+      nPtr <- Call.cint n+      n1Ptr <- Call.cint n1+      dPtr <- Call.ioarray d+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      indxqPtr <- Call.ioarray indxq+      rhoPtr <- Call.float rho+      zPtr <- Call.array z+      dlamdaPtr <- Call.ioarray dlamda+      wPtr <- Call.ioarray w+      q2Ptr <- Call.ioarray q2+      indxPtr <- Call.ioarray indx+      indxcPtr <- Call.ioarray indxc+      indxpPtr <- Call.ioarray indxp+      coltypPtr <- Call.ioarray coltyp+      infoPtr <- Call.alloca+      liftIO $ FFI.laed2 kPtr nPtr n1Ptr dPtr qPtr ldqPtr indxqPtr rhoPtr zPtr dlamdaPtr wPtr q2Ptr indxPtr indxcPtr indxpPtr coltypPtr infoPtr+      liftIO $ pure (,,,,,,,,,)+         <*> fmap fromIntegral (peek kPtr)+         <*> peek rhoPtr+         <*> Call.freezeArray dlamda+         <*> Call.freezeArray w+         <*> Call.freezeArray q2+         <*> Call.freezeArray indx+         <*> Call.freezeArray indxc+         <*> Call.freezeArray indxp+         <*> Call.freezeArray coltyp+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slaed3.f>+laed3 ::+   Int {- ^ n1 -} ->+   Int {- ^ ldq -} ->+   Float {- ^ rho -} ->+   IOArray ZeroInt Float {- ^ dlamda -} ->+   Array ZeroInt Float {- ^ q2 -} ->+   Array ZeroInt CInt {- ^ indx -} ->+   Array ZeroInt CInt {- ^ ctot -} ->+   IOArray ZeroInt Float {- ^ w -} ->+   IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array ZeroInt Float, Int)+laed3 n1 ldq rho dlamda q2 indx ctot w = do+   let dlamdaDim0 = Call.sizes1 $ MutArray.shape dlamda+   let q2Dim0 = Call.sizes1 $ Array.shape q2+   let indxDim0 = Call.sizes1 $ Array.shape indx+   let ctotDim0 = Call.sizes1 $ Array.shape ctot+   let wDim0 = Call.sizes1 $ MutArray.shape w+   let k = dlamdaDim0+   let n = indxDim0+   Call.ignore "laed3: ldq2*n == q2Dim0" q2Dim0+   Call.assert "laed3: 4 == ctotDim0" (4 == ctotDim0)+   Call.assert "laed3: k == wDim0" (k == wDim0)+   d <- Call.newArray1 n+   q <- Call.newArray2 n ldq+   s <- Call.newArray1 (n1+1)+   evalContT $ do+      kPtr <- Call.cint k+      nPtr <- Call.cint n+      n1Ptr <- Call.cint n1+      dPtr <- Call.ioarray d+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      rhoPtr <- Call.float rho+      dlamdaPtr <- Call.ioarray dlamda+      q2Ptr <- Call.array q2+      indxPtr <- Call.array indx+      ctotPtr <- Call.array ctot+      wPtr <- Call.ioarray w+      sPtr <- Call.ioarray s+      infoPtr <- Call.alloca+      liftIO $ FFI.laed3 kPtr nPtr n1Ptr dPtr qPtr ldqPtr rhoPtr dlamdaPtr q2Ptr indxPtr ctotPtr wPtr sPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray d+         <*> Call.freezeArray q+         <*> Call.freezeArray s+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slaed4.f>+laed4 ::+   Int {- ^ i -} ->+   Array ZeroInt Float {- ^ d -} ->+   Array ZeroInt Float {- ^ z -} ->+   Float {- ^ rho -} ->+   IO (Array ZeroInt Float, Float, Int)+laed4 i d z rho = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let zDim0 = Call.sizes1 $ Array.shape z+   let n = dDim0+   Call.assert "laed4: n == zDim0" (n == zDim0)+   delta <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      iPtr <- Call.cint i+      dPtr <- Call.array d+      zPtr <- Call.array z+      deltaPtr <- Call.ioarray delta+      rhoPtr <- Call.float rho+      dlamPtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.laed4 nPtr iPtr dPtr zPtr deltaPtr rhoPtr dlamPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray delta+         <*> peek dlamPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slaed5.f>+laed5 ::+   Int {- ^ i -} ->+   Array ZeroInt Float {- ^ d -} ->+   Array ZeroInt Float {- ^ z -} ->+   Float {- ^ rho -} ->+   IO (Array ZeroInt Float, Float)+laed5 i d z rho = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let zDim0 = Call.sizes1 $ Array.shape z+   Call.assert "laed5: 2 == dDim0" (2 == dDim0)+   Call.assert "laed5: 2 == zDim0" (2 == zDim0)+   delta <- Call.newArray1 2+   evalContT $ do+      iPtr <- Call.cint i+      dPtr <- Call.array d+      zPtr <- Call.array z+      deltaPtr <- Call.ioarray delta+      rhoPtr <- Call.float rho+      dlamPtr <- Call.alloca+      liftIO $ FFI.laed5 iPtr dPtr zPtr deltaPtr rhoPtr dlamPtr+      liftIO $ pure (,)+         <*> Call.freezeArray delta+         <*> peek dlamPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slaed6.f>+laed6 ::+   Int {- ^ kniter -} ->+   Bool {- ^ orgati -} ->+   Float {- ^ rho -} ->+   Array ZeroInt Float {- ^ d -} ->+   Array ZeroInt Float {- ^ z -} ->+   Float {- ^ finit -} ->+   IO (Float, Int)+laed6 kniter orgati rho d z finit = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let zDim0 = Call.sizes1 $ Array.shape z+   Call.assert "laed6: 3 == dDim0" (3 == dDim0)+   Call.assert "laed6: 3 == zDim0" (3 == zDim0)+   evalContT $ do+      kniterPtr <- Call.cint kniter+      orgatiPtr <- Call.bool orgati+      rhoPtr <- Call.float rho+      dPtr <- Call.array d+      zPtr <- Call.array z+      finitPtr <- Call.float finit+      tauPtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.laed6 kniterPtr orgatiPtr rhoPtr dPtr zPtr finitPtr tauPtr infoPtr+      liftIO $ pure (,)+         <*> peek tauPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slaed7.f>+laed7 ::+   Int {- ^ icompq -} ->+   Int {- ^ qsiz -} ->+   Int {- ^ tlvls -} ->+   Int {- ^ curlvl -} ->+   Int {- ^ curpbm -} ->+   IOArray ZeroInt Float {- ^ d -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ q -} ->+   Float {- ^ rho -} ->+   Int {- ^ cutpnt -} ->+   IOArray ZeroInt Float {- ^ qstore -} ->+   IOArray ZeroInt CInt {- ^ qptr -} ->+   Array ZeroInt CInt {- ^ prmptr -} ->+   Array ZeroInt CInt {- ^ perm -} ->+   Array ZeroInt CInt {- ^ givptr -} ->+   Array (ZeroInt,ZeroInt) CInt {- ^ givcol -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ givnum -} ->+   IO (Array ZeroInt CInt, Int)+laed7 icompq qsiz tlvls curlvl curpbm d q rho cutpnt qstore qptr prmptr perm givptr givcol givnum = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let qstoreDim0 = Call.sizes1 $ MutArray.shape qstore+   let qptrDim0 = Call.sizes1 $ MutArray.shape qptr+   let prmptrDim0 = Call.sizes1 $ Array.shape prmptr+   let permDim0 = Call.sizes1 $ Array.shape perm+   let givptrDim0 = Call.sizes1 $ Array.shape givptr+   let (givcolDim0,givcolDim1) = Call.sizes2 $ Array.shape givcol+   let (givnumDim0,givnumDim1) = Call.sizes2 $ Array.shape givnum+   let n = dDim0+   let ldq = qDim1+   let nlgn = prmptrDim0+   Call.assert "laed7: n == qDim0" (n == qDim0)+   Call.assert "laed7: n^!2+1 == qstoreDim0" (n^!2+1 == qstoreDim0)+   Call.assert "laed7: n+2 == qptrDim0" (n+2 == qptrDim0)+   Call.assert "laed7: nlgn == permDim0" (nlgn == permDim0)+   Call.assert "laed7: nlgn == givptrDim0" (nlgn == givptrDim0)+   Call.assert "laed7: nlgn == givcolDim0" (nlgn == givcolDim0)+   Call.assert "laed7: 2 == givcolDim1" (2 == givcolDim1)+   Call.assert "laed7: nlgn == givnumDim0" (nlgn == givnumDim0)+   Call.assert "laed7: 2 == givnumDim1" (2 == givnumDim1)+   indxq <- Call.newArray1 n+   work <- Call.newArray1 (3*n+2*qsiz*n)+   iwork <- Call.newArray1 (4*n)+   evalContT $ do+      icompqPtr <- Call.cint icompq+      nPtr <- Call.cint n+      qsizPtr <- Call.cint qsiz+      tlvlsPtr <- Call.cint tlvls+      curlvlPtr <- Call.cint curlvl+      curpbmPtr <- Call.cint curpbm+      dPtr <- Call.ioarray d+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      indxqPtr <- Call.ioarray indxq+      rhoPtr <- Call.float rho+      cutpntPtr <- Call.cint cutpnt+      qstorePtr <- Call.ioarray qstore+      qptrPtr <- Call.ioarray qptr+      prmptrPtr <- Call.array prmptr+      permPtr <- Call.array perm+      givptrPtr <- Call.array givptr+      givcolPtr <- Call.array givcol+      givnumPtr <- Call.array givnum+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.laed7 icompqPtr nPtr qsizPtr tlvlsPtr curlvlPtr curpbmPtr dPtr qPtr ldqPtr indxqPtr rhoPtr cutpntPtr qstorePtr qptrPtr prmptrPtr permPtr givptrPtr givcolPtr givnumPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray indxq+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slaed8.f>+laed8 ::+   Int {- ^ icompq -} ->+   Int {- ^ qsiz -} ->+   IOArray ZeroInt Float {- ^ d -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ q -} ->+   Array ZeroInt CInt {- ^ indxq -} ->+   Float {- ^ rho -} ->+   Int {- ^ cutpnt -} ->+   Array ZeroInt Float {- ^ z -} ->+   Int {- ^ ldq2 -} ->+   IO (Int, Float, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array ZeroInt Float, Array ZeroInt CInt, Int, Array (ZeroInt,ZeroInt) CInt, Array (ZeroInt,ZeroInt) Float, Array ZeroInt CInt, Array ZeroInt CInt, Int)+laed8 icompq qsiz d q indxq rho cutpnt z ldq2 = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let indxqDim0 = Call.sizes1 $ Array.shape indxq+   let zDim0 = Call.sizes1 $ Array.shape z+   let n = dDim0+   let ldq = qDim1+   Call.assert "laed8: n == qDim0" (n == qDim0)+   Call.assert "laed8: n == indxqDim0" (n == indxqDim0)+   Call.assert "laed8: n == zDim0" (n == zDim0)+   dlamda <- Call.newArray1 n+   q2 <- Call.newArray2 n ldq2+   w <- Call.newArray1 n+   perm <- Call.newArray1 n+   givcol <- Call.newArray2 n 2+   givnum <- Call.newArray2 n 2+   indxp <- Call.newArray1 n+   indx <- Call.newArray1 n+   evalContT $ do+      icompqPtr <- Call.cint icompq+      kPtr <- Call.alloca+      nPtr <- Call.cint n+      qsizPtr <- Call.cint qsiz+      dPtr <- Call.ioarray d+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      indxqPtr <- Call.array indxq+      rhoPtr <- Call.float rho+      cutpntPtr <- Call.cint cutpnt+      zPtr <- Call.array z+      dlamdaPtr <- Call.ioarray dlamda+      q2Ptr <- Call.ioarray q2+      ldq2Ptr <- Call.cint ldq2+      wPtr <- Call.ioarray w+      permPtr <- Call.ioarray perm+      givptrPtr <- Call.alloca+      givcolPtr <- Call.ioarray givcol+      givnumPtr <- Call.ioarray givnum+      indxpPtr <- Call.ioarray indxp+      indxPtr <- Call.ioarray indx+      infoPtr <- Call.alloca+      liftIO $ FFI.laed8 icompqPtr kPtr nPtr qsizPtr dPtr qPtr ldqPtr indxqPtr rhoPtr cutpntPtr zPtr dlamdaPtr q2Ptr ldq2Ptr wPtr permPtr givptrPtr givcolPtr givnumPtr indxpPtr indxPtr infoPtr+      liftIO $ pure (,,,,,,,,,,,)+         <*> fmap fromIntegral (peek kPtr)+         <*> peek rhoPtr+         <*> Call.freezeArray dlamda+         <*> Call.freezeArray q2+         <*> Call.freezeArray w+         <*> Call.freezeArray perm+         <*> fmap fromIntegral (peek givptrPtr)+         <*> Call.freezeArray givcol+         <*> Call.freezeArray givnum+         <*> Call.freezeArray indxp+         <*> Call.freezeArray indx+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slaed9.f>+laed9 ::+   Int {- ^ kstart -} ->+   Int {- ^ kstop -} ->+   Int {- ^ n -} ->+   Int {- ^ ldq -} ->+   Float {- ^ rho -} ->+   Array ZeroInt Float {- ^ dlamda -} ->+   Array ZeroInt Float {- ^ w -} ->+   Int {- ^ lds -} ->+   IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Int)+laed9 kstart kstop n ldq rho dlamda w lds = do+   let dlamdaDim0 = Call.sizes1 $ Array.shape dlamda+   let wDim0 = Call.sizes1 $ Array.shape w+   let k = dlamdaDim0+   Call.assert "laed9: k == wDim0" (k == wDim0)+   d <- Call.newArray1 n+   q <- Call.newArray2 n ldq+   s <- Call.newArray2 k lds+   evalContT $ do+      kPtr <- Call.cint k+      kstartPtr <- Call.cint kstart+      kstopPtr <- Call.cint kstop+      nPtr <- Call.cint n+      dPtr <- Call.ioarray d+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      rhoPtr <- Call.float rho+      dlamdaPtr <- Call.array dlamda+      wPtr <- Call.array w+      sPtr <- Call.ioarray s+      ldsPtr <- Call.cint lds+      infoPtr <- Call.alloca+      liftIO $ FFI.laed9 kPtr kstartPtr kstopPtr nPtr dPtr qPtr ldqPtr rhoPtr dlamdaPtr wPtr sPtr ldsPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray d+         <*> Call.freezeArray q+         <*> Call.freezeArray s+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slaeda.f>+laeda ::+   Int {- ^ n -} ->+   Int {- ^ tlvls -} ->+   Int {- ^ curlvl -} ->+   Int {- ^ curpbm -} ->+   Array ZeroInt CInt {- ^ prmptr -} ->+   Array ZeroInt CInt {- ^ perm -} ->+   Array ZeroInt CInt {- ^ givptr -} ->+   Array (ZeroInt,ZeroInt) CInt {- ^ givcol -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ givnum -} ->+   Array ZeroInt Float {- ^ q -} ->+   Array ZeroInt CInt {- ^ qptr -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Int)+laeda n tlvls curlvl curpbm prmptr perm givptr givcol givnum q qptr = do+   let prmptrDim0 = Call.sizes1 $ Array.shape prmptr+   let permDim0 = Call.sizes1 $ Array.shape perm+   let givptrDim0 = Call.sizes1 $ Array.shape givptr+   let (givcolDim0,givcolDim1) = Call.sizes2 $ Array.shape givcol+   let (givnumDim0,givnumDim1) = Call.sizes2 $ Array.shape givnum+   let qDim0 = Call.sizes1 $ Array.shape q+   let qptrDim0 = Call.sizes1 $ Array.shape qptr+   let nlgn = prmptrDim0+   Call.assert "laeda: nlgn == permDim0" (nlgn == permDim0)+   Call.assert "laeda: nlgn == givptrDim0" (nlgn == givptrDim0)+   Call.assert "laeda: nlgn == givcolDim0" (nlgn == givcolDim0)+   Call.assert "laeda: 2 == givcolDim1" (2 == givcolDim1)+   Call.assert "laeda: nlgn == givnumDim0" (nlgn == givnumDim0)+   Call.assert "laeda: 2 == givnumDim1" (2 == givnumDim1)+   Call.assert "laeda: n^!2 == qDim0" (n^!2 == qDim0)+   Call.assert "laeda: n+2 == qptrDim0" (n+2 == qptrDim0)+   z <- Call.newArray1 n+   ztemp <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      tlvlsPtr <- Call.cint tlvls+      curlvlPtr <- Call.cint curlvl+      curpbmPtr <- Call.cint curpbm+      prmptrPtr <- Call.array prmptr+      permPtr <- Call.array perm+      givptrPtr <- Call.array givptr+      givcolPtr <- Call.array givcol+      givnumPtr <- Call.array givnum+      qPtr <- Call.array q+      qptrPtr <- Call.array qptr+      zPtr <- Call.ioarray z+      ztempPtr <- Call.ioarray ztemp+      infoPtr <- Call.alloca+      liftIO $ FFI.laeda nPtr tlvlsPtr curlvlPtr curpbmPtr prmptrPtr permPtr givptrPtr givcolPtr givnumPtr qPtr qptrPtr zPtr ztempPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray z+         <*> Call.freezeArray ztemp+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slaein.f>+laein ::+   Bool {- ^ rightv -} ->+   Bool {- ^ noinit -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ h -} ->+   Float {- ^ wr -} ->+   Float {- ^ wi -} ->+   IOArray ZeroInt Float {- ^ vr -} ->+   IOArray ZeroInt Float {- ^ vi -} ->+   Int {- ^ ldb -} ->+   Float {- ^ eps3 -} ->+   Float {- ^ smlnum -} ->+   Float {- ^ bignum -} ->+   IO (Array (ZeroInt,ZeroInt) Float, Int)+laein rightv noinit h wr wi vr vi ldb eps3 smlnum bignum = do+   let (hDim0,hDim1) = Call.sizes2 $ Array.shape h+   let vrDim0 = Call.sizes1 $ MutArray.shape vr+   let viDim0 = Call.sizes1 $ MutArray.shape vi+   let n = hDim0+   let ldh = hDim1+   Call.assert "laein: n == vrDim0" (n == vrDim0)+   Call.assert "laein: n == viDim0" (n == viDim0)+   b <- Call.newArray2 n ldb+   work <- Call.newArray1 n+   evalContT $ do+      rightvPtr <- Call.bool rightv+      noinitPtr <- Call.bool noinit+      nPtr <- Call.cint n+      hPtr <- Call.array h+      ldhPtr <- Call.cint ldh+      wrPtr <- Call.float wr+      wiPtr <- Call.float wi+      vrPtr <- Call.ioarray vr+      viPtr <- Call.ioarray vi+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      workPtr <- Call.ioarray work+      eps3Ptr <- Call.float eps3+      smlnumPtr <- Call.float smlnum+      bignumPtr <- Call.float bignum+      infoPtr <- Call.alloca+      liftIO $ FFI.laein rightvPtr noinitPtr nPtr hPtr ldhPtr wrPtr wiPtr vrPtr viPtr bPtr ldbPtr workPtr eps3Ptr smlnumPtr bignumPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray b+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slaev2.f>+laev2 ::+   Float {- ^ a -} ->+   Float {- ^ b -} ->+   Float {- ^ c -} ->+   IO (Float, Float, Float, Float)+laev2 a b c = do+   evalContT $ do+      aPtr <- Call.float a+      bPtr <- Call.float b+      cPtr <- Call.float c+      rt1Ptr <- Call.alloca+      rt2Ptr <- Call.alloca+      cs1Ptr <- Call.alloca+      sn1Ptr <- Call.alloca+      liftIO $ FFI.laev2 aPtr bPtr cPtr rt1Ptr rt2Ptr cs1Ptr sn1Ptr+      liftIO $ pure (,,,)+         <*> peek rt1Ptr+         <*> peek rt2Ptr+         <*> peek cs1Ptr+         <*> peek sn1Ptr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slaexc.f>+laexc ::+   Bool {- ^ wantq -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ t -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ q -} ->+   Int {- ^ j1 -} ->+   Int {- ^ n1 -} ->+   Int {- ^ n2 -} ->+   IO (Int)+laexc wantq t q j1 n1 n2 = do+   let (tDim0,tDim1) = Call.sizes2 $ MutArray.shape t+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let n = tDim0+   let ldt = tDim1+   let ldq = qDim1+   Call.assert "laexc: n == qDim0" (n == qDim0)+   work <- Call.newArray1 n+   evalContT $ do+      wantqPtr <- Call.bool wantq+      nPtr <- Call.cint n+      tPtr <- Call.ioarray t+      ldtPtr <- Call.cint ldt+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      j1Ptr <- Call.cint j1+      n1Ptr <- Call.cint n1+      n2Ptr <- Call.cint n2+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.laexc wantqPtr nPtr tPtr ldtPtr qPtr ldqPtr j1Ptr n1Ptr n2Ptr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slag2.f>+lag2 ::+   Array (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ b -} ->+   Float {- ^ safmin -} ->+   IO (Float, Float, Float, Float, Float)+lag2 a b safmin = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let lda = aDim1+   let ldb = bDim1+   Call.assert "lag2: 2 == aDim0" (2 == aDim0)+   Call.assert "lag2: 2 == bDim0" (2 == bDim0)+   evalContT $ do+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      safminPtr <- Call.float safmin+      scale1Ptr <- Call.alloca+      scale2Ptr <- Call.alloca+      wr1Ptr <- Call.alloca+      wr2Ptr <- Call.alloca+      wiPtr <- Call.alloca+      liftIO $ FFI.lag2 aPtr ldaPtr bPtr ldbPtr safminPtr scale1Ptr scale2Ptr wr1Ptr wr2Ptr wiPtr+      liftIO $ pure (,,,,)+         <*> peek scale1Ptr+         <*> peek scale2Ptr+         <*> peek wr1Ptr+         <*> peek wr2Ptr+         <*> peek wiPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slag2d.f>+lag2d ::+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ sa -} ->+   Int {- ^ lda -} ->+   IO (Array (ZeroInt,ZeroInt) Double, Int)+lag2d m sa lda = do+   let (saDim0,saDim1) = Call.sizes2 $ Array.shape sa+   let n = saDim0+   let ldsa = saDim1+   a <- Call.newArray2 n lda+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      saPtr <- Call.array sa+      ldsaPtr <- Call.cint ldsa+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      infoPtr <- Call.alloca+      liftIO $ FFI.lag2d mPtr nPtr saPtr ldsaPtr aPtr ldaPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray a+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slags2.f>+lags2 ::+   Bool {- ^ upper -} ->+   Float {- ^ a1 -} ->+   Float {- ^ a2 -} ->+   Float {- ^ a3 -} ->+   Float {- ^ b1 -} ->+   Float {- ^ b2 -} ->+   Float {- ^ b3 -} ->+   IO (Float, Float, Float, Float, Float, Float)+lags2 upper a1 a2 a3 b1 b2 b3 = do+   evalContT $ do+      upperPtr <- Call.bool upper+      a1Ptr <- Call.float a1+      a2Ptr <- Call.float a2+      a3Ptr <- Call.float a3+      b1Ptr <- Call.float b1+      b2Ptr <- Call.float b2+      b3Ptr <- Call.float b3+      csuPtr <- Call.alloca+      snuPtr <- Call.alloca+      csvPtr <- Call.alloca+      snvPtr <- Call.alloca+      csqPtr <- Call.alloca+      snqPtr <- Call.alloca+      liftIO $ FFI.lags2 upperPtr a1Ptr a2Ptr a3Ptr b1Ptr b2Ptr b3Ptr csuPtr snuPtr csvPtr snvPtr csqPtr snqPtr+      liftIO $ pure (,,,,,)+         <*> peek csuPtr+         <*> peek snuPtr+         <*> peek csvPtr+         <*> peek snvPtr+         <*> peek csqPtr+         <*> peek snqPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slagtf.f>+lagtf ::+   IOArray ZeroInt Float {- ^ a -} ->+   Float {- ^ lambda -} ->+   IOArray ZeroInt Float {- ^ b -} ->+   IOArray ZeroInt Float {- ^ c -} ->+   Float {- ^ tol -} ->+   IO (Array ZeroInt Float, Array ZeroInt CInt, Int)+lagtf a lambda b c tol = do+   let aDim0 = Call.sizes1 $ MutArray.shape a+   let bDim0 = Call.sizes1 $ MutArray.shape b+   let cDim0 = Call.sizes1 $ MutArray.shape c+   let n = aDim0+   Call.assert "lagtf: n-1 == bDim0" (n-1 == bDim0)+   Call.assert "lagtf: n-1 == cDim0" (n-1 == cDim0)+   d <- Call.newArray1 (n-2)+   in_ <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      lambdaPtr <- Call.float lambda+      bPtr <- Call.ioarray b+      cPtr <- Call.ioarray c+      tolPtr <- Call.float tol+      dPtr <- Call.ioarray d+      in_Ptr <- Call.ioarray in_+      infoPtr <- Call.alloca+      liftIO $ FFI.lagtf nPtr aPtr lambdaPtr bPtr cPtr tolPtr dPtr in_Ptr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray d+         <*> Call.freezeArray in_+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slagtm.f>+lagtm ::+   Char {- ^ trans -} ->+   Float {- ^ alpha -} ->+   Array ZeroInt Float {- ^ dl -} ->+   Array ZeroInt Float {- ^ d -} ->+   Array ZeroInt Float {- ^ du -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ x -} ->+   Float {- ^ beta -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   IO ()+lagtm trans alpha dl d du x beta b = do+   let dlDim0 = Call.sizes1 $ Array.shape dl+   let dDim0 = Call.sizes1 $ Array.shape d+   let duDim0 = Call.sizes1 $ Array.shape du+   let (xDim0,xDim1) = Call.sizes2 $ Array.shape x+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = dDim0+   let nrhs = xDim0+   let ldx = xDim1+   let ldb = bDim1+   Call.assert "lagtm: n-1 == dlDim0" (n-1 == dlDim0)+   Call.assert "lagtm: n-1 == duDim0" (n-1 == duDim0)+   Call.assert "lagtm: nrhs == bDim0" (nrhs == bDim0)+   evalContT $ do+      transPtr <- Call.char trans+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      alphaPtr <- Call.float alpha+      dlPtr <- Call.array dl+      dPtr <- Call.array d+      duPtr <- Call.array du+      xPtr <- Call.array x+      ldxPtr <- Call.cint ldx+      betaPtr <- Call.float beta+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      liftIO $ FFI.lagtm transPtr nPtr nrhsPtr alphaPtr dlPtr dPtr duPtr xPtr ldxPtr betaPtr bPtr ldbPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slagts.f>+lagts ::+   Int {- ^ job -} ->+   Array ZeroInt Float {- ^ a -} ->+   Array ZeroInt Float {- ^ b -} ->+   Array ZeroInt Float {- ^ c -} ->+   Array ZeroInt Float {- ^ d -} ->+   Array ZeroInt CInt {- ^ in_ -} ->+   IOArray ZeroInt Float {- ^ y -} ->+   Float {- ^ tol -} ->+   IO (Float, Int)+lagts job a b c d in_ y tol = do+   let aDim0 = Call.sizes1 $ Array.shape a+   let bDim0 = Call.sizes1 $ Array.shape b+   let cDim0 = Call.sizes1 $ Array.shape c+   let dDim0 = Call.sizes1 $ Array.shape d+   let in_Dim0 = Call.sizes1 $ Array.shape in_+   let yDim0 = Call.sizes1 $ MutArray.shape y+   let n = aDim0+   Call.assert "lagts: n-1 == bDim0" (n-1 == bDim0)+   Call.assert "lagts: n-1 == cDim0" (n-1 == cDim0)+   Call.assert "lagts: n-2 == dDim0" (n-2 == dDim0)+   Call.assert "lagts: n == in_Dim0" (n == in_Dim0)+   Call.assert "lagts: n == yDim0" (n == yDim0)+   evalContT $ do+      jobPtr <- Call.cint job+      nPtr <- Call.cint n+      aPtr <- Call.array a+      bPtr <- Call.array b+      cPtr <- Call.array c+      dPtr <- Call.array d+      in_Ptr <- Call.array in_+      yPtr <- Call.ioarray y+      tolPtr <- Call.float tol+      infoPtr <- Call.alloca+      liftIO $ FFI.lagts jobPtr nPtr aPtr bPtr cPtr dPtr in_Ptr yPtr tolPtr infoPtr+      liftIO $ pure (,)+         <*> peek tolPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slagv2.f>+lagv2 ::+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float, Float)+lagv2 a b = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let lda = aDim1+   let ldb = bDim1+   Call.assert "lagv2: 2 == aDim0" (2 == aDim0)+   Call.assert "lagv2: 2 == bDim0" (2 == bDim0)+   alphar <- Call.newArray1 2+   alphai <- Call.newArray1 2+   beta <- Call.newArray1 2+   evalContT $ do+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      alpharPtr <- Call.ioarray alphar+      alphaiPtr <- Call.ioarray alphai+      betaPtr <- Call.ioarray beta+      cslPtr <- Call.alloca+      snlPtr <- Call.alloca+      csrPtr <- Call.alloca+      snrPtr <- Call.alloca+      liftIO $ FFI.lagv2 aPtr ldaPtr bPtr ldbPtr alpharPtr alphaiPtr betaPtr cslPtr snlPtr csrPtr snrPtr+      liftIO $ pure (,,,,,,)+         <*> Call.freezeArray alphar+         <*> Call.freezeArray alphai+         <*> Call.freezeArray beta+         <*> peek cslPtr+         <*> peek snlPtr+         <*> peek csrPtr+         <*> peek snrPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slahqr.f>+lahqr ::+   Bool {- ^ wantt -} ->+   Bool {- ^ wantz -} ->+   Int {- ^ ilo -} ->+   Int {- ^ ihi -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ h -} ->+   Int {- ^ iloz -} ->+   Int {- ^ ihiz -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ z -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Int)+lahqr wantt wantz ilo ihi h iloz ihiz z = do+   let (hDim0,hDim1) = Call.sizes2 $ MutArray.shape h+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = hDim0+   let ldh = hDim1+   let ldz = zDim1+   Call.assert "lahqr: n == zDim0" (n == zDim0)+   wr <- Call.newArray1 n+   wi <- Call.newArray1 n+   evalContT $ do+      wanttPtr <- Call.bool wantt+      wantzPtr <- Call.bool wantz+      nPtr <- Call.cint n+      iloPtr <- Call.cint ilo+      ihiPtr <- Call.cint ihi+      hPtr <- Call.ioarray h+      ldhPtr <- Call.cint ldh+      wrPtr <- Call.ioarray wr+      wiPtr <- Call.ioarray wi+      ilozPtr <- Call.cint iloz+      ihizPtr <- Call.cint ihiz+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      infoPtr <- Call.alloca+      liftIO $ FFI.lahqr wanttPtr wantzPtr nPtr iloPtr ihiPtr hPtr ldhPtr wrPtr wiPtr ilozPtr ihizPtr zPtr ldzPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray wr+         <*> Call.freezeArray wi+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slahr2.f>+lahr2 ::+   Int {- ^ n -} ->+   Int {- ^ k -} ->+   Int {- ^ nb -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Int {- ^ ldt -} ->+   Int {- ^ ldy -} ->+   IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float)+lahr2 n k nb a ldt ldy = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let lda = aDim1+   Call.assert "lahr2: n-k+1 == aDim0" (n-k+1 == aDim0)+   tau <- Call.newArray1 nb+   t <- Call.newArray2 nb ldt+   y <- Call.newArray2 nb ldy+   evalContT $ do+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      nbPtr <- Call.cint nb+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      tPtr <- Call.ioarray t+      ldtPtr <- Call.cint ldt+      yPtr <- Call.ioarray y+      ldyPtr <- Call.cint ldy+      liftIO $ FFI.lahr2 nPtr kPtr nbPtr aPtr ldaPtr tauPtr tPtr ldtPtr yPtr ldyPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray tau+         <*> Call.freezeArray t+         <*> Call.freezeArray y++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slaic1.f>+laic1 ::+   Int {- ^ job -} ->+   Array ZeroInt Float {- ^ x -} ->+   Float {- ^ sest -} ->+   Array ZeroInt Float {- ^ w -} ->+   Float {- ^ gamma -} ->+   IO (Float, Float, Float)+laic1 job x sest w gamma = do+   let xDim0 = Call.sizes1 $ Array.shape x+   let wDim0 = Call.sizes1 $ Array.shape w+   let j = xDim0+   Call.assert "laic1: j == wDim0" (j == wDim0)+   evalContT $ do+      jobPtr <- Call.cint job+      jPtr <- Call.cint j+      xPtr <- Call.array x+      sestPtr <- Call.float sest+      wPtr <- Call.array w+      gammaPtr <- Call.float gamma+      sestprPtr <- Call.alloca+      sPtr <- Call.alloca+      cPtr <- Call.alloca+      liftIO $ FFI.laic1 jobPtr jPtr xPtr sestPtr wPtr gammaPtr sestprPtr sPtr cPtr+      liftIO $ pure (,,)+         <*> peek sestprPtr+         <*> peek sPtr+         <*> peek cPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slaisnan.f>+laisnan ::+   Float {- ^ sin1 -} ->+   Float {- ^ sin2 -} ->+   IO Bool+laisnan sin1 sin2 = do+   evalContT $ do+      sin1Ptr <- Call.float sin1+      sin2Ptr <- Call.float sin2+      liftIO $ FFI.laisnan sin1Ptr sin2Ptr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slaln2.f>+laln2 ::+   Bool {- ^ ltrans -} ->+   Float {- ^ smin -} ->+   Float {- ^ ca -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Float {- ^ d1 -} ->+   Float {- ^ d2 -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ b -} ->+   Float {- ^ wr -} ->+   Float {- ^ wi -} ->+   Int {- ^ ldx -} ->+   IO (Array (ZeroInt,ZeroInt) Float, Float, Float, Int)+laln2 ltrans smin ca a d1 d2 b wr wi ldx = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let na = aDim0+   let lda = aDim1+   let nw = bDim0+   let ldb = bDim1+   x <- Call.newArray2 nw ldx+   evalContT $ do+      ltransPtr <- Call.bool ltrans+      naPtr <- Call.cint na+      nwPtr <- Call.cint nw+      sminPtr <- Call.float smin+      caPtr <- Call.float ca+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      d1Ptr <- Call.float d1+      d2Ptr <- Call.float d2+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      wrPtr <- Call.float wr+      wiPtr <- Call.float wi+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      scalePtr <- Call.alloca+      xnormPtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.laln2 ltransPtr naPtr nwPtr sminPtr caPtr aPtr ldaPtr d1Ptr d2Ptr bPtr ldbPtr wrPtr wiPtr xPtr ldxPtr scalePtr xnormPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray x+         <*> peek scalePtr+         <*> peek xnormPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slals0.f>+lals0 ::+   Int {- ^ icompq -} ->+   Int {- ^ nl -} ->+   Int {- ^ nr -} ->+   Int {- ^ sqre -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   Int {- ^ ldbx -} ->+   Array ZeroInt CInt {- ^ perm -} ->+   Int {- ^ givptr -} ->+   Array (ZeroInt,ZeroInt) CInt {- ^ givcol -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ givnum -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ poles -} ->+   Array ZeroInt Float {- ^ difl -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ difr -} ->+   Array ZeroInt Float {- ^ z -} ->+   Float {- ^ c -} ->+   Float {- ^ s -} ->+   IO (Array (ZeroInt,ZeroInt) Float, Int)+lals0 icompq nl nr sqre b ldbx perm givptr givcol givnum poles difl difr z c s = do+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let permDim0 = Call.sizes1 $ Array.shape perm+   let (givcolDim0,givcolDim1) = Call.sizes2 $ Array.shape givcol+   let (givnumDim0,givnumDim1) = Call.sizes2 $ Array.shape givnum+   let (polesDim0,polesDim1) = Call.sizes2 $ Array.shape poles+   let diflDim0 = Call.sizes1 $ Array.shape difl+   let (difrDim0,difrDim1) = Call.sizes2 $ Array.shape difr+   let zDim0 = Call.sizes1 $ Array.shape z+   let nrhs = bDim0+   let ldb = bDim1+   let _n = permDim0+   let ldgcol = givcolDim1+   let ldgnum = givnumDim1+   let k = diflDim0+   Call.assert "lals0: 2 == givcolDim0" (2 == givcolDim0)+   Call.assert "lals0: 2 == givnumDim0" (2 == givnumDim0)+   Call.assert "lals0: 2 == polesDim0" (2 == polesDim0)+   Call.assert "lals0: ldgnum == polesDim1" (ldgnum == polesDim1)+   Call.assert "lals0: 2 == difrDim0" (2 == difrDim0)+   Call.assert "lals0: ldgnum == difrDim1" (ldgnum == difrDim1)+   Call.assert "lals0: k == zDim0" (k == zDim0)+   bx <- Call.newArray2 nrhs ldbx+   work <- Call.newArray1 k+   evalContT $ do+      icompqPtr <- Call.cint icompq+      nlPtr <- Call.cint nl+      nrPtr <- Call.cint nr+      sqrePtr <- Call.cint sqre+      nrhsPtr <- Call.cint nrhs+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      bxPtr <- Call.ioarray bx+      ldbxPtr <- Call.cint ldbx+      permPtr <- Call.array perm+      givptrPtr <- Call.cint givptr+      givcolPtr <- Call.array givcol+      ldgcolPtr <- Call.cint ldgcol+      givnumPtr <- Call.array givnum+      ldgnumPtr <- Call.cint ldgnum+      polesPtr <- Call.array poles+      diflPtr <- Call.array difl+      difrPtr <- Call.array difr+      zPtr <- Call.array z+      kPtr <- Call.cint k+      cPtr <- Call.float c+      sPtr <- Call.float s+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.lals0 icompqPtr nlPtr nrPtr sqrePtr nrhsPtr bPtr ldbPtr bxPtr ldbxPtr permPtr givptrPtr givcolPtr ldgcolPtr givnumPtr ldgnumPtr polesPtr diflPtr difrPtr zPtr kPtr cPtr sPtr workPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray bx+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slalsa.f>+lalsa ::+   Int {- ^ icompq -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   Int {- ^ ldbx -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ u -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ vt -} ->+   Array ZeroInt CInt {- ^ k -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ difl -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ difr -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ z -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ poles -} ->+   Array ZeroInt CInt {- ^ givptr -} ->+   Array (ZeroInt,ZeroInt) CInt {- ^ givcol -} ->+   Array (ZeroInt,ZeroInt) CInt {- ^ perm -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ givnum -} ->+   Array ZeroInt Float {- ^ c -} ->+   Array ZeroInt Float {- ^ s -} ->+   IO (Array (ZeroInt,ZeroInt) Float, Int)+lalsa icompq b ldbx u vt k difl difr z poles givptr givcol perm givnum c s = do+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let (uDim0,uDim1) = Call.sizes2 $ Array.shape u+   let (vtDim0,vtDim1) = Call.sizes2 $ Array.shape vt+   let kDim0 = Call.sizes1 $ Array.shape k+   let (diflDim0,diflDim1) = Call.sizes2 $ Array.shape difl+   let (difrDim0,difrDim1) = Call.sizes2 $ Array.shape difr+   let (zDim0,zDim1) = Call.sizes2 $ Array.shape z+   let (polesDim0,polesDim1) = Call.sizes2 $ Array.shape poles+   let givptrDim0 = Call.sizes1 $ Array.shape givptr+   let (givcolDim0,givcolDim1) = Call.sizes2 $ Array.shape givcol+   let (permDim0,permDim1) = Call.sizes2 $ Array.shape perm+   let (givnumDim0,givnumDim1) = Call.sizes2 $ Array.shape givnum+   let cDim0 = Call.sizes1 $ Array.shape c+   let sDim0 = Call.sizes1 $ Array.shape s+   let nrhs = bDim0+   let ldb = bDim1+   let smlsiz = uDim0+   let ldu = uDim1+   let n = kDim0+   let nlvl = diflDim0+   let ldgcol = givcolDim1+   Call.assert "lalsa: smlsiz+1 == vtDim0" (smlsiz+1 == vtDim0)+   Call.assert "lalsa: ldu == vtDim1" (ldu == vtDim1)+   Call.assert "lalsa: ldu == diflDim1" (ldu == diflDim1)+   Call.assert "lalsa: 2*nlvl == difrDim0" (2*nlvl == difrDim0)+   Call.assert "lalsa: ldu == difrDim1" (ldu == difrDim1)+   Call.assert "lalsa: nlvl == zDim0" (nlvl == zDim0)+   Call.assert "lalsa: ldu == zDim1" (ldu == zDim1)+   Call.assert "lalsa: 2*nlvl == polesDim0" (2*nlvl == polesDim0)+   Call.assert "lalsa: ldu == polesDim1" (ldu == polesDim1)+   Call.assert "lalsa: n == givptrDim0" (n == givptrDim0)+   Call.assert "lalsa: 2*nlvl == givcolDim0" (2*nlvl == givcolDim0)+   Call.assert "lalsa: nlvl == permDim0" (nlvl == permDim0)+   Call.assert "lalsa: ldgcol == permDim1" (ldgcol == permDim1)+   Call.assert "lalsa: 2*nlvl == givnumDim0" (2*nlvl == givnumDim0)+   Call.assert "lalsa: ldu == givnumDim1" (ldu == givnumDim1)+   Call.assert "lalsa: n == cDim0" (n == cDim0)+   Call.assert "lalsa: n == sDim0" (n == sDim0)+   bx <- Call.newArray2 nrhs ldbx+   work <- Call.newArray1 n+   iwork <- Call.newArray1 (3*n)+   evalContT $ do+      icompqPtr <- Call.cint icompq+      smlsizPtr <- Call.cint smlsiz+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      bxPtr <- Call.ioarray bx+      ldbxPtr <- Call.cint ldbx+      uPtr <- Call.array u+      lduPtr <- Call.cint ldu+      vtPtr <- Call.array vt+      kPtr <- Call.array k+      diflPtr <- Call.array difl+      difrPtr <- Call.array difr+      zPtr <- Call.array z+      polesPtr <- Call.array poles+      givptrPtr <- Call.array givptr+      givcolPtr <- Call.array givcol+      ldgcolPtr <- Call.cint ldgcol+      permPtr <- Call.array perm+      givnumPtr <- Call.array givnum+      cPtr <- Call.array c+      sPtr <- Call.array s+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.lalsa icompqPtr smlsizPtr nPtr nrhsPtr bPtr ldbPtr bxPtr ldbxPtr uPtr lduPtr vtPtr kPtr diflPtr difrPtr zPtr polesPtr givptrPtr givcolPtr ldgcolPtr permPtr givnumPtr cPtr sPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray bx+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slalsd.f>+lalsd ::+   Char {- ^ uplo -} ->+   Int {- ^ smlsiz -} ->+   IOArray ZeroInt Float {- ^ d -} ->+   IOArray ZeroInt Float {- ^ e -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   Float {- ^ rcond -} ->+   Int {- ^ workSize -} ->+   Int {- ^ iworkSize -} ->+   IO (Int, Int)+lalsd uplo smlsiz d e b rcond workSize iworkSize = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = dDim0+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "lalsd: n-1 == eDim0" (n-1 == eDim0)+   work <- Call.newArray1 workSize+   iwork <- Call.newArray1 iworkSize+   evalContT $ do+      uploPtr <- Call.char uplo+      smlsizPtr <- Call.cint smlsiz+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      rcondPtr <- Call.float rcond+      rankPtr <- Call.alloca+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.lalsd uploPtr smlsizPtr nPtr nrhsPtr dPtr ePtr bPtr ldbPtr rcondPtr rankPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,)+         <*> fmap fromIntegral (peek rankPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slamrg.f>+lamrg ::+   Int {- ^ n1 -} ->+   Int {- ^ n2 -} ->+   Array ZeroInt Float {- ^ a -} ->+   Int {- ^ strd1 -} ->+   Int {- ^ strd2 -} ->+   IO (Array ZeroInt CInt)+lamrg n1 n2 a strd1 strd2 = do+   let aDim0 = Call.sizes1 $ Array.shape a+   Call.assert "lamrg: n1+n2 == aDim0" (n1+n2 == aDim0)+   index <- Call.newArray1 (n1+n2)+   evalContT $ do+      n1Ptr <- Call.cint n1+      n2Ptr <- Call.cint n2+      aPtr <- Call.array a+      strd1Ptr <- Call.cint strd1+      strd2Ptr <- Call.cint strd2+      indexPtr <- Call.ioarray index+      liftIO $ FFI.lamrg n1Ptr n2Ptr aPtr strd1Ptr strd2Ptr indexPtr+      liftIO $ Call.freezeArray index++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slaneg.f>+laneg ::+   Array ZeroInt Float {- ^ d -} ->+   Array ZeroInt Float {- ^ lld -} ->+   Float {- ^ sigma -} ->+   Float {- ^ pivmin -} ->+   Int {- ^ r -} ->+   IO CInt+laneg d lld sigma pivmin r = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let lldDim0 = Call.sizes1 $ Array.shape lld+   let n = dDim0+   Call.assert "laneg: n-1 == lldDim0" (n-1 == lldDim0)+   evalContT $ do+      nPtr <- Call.cint n+      dPtr <- Call.array d+      lldPtr <- Call.array lld+      sigmaPtr <- Call.float sigma+      pivminPtr <- Call.float pivmin+      rPtr <- Call.cint r+      liftIO $ FFI.laneg nPtr dPtr lldPtr sigmaPtr pivminPtr rPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slangb.f>+langb ::+   Char {- ^ norm -} ->+   Int {- ^ kl -} ->+   Int {- ^ ku -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ ab -} ->+   Int {- ^ lwork -} ->+   IO Float+langb norm kl ku ab lwork = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let n = abDim0+   let ldab = abDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      normPtr <- Call.char norm+      nPtr <- Call.cint n+      klPtr <- Call.cint kl+      kuPtr <- Call.cint ku+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      workPtr <- Call.ioarray work+      liftIO $ FFI.langb normPtr nPtr klPtr kuPtr abPtr ldabPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slange.f>+lange ::+   Char {- ^ norm -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO Float+lange norm m a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      normPtr <- Call.char norm+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      workPtr <- Call.ioarray work+      liftIO $ FFI.lange normPtr mPtr nPtr aPtr ldaPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slangt.f>+langt ::+   Char {- ^ norm -} ->+   Array ZeroInt Float {- ^ dl -} ->+   Array ZeroInt Float {- ^ d -} ->+   Array ZeroInt Float {- ^ du -} ->+   IO Float+langt norm dl d du = do+   let dlDim0 = Call.sizes1 $ Array.shape dl+   let dDim0 = Call.sizes1 $ Array.shape d+   let duDim0 = Call.sizes1 $ Array.shape du+   let n = dDim0+   Call.assert "langt: n-1 == dlDim0" (n-1 == dlDim0)+   Call.assert "langt: n-1 == duDim0" (n-1 == duDim0)+   evalContT $ do+      normPtr <- Call.char norm+      nPtr <- Call.cint n+      dlPtr <- Call.array dl+      dPtr <- Call.array d+      duPtr <- Call.array du+      liftIO $ FFI.langt normPtr nPtr dlPtr dPtr duPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slanhs.f>+lanhs ::+   Char {- ^ norm -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO Float+lanhs norm a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      normPtr <- Call.char norm+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      workPtr <- Call.ioarray work+      liftIO $ FFI.lanhs normPtr nPtr aPtr ldaPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slansb.f>+lansb ::+   Char {- ^ norm -} ->+   Char {- ^ uplo -} ->+   Int {- ^ k -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ ab -} ->+   Int {- ^ lwork -} ->+   IO Float+lansb norm uplo k ab lwork = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let n = abDim0+   let ldab = abDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      normPtr <- Call.char norm+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      workPtr <- Call.ioarray work+      liftIO $ FFI.lansb normPtr uploPtr nPtr kPtr abPtr ldabPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slansf.f>+lansf ::+   Char {- ^ norm -} ->+   Char {- ^ transr -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Array ZeroInt Float {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO Float+lansf norm transr uplo n a lwork = do+   let aDim0 = Call.sizes1 $ Array.shape a+   Call.assert "lansf: n*(n+1)`div`2 == aDim0" (n*(n+1)`div`2 == aDim0)+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      normPtr <- Call.char norm+      transrPtr <- Call.char transr+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.array a+      workPtr <- Call.ioarray work+      liftIO $ FFI.lansf normPtr transrPtr uploPtr nPtr aPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slansp.f>+lansp ::+   Char {- ^ norm -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Array ZeroInt Float {- ^ ap -} ->+   Int {- ^ lwork -} ->+   IO Float+lansp norm uplo n ap lwork = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   Call.assert "lansp: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      normPtr <- Call.char norm+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.array ap+      workPtr <- Call.ioarray work+      liftIO $ FFI.lansp normPtr uploPtr nPtr apPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slanst.f>+lanst ::+   Char {- ^ norm -} ->+   Array ZeroInt Float {- ^ d -} ->+   Array ZeroInt Float {- ^ e -} ->+   IO Float+lanst norm d e = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let eDim0 = Call.sizes1 $ Array.shape e+   let n = dDim0+   Call.assert "lanst: n-1 == eDim0" (n-1 == eDim0)+   evalContT $ do+      normPtr <- Call.char norm+      nPtr <- Call.cint n+      dPtr <- Call.array d+      ePtr <- Call.array e+      liftIO $ FFI.lanst normPtr nPtr dPtr ePtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slansy.f>+lansy ::+   Char {- ^ norm -} ->+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO Float+lansy norm uplo a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      normPtr <- Call.char norm+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      workPtr <- Call.ioarray work+      liftIO $ FFI.lansy normPtr uploPtr nPtr aPtr ldaPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slantb.f>+lantb ::+   Char {- ^ norm -} ->+   Char {- ^ uplo -} ->+   Char {- ^ diag -} ->+   Int {- ^ k -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ ab -} ->+   Int {- ^ lwork -} ->+   IO Float+lantb norm uplo diag k ab lwork = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let n = abDim0+   let ldab = abDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      normPtr <- Call.char norm+      uploPtr <- Call.char uplo+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      workPtr <- Call.ioarray work+      liftIO $ FFI.lantb normPtr uploPtr diagPtr nPtr kPtr abPtr ldabPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slantp.f>+lantp ::+   Char {- ^ norm -} ->+   Char {- ^ uplo -} ->+   Char {- ^ diag -} ->+   Int {- ^ n -} ->+   Array ZeroInt Float {- ^ ap -} ->+   Int {- ^ lwork -} ->+   IO Float+lantp norm uplo diag n ap lwork = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   Call.assert "lantp: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      normPtr <- Call.char norm+      uploPtr <- Call.char uplo+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      apPtr <- Call.array ap+      workPtr <- Call.ioarray work+      liftIO $ FFI.lantp normPtr uploPtr diagPtr nPtr apPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slantr.f>+lantr ::+   Char {- ^ norm -} ->+   Char {- ^ uplo -} ->+   Char {- ^ diag -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO Float+lantr norm uplo diag m a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      normPtr <- Call.char norm+      uploPtr <- Call.char uplo+      diagPtr <- Call.char diag+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      workPtr <- Call.ioarray work+      liftIO $ FFI.lantr normPtr uploPtr diagPtr mPtr nPtr aPtr ldaPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slanv2.f>+lanv2 ::+   Float {- ^ a -} ->+   Float {- ^ b -} ->+   Float {- ^ c -} ->+   Float {- ^ d -} ->+   IO (Float, Float, Float, Float, Float, Float, Float, Float, Float, Float)+lanv2 a b c d = do+   evalContT $ do+      aPtr <- Call.float a+      bPtr <- Call.float b+      cPtr <- Call.float c+      dPtr <- Call.float d+      rt1rPtr <- Call.alloca+      rt1iPtr <- Call.alloca+      rt2rPtr <- Call.alloca+      rt2iPtr <- Call.alloca+      csPtr <- Call.alloca+      snPtr <- Call.alloca+      liftIO $ FFI.lanv2 aPtr bPtr cPtr dPtr rt1rPtr rt1iPtr rt2rPtr rt2iPtr csPtr snPtr+      liftIO $ pure (,,,,,,,,,)+         <*> peek aPtr+         <*> peek bPtr+         <*> peek cPtr+         <*> peek dPtr+         <*> peek rt1rPtr+         <*> peek rt1iPtr+         <*> peek rt2rPtr+         <*> peek rt2iPtr+         <*> peek csPtr+         <*> peek snPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slapll.f>+lapll ::+   Int {- ^ n -} ->+   IOArray ZeroInt Float {- ^ x -} ->+   Int {- ^ incx -} ->+   IOArray ZeroInt Float {- ^ y -} ->+   Int {- ^ incy -} ->+   IO (Float)+lapll n x incx y incy = do+   let xDim0 = Call.sizes1 $ MutArray.shape x+   let yDim0 = Call.sizes1 $ MutArray.shape y+   let _xSize = xDim0+   let _ySize = yDim0+   evalContT $ do+      nPtr <- Call.cint n+      xPtr <- Call.ioarray x+      incxPtr <- Call.cint incx+      yPtr <- Call.ioarray y+      incyPtr <- Call.cint incy+      ssminPtr <- Call.alloca+      liftIO $ FFI.lapll nPtr xPtr incxPtr yPtr incyPtr ssminPtr+      liftIO $ peek ssminPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slapmr.f>+lapmr ::+   Bool {- ^ forwrd -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ x -} ->+   IOArray ZeroInt CInt {- ^ k -} ->+   IO ()+lapmr forwrd x k = do+   let (xDim0,xDim1) = Call.sizes2 $ MutArray.shape x+   let kDim0 = Call.sizes1 $ MutArray.shape k+   let n = xDim0+   let ldx = xDim1+   let m = kDim0+   evalContT $ do+      forwrdPtr <- Call.bool forwrd+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      kPtr <- Call.ioarray k+      liftIO $ FFI.lapmr forwrdPtr mPtr nPtr xPtr ldxPtr kPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slapmt.f>+lapmt ::+   Bool {- ^ forwrd -} ->+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ x -} ->+   IOArray ZeroInt CInt {- ^ k -} ->+   IO ()+lapmt forwrd m x k = do+   let (xDim0,xDim1) = Call.sizes2 $ MutArray.shape x+   let kDim0 = Call.sizes1 $ MutArray.shape k+   let n = xDim0+   let ldx = xDim1+   Call.assert "lapmt: n == kDim0" (n == kDim0)+   evalContT $ do+      forwrdPtr <- Call.bool forwrd+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      kPtr <- Call.ioarray k+      liftIO $ FFI.lapmt forwrdPtr mPtr nPtr xPtr ldxPtr kPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slapy2.f>+lapy2 ::+   Float {- ^ x -} ->+   Float {- ^ y -} ->+   IO Float+lapy2 x y = do+   evalContT $ do+      xPtr <- Call.float x+      yPtr <- Call.float y+      liftIO $ FFI.lapy2 xPtr yPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slapy3.f>+lapy3 ::+   Float {- ^ x -} ->+   Float {- ^ y -} ->+   Float {- ^ z -} ->+   IO Float+lapy3 x y z = do+   evalContT $ do+      xPtr <- Call.float x+      yPtr <- Call.float y+      zPtr <- Call.float z+      liftIO $ FFI.lapy3 xPtr yPtr zPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slaqgb.f>+laqgb ::+   Int {- ^ kl -} ->+   Int {- ^ ku -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ ab -} ->+   Array ZeroInt Float {- ^ r -} ->+   Array ZeroInt Float {- ^ c -} ->+   Float {- ^ rowcnd -} ->+   Float {- ^ colcnd -} ->+   Float {- ^ amax -} ->+   IO (Char)+laqgb kl ku ab r c rowcnd colcnd amax = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let rDim0 = Call.sizes1 $ Array.shape r+   let cDim0 = Call.sizes1 $ Array.shape c+   let n = abDim0+   let ldab = abDim1+   let m = rDim0+   Call.assert "laqgb: n == cDim0" (n == cDim0)+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      klPtr <- Call.cint kl+      kuPtr <- Call.cint ku+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      rPtr <- Call.array r+      cPtr <- Call.array c+      rowcndPtr <- Call.float rowcnd+      colcndPtr <- Call.float colcnd+      amaxPtr <- Call.float amax+      equedPtr <- Call.alloca+      liftIO $ FFI.laqgb mPtr nPtr klPtr kuPtr abPtr ldabPtr rPtr cPtr rowcndPtr colcndPtr amaxPtr equedPtr+      liftIO $ fmap castCCharToChar (peek equedPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slaqge.f>+laqge ::+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Array ZeroInt Float {- ^ r -} ->+   Array ZeroInt Float {- ^ c -} ->+   Float {- ^ rowcnd -} ->+   Float {- ^ colcnd -} ->+   Float {- ^ amax -} ->+   IO (Char)+laqge a r c rowcnd colcnd amax = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let rDim0 = Call.sizes1 $ Array.shape r+   let cDim0 = Call.sizes1 $ Array.shape c+   let n = aDim0+   let lda = aDim1+   let m = rDim0+   Call.assert "laqge: n == cDim0" (n == cDim0)+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      rPtr <- Call.array r+      cPtr <- Call.array c+      rowcndPtr <- Call.float rowcnd+      colcndPtr <- Call.float colcnd+      amaxPtr <- Call.float amax+      equedPtr <- Call.alloca+      liftIO $ FFI.laqge mPtr nPtr aPtr ldaPtr rPtr cPtr rowcndPtr colcndPtr amaxPtr equedPtr+      liftIO $ fmap castCCharToChar (peek equedPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slaqp2.f>+laqp2 ::+   Int {- ^ m -} ->+   Int {- ^ offset -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IOArray ZeroInt CInt {- ^ jpvt -} ->+   IOArray ZeroInt Float {- ^ vn1 -} ->+   IOArray ZeroInt Float {- ^ vn2 -} ->+   IO (Array ZeroInt Float)+laqp2 m offset a jpvt vn1 vn2 = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let jpvtDim0 = Call.sizes1 $ MutArray.shape jpvt+   let vn1Dim0 = Call.sizes1 $ MutArray.shape vn1+   let vn2Dim0 = Call.sizes1 $ MutArray.shape vn2+   let n = aDim0+   let lda = aDim1+   Call.assert "laqp2: n == jpvtDim0" (n == jpvtDim0)+   Call.assert "laqp2: n == vn1Dim0" (n == vn1Dim0)+   Call.assert "laqp2: n == vn2Dim0" (n == vn2Dim0)+   tau <- Call.newArray1 (minimum[m,n])+   work <- Call.newArray1 n+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      offsetPtr <- Call.cint offset+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      jpvtPtr <- Call.ioarray jpvt+      tauPtr <- Call.ioarray tau+      vn1Ptr <- Call.ioarray vn1+      vn2Ptr <- Call.ioarray vn2+      workPtr <- Call.ioarray work+      liftIO $ FFI.laqp2 mPtr nPtr offsetPtr aPtr ldaPtr jpvtPtr tauPtr vn1Ptr vn2Ptr workPtr+      liftIO $ Call.freezeArray tau++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slaqps.f>+laqps ::+   Int {- ^ m -} ->+   Int {- ^ offset -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IOArray ZeroInt CInt {- ^ jpvt -} ->+   Int {- ^ kb -} ->+   IOArray ZeroInt Float {- ^ vn1 -} ->+   IOArray ZeroInt Float {- ^ vn2 -} ->+   IOArray ZeroInt Float {- ^ auxv -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ f -} ->+   IO (Int, Array ZeroInt Float)+laqps m offset a jpvt kb vn1 vn2 auxv f = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let jpvtDim0 = Call.sizes1 $ MutArray.shape jpvt+   let vn1Dim0 = Call.sizes1 $ MutArray.shape vn1+   let vn2Dim0 = Call.sizes1 $ MutArray.shape vn2+   let auxvDim0 = Call.sizes1 $ MutArray.shape auxv+   let (fDim0,fDim1) = Call.sizes2 $ MutArray.shape f+   let n = aDim0+   let lda = aDim1+   let nb = auxvDim0+   let ldf = fDim1+   Call.assert "laqps: n == jpvtDim0" (n == jpvtDim0)+   Call.assert "laqps: n == vn1Dim0" (n == vn1Dim0)+   Call.assert "laqps: n == vn2Dim0" (n == vn2Dim0)+   Call.assert "laqps: nb == fDim0" (nb == fDim0)+   tau <- Call.newArray1 kb+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      offsetPtr <- Call.cint offset+      nbPtr <- Call.cint nb+      kbPtr <- Call.alloca+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      jpvtPtr <- Call.ioarray jpvt+      tauPtr <- Call.ioarray tau+      vn1Ptr <- Call.ioarray vn1+      vn2Ptr <- Call.ioarray vn2+      auxvPtr <- Call.ioarray auxv+      fPtr <- Call.ioarray f+      ldfPtr <- Call.cint ldf+      liftIO $ FFI.laqps mPtr nPtr offsetPtr nbPtr kbPtr aPtr ldaPtr jpvtPtr tauPtr vn1Ptr vn2Ptr auxvPtr fPtr ldfPtr+      liftIO $ pure (,)+         <*> fmap fromIntegral (peek kbPtr)+         <*> Call.freezeArray tau++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slaqr0.f>+laqr0 ::+   Bool {- ^ wantt -} ->+   Bool {- ^ wantz -} ->+   Int {- ^ ilo -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ h -} ->+   Int {- ^ iloz -} ->+   Int {- ^ ihiz -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ z -} ->+   Int {- ^ workSize -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Int)+laqr0 wantt wantz ilo h iloz ihiz z workSize lwork = do+   let (hDim0,hDim1) = Call.sizes2 $ MutArray.shape h+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = hDim0+   let ldh = hDim1+   let ihi = zDim0+   let ldz = zDim1+   wr <- Call.newArray1 ihi+   wi <- Call.newArray1 ihi+   work <- Call.newArray1 workSize+   evalContT $ do+      wanttPtr <- Call.bool wantt+      wantzPtr <- Call.bool wantz+      nPtr <- Call.cint n+      iloPtr <- Call.cint ilo+      ihiPtr <- Call.cint ihi+      hPtr <- Call.ioarray h+      ldhPtr <- Call.cint ldh+      wrPtr <- Call.ioarray wr+      wiPtr <- Call.ioarray wi+      ilozPtr <- Call.cint iloz+      ihizPtr <- Call.cint ihiz+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.laqr0 wanttPtr wantzPtr nPtr iloPtr ihiPtr hPtr ldhPtr wrPtr wiPtr ilozPtr ihizPtr zPtr ldzPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray wr+         <*> Call.freezeArray wi+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slaqr1.f>+laqr1 ::+   Array (ZeroInt,ZeroInt) Float {- ^ h -} ->+   Float {- ^ sr1 -} ->+   Float {- ^ si1 -} ->+   Float {- ^ sr2 -} ->+   Float {- ^ si2 -} ->+   IO (Array ZeroInt Float)+laqr1 h sr1 si1 sr2 si2 = do+   let (hDim0,hDim1) = Call.sizes2 $ Array.shape h+   let n = hDim0+   let ldh = hDim1+   v <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      hPtr <- Call.array h+      ldhPtr <- Call.cint ldh+      sr1Ptr <- Call.float sr1+      si1Ptr <- Call.float si1+      sr2Ptr <- Call.float sr2+      si2Ptr <- Call.float si2+      vPtr <- Call.ioarray v+      liftIO $ FFI.laqr1 nPtr hPtr ldhPtr sr1Ptr si1Ptr sr2Ptr si2Ptr vPtr+      liftIO $ Call.freezeArray v++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slaqr2.f>+laqr2 ::+   Bool {- ^ wantt -} ->+   Bool {- ^ wantz -} ->+   Int {- ^ ktop -} ->+   Int {- ^ kbot -} ->+   Int {- ^ nw -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ h -} ->+   Int {- ^ iloz -} ->+   Int {- ^ ihiz -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ z -} ->+   Int {- ^ ldv -} ->+   Int {- ^ nh -} ->+   Int {- ^ ldt -} ->+   Int {- ^ nv -} ->+   Int {- ^ ldwv -} ->+   Int {- ^ lwork -} ->+   IO (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float)+laqr2 wantt wantz ktop kbot nw h iloz ihiz z ldv nh ldt nv ldwv lwork = do+   let (hDim0,hDim1) = Call.sizes2 $ MutArray.shape h+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = hDim0+   let ldh = hDim1+   let ldz = zDim1+   Call.assert "laqr2: n == zDim0" (n == zDim0)+   sr <- Call.newArray1 kbot+   si <- Call.newArray1 kbot+   v <- Call.newArray2 nw ldv+   t <- Call.newArray2 nw ldt+   wv <- Call.newArray2 nw ldwv+   work <- Call.newArray1 lwork+   evalContT $ do+      wanttPtr <- Call.bool wantt+      wantzPtr <- Call.bool wantz+      nPtr <- Call.cint n+      ktopPtr <- Call.cint ktop+      kbotPtr <- Call.cint kbot+      nwPtr <- Call.cint nw+      hPtr <- Call.ioarray h+      ldhPtr <- Call.cint ldh+      ilozPtr <- Call.cint iloz+      ihizPtr <- Call.cint ihiz+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      nsPtr <- Call.alloca+      ndPtr <- Call.alloca+      srPtr <- Call.ioarray sr+      siPtr <- Call.ioarray si+      vPtr <- Call.ioarray v+      ldvPtr <- Call.cint ldv+      nhPtr <- Call.cint nh+      tPtr <- Call.ioarray t+      ldtPtr <- Call.cint ldt+      nvPtr <- Call.cint nv+      wvPtr <- Call.ioarray wv+      ldwvPtr <- Call.cint ldwv+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      liftIO $ FFI.laqr2 wanttPtr wantzPtr nPtr ktopPtr kbotPtr nwPtr hPtr ldhPtr ilozPtr ihizPtr zPtr ldzPtr nsPtr ndPtr srPtr siPtr vPtr ldvPtr nhPtr tPtr ldtPtr nvPtr wvPtr ldwvPtr workPtr lworkPtr+      liftIO $ pure (,,,,,,)+         <*> fmap fromIntegral (peek nsPtr)+         <*> fmap fromIntegral (peek ndPtr)+         <*> Call.freezeArray sr+         <*> Call.freezeArray si+         <*> Call.freezeArray v+         <*> Call.freezeArray t+         <*> Call.freezeArray wv++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slaqr3.f>+laqr3 ::+   Bool {- ^ wantt -} ->+   Bool {- ^ wantz -} ->+   Int {- ^ ktop -} ->+   Int {- ^ kbot -} ->+   Int {- ^ nw -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ h -} ->+   Int {- ^ iloz -} ->+   Int {- ^ ihiz -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ z -} ->+   Int {- ^ ldv -} ->+   Int {- ^ nh -} ->+   Int {- ^ ldt -} ->+   Int {- ^ nv -} ->+   Int {- ^ ldwv -} ->+   Int {- ^ lwork -} ->+   IO (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float)+laqr3 wantt wantz ktop kbot nw h iloz ihiz z ldv nh ldt nv ldwv lwork = do+   let (hDim0,hDim1) = Call.sizes2 $ MutArray.shape h+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = hDim0+   let ldh = hDim1+   let ldz = zDim1+   Call.assert "laqr3: n == zDim0" (n == zDim0)+   sr <- Call.newArray1 kbot+   si <- Call.newArray1 kbot+   v <- Call.newArray2 nw ldv+   t <- Call.newArray2 nw ldt+   wv <- Call.newArray2 nw ldwv+   work <- Call.newArray1 lwork+   evalContT $ do+      wanttPtr <- Call.bool wantt+      wantzPtr <- Call.bool wantz+      nPtr <- Call.cint n+      ktopPtr <- Call.cint ktop+      kbotPtr <- Call.cint kbot+      nwPtr <- Call.cint nw+      hPtr <- Call.ioarray h+      ldhPtr <- Call.cint ldh+      ilozPtr <- Call.cint iloz+      ihizPtr <- Call.cint ihiz+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      nsPtr <- Call.alloca+      ndPtr <- Call.alloca+      srPtr <- Call.ioarray sr+      siPtr <- Call.ioarray si+      vPtr <- Call.ioarray v+      ldvPtr <- Call.cint ldv+      nhPtr <- Call.cint nh+      tPtr <- Call.ioarray t+      ldtPtr <- Call.cint ldt+      nvPtr <- Call.cint nv+      wvPtr <- Call.ioarray wv+      ldwvPtr <- Call.cint ldwv+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      liftIO $ FFI.laqr3 wanttPtr wantzPtr nPtr ktopPtr kbotPtr nwPtr hPtr ldhPtr ilozPtr ihizPtr zPtr ldzPtr nsPtr ndPtr srPtr siPtr vPtr ldvPtr nhPtr tPtr ldtPtr nvPtr wvPtr ldwvPtr workPtr lworkPtr+      liftIO $ pure (,,,,,,)+         <*> fmap fromIntegral (peek nsPtr)+         <*> fmap fromIntegral (peek ndPtr)+         <*> Call.freezeArray sr+         <*> Call.freezeArray si+         <*> Call.freezeArray v+         <*> Call.freezeArray t+         <*> Call.freezeArray wv++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slaqr4.f>+laqr4 ::+   Bool {- ^ wantt -} ->+   Bool {- ^ wantz -} ->+   Int {- ^ ilo -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ h -} ->+   Int {- ^ iloz -} ->+   Int {- ^ ihiz -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ z -} ->+   Int {- ^ workSize -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Int)+laqr4 wantt wantz ilo h iloz ihiz z workSize lwork = do+   let (hDim0,hDim1) = Call.sizes2 $ MutArray.shape h+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = hDim0+   let ldh = hDim1+   let ihi = zDim0+   let ldz = zDim1+   wr <- Call.newArray1 ihi+   wi <- Call.newArray1 ihi+   work <- Call.newArray1 workSize+   evalContT $ do+      wanttPtr <- Call.bool wantt+      wantzPtr <- Call.bool wantz+      nPtr <- Call.cint n+      iloPtr <- Call.cint ilo+      ihiPtr <- Call.cint ihi+      hPtr <- Call.ioarray h+      ldhPtr <- Call.cint ldh+      wrPtr <- Call.ioarray wr+      wiPtr <- Call.ioarray wi+      ilozPtr <- Call.cint iloz+      ihizPtr <- Call.cint ihiz+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.laqr4 wanttPtr wantzPtr nPtr iloPtr ihiPtr hPtr ldhPtr wrPtr wiPtr ilozPtr ihizPtr zPtr ldzPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray wr+         <*> Call.freezeArray wi+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slaqr5.f>+laqr5 ::+   Bool {- ^ wantt -} ->+   Bool {- ^ wantz -} ->+   Int {- ^ kacc22 -} ->+   Int {- ^ ktop -} ->+   Int {- ^ kbot -} ->+   IOArray ZeroInt Float {- ^ sr -} ->+   IOArray ZeroInt Float {- ^ si -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ h -} ->+   Int {- ^ iloz -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ z -} ->+   Int {- ^ ldv -} ->+   Int {- ^ ldu -} ->+   Int {- ^ nv -} ->+   Int {- ^ ldwv -} ->+   Int {- ^ nh -} ->+   Int {- ^ ldwh -} ->+   IO (Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float)+laqr5 wantt wantz kacc22 ktop kbot sr si h iloz z ldv ldu nv ldwv nh ldwh = do+   let srDim0 = Call.sizes1 $ MutArray.shape sr+   let siDim0 = Call.sizes1 $ MutArray.shape si+   let (hDim0,hDim1) = Call.sizes2 $ MutArray.shape h+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let nshfts = srDim0+   let n = hDim0+   let ldh = hDim1+   let ihiz = zDim0+   let ldz = zDim1+   Call.assert "laqr5: nshfts == siDim0" (nshfts == siDim0)+   v <- Call.newArray2 (nshfts`div`2) ldv+   u <- Call.newArray2 (3*nshfts-3) ldu+   wv <- Call.newArray2 (3*nshfts-3) ldwv+   wh <- Call.newArray2 nh ldwh+   evalContT $ do+      wanttPtr <- Call.bool wantt+      wantzPtr <- Call.bool wantz+      kacc22Ptr <- Call.cint kacc22+      nPtr <- Call.cint n+      ktopPtr <- Call.cint ktop+      kbotPtr <- Call.cint kbot+      nshftsPtr <- Call.cint nshfts+      srPtr <- Call.ioarray sr+      siPtr <- Call.ioarray si+      hPtr <- Call.ioarray h+      ldhPtr <- Call.cint ldh+      ilozPtr <- Call.cint iloz+      ihizPtr <- Call.cint ihiz+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      vPtr <- Call.ioarray v+      ldvPtr <- Call.cint ldv+      uPtr <- Call.ioarray u+      lduPtr <- Call.cint ldu+      nvPtr <- Call.cint nv+      wvPtr <- Call.ioarray wv+      ldwvPtr <- Call.cint ldwv+      nhPtr <- Call.cint nh+      whPtr <- Call.ioarray wh+      ldwhPtr <- Call.cint ldwh+      liftIO $ FFI.laqr5 wanttPtr wantzPtr kacc22Ptr nPtr ktopPtr kbotPtr nshftsPtr srPtr siPtr hPtr ldhPtr ilozPtr ihizPtr zPtr ldzPtr vPtr ldvPtr uPtr lduPtr nvPtr wvPtr ldwvPtr nhPtr whPtr ldwhPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray v+         <*> Call.freezeArray u+         <*> Call.freezeArray wv+         <*> Call.freezeArray wh++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slaqsb.f>+laqsb ::+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ ab -} ->+   Array ZeroInt Float {- ^ s -} ->+   Float {- ^ scond -} ->+   Float {- ^ amax -} ->+   IO (Char)+laqsb uplo kd ab s scond amax = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let sDim0 = Call.sizes1 $ Array.shape s+   let n = abDim0+   let ldab = abDim1+   Call.assert "laqsb: n == sDim0" (n == sDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      sPtr <- Call.array s+      scondPtr <- Call.float scond+      amaxPtr <- Call.float amax+      equedPtr <- Call.alloca+      liftIO $ FFI.laqsb uploPtr nPtr kdPtr abPtr ldabPtr sPtr scondPtr amaxPtr equedPtr+      liftIO $ fmap castCCharToChar (peek equedPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slaqsp.f>+laqsp ::+   Char {- ^ uplo -} ->+   IOArray ZeroInt Float {- ^ ap -} ->+   Array ZeroInt Float {- ^ s -} ->+   Float {- ^ scond -} ->+   Float {- ^ amax -} ->+   IO (Char)+laqsp uplo ap s scond amax = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   let sDim0 = Call.sizes1 $ Array.shape s+   let n = sDim0+   Call.assert "laqsp: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      sPtr <- Call.array s+      scondPtr <- Call.float scond+      amaxPtr <- Call.float amax+      equedPtr <- Call.alloca+      liftIO $ FFI.laqsp uploPtr nPtr apPtr sPtr scondPtr amaxPtr equedPtr+      liftIO $ fmap castCCharToChar (peek equedPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slaqsy.f>+laqsy ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Array ZeroInt Float {- ^ s -} ->+   Float {- ^ scond -} ->+   Float {- ^ amax -} ->+   IO (Char)+laqsy uplo a s scond amax = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let sDim0 = Call.sizes1 $ Array.shape s+   let n = aDim0+   let lda = aDim1+   Call.assert "laqsy: n == sDim0" (n == sDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      sPtr <- Call.array s+      scondPtr <- Call.float scond+      amaxPtr <- Call.float amax+      equedPtr <- Call.alloca+      liftIO $ FFI.laqsy uploPtr nPtr aPtr ldaPtr sPtr scondPtr amaxPtr equedPtr+      liftIO $ fmap castCCharToChar (peek equedPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slaqtr.f>+laqtr ::+   Bool {- ^ ltran -} ->+   Bool {- ^ lreal -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ t -} ->+   Array ZeroInt Float {- ^ b -} ->+   Float {- ^ w -} ->+   IOArray ZeroInt Float {- ^ x -} ->+   IO (Float, Int)+laqtr ltran lreal t b w x = do+   let (tDim0,tDim1) = Call.sizes2 $ Array.shape t+   let bDim0 = Call.sizes1 $ Array.shape b+   let xDim0 = Call.sizes1 $ MutArray.shape x+   let n = tDim0+   let ldt = tDim1+   Call.assert "laqtr: n == bDim0" (n == bDim0)+   Call.assert "laqtr: 2*n == xDim0" (2*n == xDim0)+   work <- Call.newArray1 n+   evalContT $ do+      ltranPtr <- Call.bool ltran+      lrealPtr <- Call.bool lreal+      nPtr <- Call.cint n+      tPtr <- Call.array t+      ldtPtr <- Call.cint ldt+      bPtr <- Call.array b+      wPtr <- Call.float w+      scalePtr <- Call.alloca+      xPtr <- Call.ioarray x+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.laqtr ltranPtr lrealPtr nPtr tPtr ldtPtr bPtr wPtr scalePtr xPtr workPtr infoPtr+      liftIO $ pure (,)+         <*> peek scalePtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slar1v.f>+lar1v ::+   Int {- ^ b1 -} ->+   Int {- ^ bn -} ->+   Float {- ^ lambda -} ->+   Array ZeroInt Float {- ^ d -} ->+   Array ZeroInt Float {- ^ l -} ->+   Array ZeroInt Float {- ^ ld -} ->+   Array ZeroInt Float {- ^ lld -} ->+   Float {- ^ pivmin -} ->+   Float {- ^ gaptol -} ->+   IOArray ZeroInt Float {- ^ z -} ->+   Bool {- ^ wantnc -} ->+   Int {- ^ r -} ->+   IO (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)+lar1v b1 bn lambda d l ld lld pivmin gaptol z wantnc r = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let lDim0 = Call.sizes1 $ Array.shape l+   let ldDim0 = Call.sizes1 $ Array.shape ld+   let lldDim0 = Call.sizes1 $ Array.shape lld+   let zDim0 = Call.sizes1 $ MutArray.shape z+   let n = dDim0+   Call.assert "lar1v: n-1 == lDim0" (n-1 == lDim0)+   Call.assert "lar1v: n-1 == ldDim0" (n-1 == ldDim0)+   Call.assert "lar1v: n-1 == lldDim0" (n-1 == lldDim0)+   Call.assert "lar1v: n == zDim0" (n == zDim0)+   isuppz <- Call.newArray1 2+   work <- Call.newArray1 (4*n)+   evalContT $ do+      nPtr <- Call.cint n+      b1Ptr <- Call.cint b1+      bnPtr <- Call.cint bn+      lambdaPtr <- Call.float lambda+      dPtr <- Call.array d+      lPtr <- Call.array l+      ldPtr <- Call.array ld+      lldPtr <- Call.array lld+      pivminPtr <- Call.float pivmin+      gaptolPtr <- Call.float gaptol+      zPtr <- Call.ioarray z+      wantncPtr <- Call.bool wantnc+      negcntPtr <- Call.alloca+      ztzPtr <- Call.alloca+      mingmaPtr <- Call.alloca+      rPtr <- Call.cint r+      isuppzPtr <- Call.ioarray isuppz+      nrminvPtr <- Call.alloca+      residPtr <- Call.alloca+      rqcorrPtr <- Call.alloca+      workPtr <- Call.ioarray work+      liftIO $ FFI.lar1v nPtr b1Ptr bnPtr lambdaPtr dPtr lPtr ldPtr lldPtr pivminPtr gaptolPtr zPtr wantncPtr negcntPtr ztzPtr mingmaPtr rPtr isuppzPtr nrminvPtr residPtr rqcorrPtr workPtr+      liftIO $ pure (,,,,,,,)+         <*> fmap fromIntegral (peek negcntPtr)+         <*> peek ztzPtr+         <*> peek mingmaPtr+         <*> fmap fromIntegral (peek rPtr)+         <*> Call.freezeArray isuppz+         <*> peek nrminvPtr+         <*> peek residPtr+         <*> peek rqcorrPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slar2v.f>+lar2v ::+   Int {- ^ n -} ->+   IOArray ZeroInt Float {- ^ x -} ->+   IOArray ZeroInt Float {- ^ y -} ->+   IOArray ZeroInt Float {- ^ z -} ->+   Int {- ^ incx -} ->+   Array ZeroInt Float {- ^ c -} ->+   Array ZeroInt Float {- ^ s -} ->+   Int {- ^ incc -} ->+   IO ()+lar2v n x y z incx c s incc = do+   let xDim0 = Call.sizes1 $ MutArray.shape x+   let yDim0 = Call.sizes1 $ MutArray.shape y+   let zDim0 = Call.sizes1 $ MutArray.shape z+   let cDim0 = Call.sizes1 $ Array.shape c+   let sDim0 = Call.sizes1 $ Array.shape s+   let _xSize = xDim0+   let _ySize = yDim0+   let _zSize = zDim0+   Call.assert "lar2v: 1+(n-1)*incc == cDim0" (1+(n-1)*incc == cDim0)+   Call.assert "lar2v: 1+(n-1)*incc == sDim0" (1+(n-1)*incc == sDim0)+   evalContT $ do+      nPtr <- Call.cint n+      xPtr <- Call.ioarray x+      yPtr <- Call.ioarray y+      zPtr <- Call.ioarray z+      incxPtr <- Call.cint incx+      cPtr <- Call.array c+      sPtr <- Call.array s+      inccPtr <- Call.cint incc+      liftIO $ FFI.lar2v nPtr xPtr yPtr zPtr incxPtr cPtr sPtr inccPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slarf.f>+larf ::+   Char {- ^ side -} ->+   Int {- ^ m -} ->+   Array ZeroInt Float {- ^ v -} ->+   Int {- ^ incv -} ->+   Float {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ c -} ->+   Int {- ^ workSize -} ->+   IO ()+larf side m v incv tau c workSize = do+   let vDim0 = Call.sizes1 $ Array.shape v+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _vSize = vDim0+   let n = cDim0+   let ldc = cDim1+   work <- Call.newArray1 workSize+   evalContT $ do+      sidePtr <- Call.char side+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      vPtr <- Call.array v+      incvPtr <- Call.cint incv+      tauPtr <- Call.float tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      liftIO $ FFI.larf sidePtr mPtr nPtr vPtr incvPtr tauPtr cPtr ldcPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slarfb.f>+larfb ::+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Char {- ^ direct -} ->+   Char {- ^ storev -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ v -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ t -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ c -} ->+   Int {- ^ ldwork -} ->+   IO ()+larfb side trans direct storev m v t c ldwork = do+   let (vDim0,vDim1) = Call.sizes2 $ Array.shape v+   let (tDim0,tDim1) = Call.sizes2 $ Array.shape t+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _vSize = vDim0+   let ldv = vDim1+   let k = tDim0+   let ldt = tDim1+   let n = cDim0+   let ldc = cDim1+   work <- Call.newArray2 k ldwork+   evalContT $ do+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      directPtr <- Call.char direct+      storevPtr <- Call.char storev+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      vPtr <- Call.array v+      ldvPtr <- Call.cint ldv+      tPtr <- Call.array t+      ldtPtr <- Call.cint ldt+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      ldworkPtr <- Call.cint ldwork+      liftIO $ FFI.larfb sidePtr transPtr directPtr storevPtr mPtr nPtr kPtr vPtr ldvPtr tPtr ldtPtr cPtr ldcPtr workPtr ldworkPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slarfg.f>+larfg ::+   Int {- ^ n -} ->+   Float {- ^ alpha -} ->+   IOArray ZeroInt Float {- ^ x -} ->+   Int {- ^ incx -} ->+   IO (Float, Float)+larfg n alpha x incx = do+   let xDim0 = Call.sizes1 $ MutArray.shape x+   let _xSize = xDim0+   evalContT $ do+      nPtr <- Call.cint n+      alphaPtr <- Call.float alpha+      xPtr <- Call.ioarray x+      incxPtr <- Call.cint incx+      tauPtr <- Call.alloca+      liftIO $ FFI.larfg nPtr alphaPtr xPtr incxPtr tauPtr+      liftIO $ pure (,)+         <*> peek alphaPtr+         <*> peek tauPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slarfgp.f>+larfgp ::+   Int {- ^ n -} ->+   Float {- ^ alpha -} ->+   IOArray ZeroInt Float {- ^ x -} ->+   Int {- ^ incx -} ->+   IO (Float, Float)+larfgp n alpha x incx = do+   let xDim0 = Call.sizes1 $ MutArray.shape x+   let _xSize = xDim0+   evalContT $ do+      nPtr <- Call.cint n+      alphaPtr <- Call.float alpha+      xPtr <- Call.ioarray x+      incxPtr <- Call.cint incx+      tauPtr <- Call.alloca+      liftIO $ FFI.larfgp nPtr alphaPtr xPtr incxPtr tauPtr+      liftIO $ pure (,)+         <*> peek alphaPtr+         <*> peek tauPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slarft.f>+larft ::+   Char {- ^ direct -} ->+   Char {- ^ storev -} ->+   Int {- ^ n -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ v -} ->+   Array ZeroInt Float {- ^ tau -} ->+   Int {- ^ ldt -} ->+   IO (Array (ZeroInt,ZeroInt) Float)+larft direct storev n v tau ldt = do+   let (vDim0,vDim1) = Call.sizes2 $ Array.shape v+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let _vSize = vDim0+   let ldv = vDim1+   let k = tauDim0+   t <- Call.newArray2 k ldt+   evalContT $ do+      directPtr <- Call.char direct+      storevPtr <- Call.char storev+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      vPtr <- Call.array v+      ldvPtr <- Call.cint ldv+      tauPtr <- Call.array tau+      tPtr <- Call.ioarray t+      ldtPtr <- Call.cint ldt+      liftIO $ FFI.larft directPtr storevPtr nPtr kPtr vPtr ldvPtr tauPtr tPtr ldtPtr+      liftIO $ Call.freezeArray t++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slarfx.f>+larfx ::+   Char {- ^ side -} ->+   Int {- ^ m -} ->+   Array ZeroInt Float {- ^ v -} ->+   Float {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ c -} ->+   Int {- ^ workSize -} ->+   IO ()+larfx side m v tau c workSize = do+   let vDim0 = Call.sizes1 $ Array.shape v+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _vSize = vDim0+   let n = cDim0+   let ldc = cDim1+   work <- Call.newArray1 workSize+   evalContT $ do+      sidePtr <- Call.char side+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      vPtr <- Call.array v+      tauPtr <- Call.float tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      liftIO $ FFI.larfx sidePtr mPtr nPtr vPtr tauPtr cPtr ldcPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slargv.f>+largv ::+   Int {- ^ n -} ->+   IOArray ZeroInt Float {- ^ x -} ->+   Int {- ^ incx -} ->+   IOArray ZeroInt Float {- ^ y -} ->+   Int {- ^ incy -} ->+   Int {- ^ incc -} ->+   IO (Array ZeroInt Float)+largv n x incx y incy incc = do+   let xDim0 = Call.sizes1 $ MutArray.shape x+   let yDim0 = Call.sizes1 $ MutArray.shape y+   let _xSize = xDim0+   let _ySize = yDim0+   c <- Call.newArray1 (1+(n-1)*incc)+   evalContT $ do+      nPtr <- Call.cint n+      xPtr <- Call.ioarray x+      incxPtr <- Call.cint incx+      yPtr <- Call.ioarray y+      incyPtr <- Call.cint incy+      cPtr <- Call.ioarray c+      inccPtr <- Call.cint incc+      liftIO $ FFI.largv nPtr xPtr incxPtr yPtr incyPtr cPtr inccPtr+      liftIO $ Call.freezeArray c++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slarnv.f>+larnv ::+   Int {- ^ idist -} ->+   IOArray ZeroInt CInt {- ^ iseed -} ->+   Int {- ^ n -} ->+   IO (Array ZeroInt Float)+larnv idist iseed n = do+   let iseedDim0 = Call.sizes1 $ MutArray.shape iseed+   Call.assert "larnv: 4 == iseedDim0" (4 == iseedDim0)+   x <- Call.newArray1 n+   evalContT $ do+      idistPtr <- Call.cint idist+      iseedPtr <- Call.ioarray iseed+      nPtr <- Call.cint n+      xPtr <- Call.ioarray x+      liftIO $ FFI.larnv idistPtr iseedPtr nPtr xPtr+      liftIO $ Call.freezeArray x++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slarra.f>+larra ::+   Array ZeroInt Float {- ^ d -} ->+   IOArray ZeroInt Float {- ^ e -} ->+   IOArray ZeroInt Float {- ^ e2 -} ->+   Float {- ^ spltol -} ->+   Float {- ^ tnrm -} ->+   IO (Int, Array ZeroInt CInt, Int)+larra d e e2 spltol tnrm = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let e2Dim0 = Call.sizes1 $ MutArray.shape e2+   let n = dDim0+   Call.assert "larra: n == eDim0" (n == eDim0)+   Call.assert "larra: n == e2Dim0" (n == e2Dim0)+   isplit <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      dPtr <- Call.array d+      ePtr <- Call.ioarray e+      e2Ptr <- Call.ioarray e2+      spltolPtr <- Call.float spltol+      tnrmPtr <- Call.float tnrm+      nsplitPtr <- Call.alloca+      isplitPtr <- Call.ioarray isplit+      infoPtr <- Call.alloca+      liftIO $ FFI.larra nPtr dPtr ePtr e2Ptr spltolPtr tnrmPtr nsplitPtr isplitPtr infoPtr+      liftIO $ pure (,,)+         <*> fmap fromIntegral (peek nsplitPtr)+         <*> Call.freezeArray isplit+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slarrb.f>+larrb ::+   Array ZeroInt Float {- ^ d -} ->+   Array ZeroInt Float {- ^ lld -} ->+   Int {- ^ ifirst -} ->+   Int {- ^ ilast -} ->+   Float {- ^ rtol1 -} ->+   Float {- ^ rtol2 -} ->+   Int {- ^ offset -} ->+   IOArray ZeroInt Float {- ^ w -} ->+   IOArray ZeroInt Float {- ^ wgap -} ->+   IOArray ZeroInt Float {- ^ werr -} ->+   Float {- ^ pivmin -} ->+   Float {- ^ spdiam -} ->+   Int {- ^ twist -} ->+   IO (Int)+larrb d lld ifirst ilast rtol1 rtol2 offset w wgap werr pivmin spdiam twist = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let lldDim0 = Call.sizes1 $ Array.shape lld+   let wDim0 = Call.sizes1 $ MutArray.shape w+   let wgapDim0 = Call.sizes1 $ MutArray.shape wgap+   let werrDim0 = Call.sizes1 $ MutArray.shape werr+   let n = dDim0+   Call.assert "larrb: n-1 == lldDim0" (n-1 == lldDim0)+   Call.assert "larrb: n == wDim0" (n == wDim0)+   Call.assert "larrb: n-1 == wgapDim0" (n-1 == wgapDim0)+   Call.assert "larrb: n == werrDim0" (n == werrDim0)+   work <- Call.newArray1 (2*n)+   iwork <- Call.newArray1 (2*n)+   evalContT $ do+      nPtr <- Call.cint n+      dPtr <- Call.array d+      lldPtr <- Call.array lld+      ifirstPtr <- Call.cint ifirst+      ilastPtr <- Call.cint ilast+      rtol1Ptr <- Call.float rtol1+      rtol2Ptr <- Call.float rtol2+      offsetPtr <- Call.cint offset+      wPtr <- Call.ioarray w+      wgapPtr <- Call.ioarray wgap+      werrPtr <- Call.ioarray werr+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      pivminPtr <- Call.float pivmin+      spdiamPtr <- Call.float spdiam+      twistPtr <- Call.cint twist+      infoPtr <- Call.alloca+      liftIO $ FFI.larrb nPtr dPtr lldPtr ifirstPtr ilastPtr rtol1Ptr rtol2Ptr offsetPtr wPtr wgapPtr werrPtr workPtr iworkPtr pivminPtr spdiamPtr twistPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slarrc.f>+larrc ::+   Char {- ^ jobt -} ->+   Float {- ^ vl -} ->+   Float {- ^ vu -} ->+   Array ZeroInt Float {- ^ d -} ->+   Array ZeroInt Float {- ^ e -} ->+   Float {- ^ pivmin -} ->+   IO (Int, Int, Int, Int)+larrc jobt vl vu d e pivmin = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let eDim0 = Call.sizes1 $ Array.shape e+   let n = dDim0+   Call.assert "larrc: n == eDim0" (n == eDim0)+   evalContT $ do+      jobtPtr <- Call.char jobt+      nPtr <- Call.cint n+      vlPtr <- Call.float vl+      vuPtr <- Call.float vu+      dPtr <- Call.array d+      ePtr <- Call.array e+      pivminPtr <- Call.float pivmin+      eigcntPtr <- Call.alloca+      lcntPtr <- Call.alloca+      rcntPtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.larrc jobtPtr nPtr vlPtr vuPtr dPtr ePtr pivminPtr eigcntPtr lcntPtr rcntPtr infoPtr+      liftIO $ pure (,,,)+         <*> fmap fromIntegral (peek eigcntPtr)+         <*> fmap fromIntegral (peek lcntPtr)+         <*> fmap fromIntegral (peek rcntPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slarrd.f>+larrd ::+   Char {- ^ range -} ->+   Char {- ^ order -} ->+   Float {- ^ vl -} ->+   Float {- ^ vu -} ->+   Int {- ^ il -} ->+   Int {- ^ iu -} ->+   Array ZeroInt Float {- ^ gers -} ->+   Float {- ^ reltol -} ->+   Array ZeroInt Float {- ^ d -} ->+   Array ZeroInt Float {- ^ e -} ->+   Array ZeroInt Float {- ^ e2 -} ->+   Float {- ^ pivmin -} ->+   Int {- ^ nsplit -} ->+   Array ZeroInt CInt {- ^ isplit -} ->+   IO (Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float, Array ZeroInt CInt, Array ZeroInt CInt, Int)+larrd range order vl vu il iu gers reltol d e e2 pivmin nsplit isplit = do+   let gersDim0 = Call.sizes1 $ Array.shape gers+   let dDim0 = Call.sizes1 $ Array.shape d+   let eDim0 = Call.sizes1 $ Array.shape e+   let e2Dim0 = Call.sizes1 $ Array.shape e2+   let isplitDim0 = Call.sizes1 $ Array.shape isplit+   let n = dDim0+   Call.assert "larrd: 2*n == gersDim0" (2*n == gersDim0)+   Call.assert "larrd: n-1 == eDim0" (n-1 == eDim0)+   Call.assert "larrd: n-1 == e2Dim0" (n-1 == e2Dim0)+   Call.assert "larrd: n == isplitDim0" (n == isplitDim0)+   w <- Call.newArray1 n+   werr <- Call.newArray1 n+   iblock <- Call.newArray1 n+   indexw <- Call.newArray1 n+   work <- Call.newArray1 (4*n)+   iwork <- Call.newArray1 (3*n)+   evalContT $ do+      rangePtr <- Call.char range+      orderPtr <- Call.char order+      nPtr <- Call.cint n+      vlPtr <- Call.float vl+      vuPtr <- Call.float vu+      ilPtr <- Call.cint il+      iuPtr <- Call.cint iu+      gersPtr <- Call.array gers+      reltolPtr <- Call.float reltol+      dPtr <- Call.array d+      ePtr <- Call.array e+      e2Ptr <- Call.array e2+      pivminPtr <- Call.float pivmin+      nsplitPtr <- Call.cint nsplit+      isplitPtr <- Call.array isplit+      mPtr <- Call.alloca+      wPtr <- Call.ioarray w+      werrPtr <- Call.ioarray werr+      wlPtr <- Call.alloca+      wuPtr <- Call.alloca+      iblockPtr <- Call.ioarray iblock+      indexwPtr <- Call.ioarray indexw+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.larrd rangePtr orderPtr nPtr vlPtr vuPtr ilPtr iuPtr gersPtr reltolPtr dPtr ePtr e2Ptr pivminPtr nsplitPtr isplitPtr mPtr wPtr werrPtr wlPtr wuPtr iblockPtr indexwPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,,,,,,,)+         <*> fmap fromIntegral (peek mPtr)+         <*> Call.freezeArray w+         <*> Call.freezeArray werr+         <*> peek wlPtr+         <*> peek wuPtr+         <*> Call.freezeArray iblock+         <*> Call.freezeArray indexw+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slarre.f>+larre ::+   Char {- ^ range -} ->+   Float {- ^ vl -} ->+   Float {- ^ vu -} ->+   Int {- ^ il -} ->+   Int {- ^ iu -} ->+   IOArray ZeroInt Float {- ^ d -} ->+   IOArray ZeroInt Float {- ^ e -} ->+   IOArray ZeroInt Float {- ^ e2 -} ->+   Float {- ^ rtol1 -} ->+   Float {- ^ rtol2 -} ->+   Float {- ^ spltol -} ->+   IO (Float, Float, Int, Array ZeroInt CInt, Int, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Float, Float, Int)+larre range vl vu il iu d e e2 rtol1 rtol2 spltol = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let e2Dim0 = Call.sizes1 $ MutArray.shape e2+   let n = dDim0+   Call.assert "larre: n == eDim0" (n == eDim0)+   Call.assert "larre: n == e2Dim0" (n == e2Dim0)+   isplit <- Call.newArray1 n+   w <- Call.newArray1 n+   werr <- Call.newArray1 n+   wgap <- Call.newArray1 n+   iblock <- Call.newArray1 n+   indexw <- Call.newArray1 n+   gers <- Call.newArray1 (2*n)+   work <- Call.newArray1 (6*n)+   iwork <- Call.newArray1 (5*n)+   evalContT $ do+      rangePtr <- Call.char range+      nPtr <- Call.cint n+      vlPtr <- Call.float vl+      vuPtr <- Call.float vu+      ilPtr <- Call.cint il+      iuPtr <- Call.cint iu+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      e2Ptr <- Call.ioarray e2+      rtol1Ptr <- Call.float rtol1+      rtol2Ptr <- Call.float rtol2+      spltolPtr <- Call.float spltol+      nsplitPtr <- Call.alloca+      isplitPtr <- Call.ioarray isplit+      mPtr <- Call.alloca+      wPtr <- Call.ioarray w+      werrPtr <- Call.ioarray werr+      wgapPtr <- Call.ioarray wgap+      iblockPtr <- Call.ioarray iblock+      indexwPtr <- Call.ioarray indexw+      gersPtr <- Call.ioarray gers+      pivminPtr <- Call.alloca+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.larre rangePtr nPtr vlPtr vuPtr ilPtr iuPtr dPtr ePtr e2Ptr rtol1Ptr rtol2Ptr spltolPtr nsplitPtr isplitPtr mPtr wPtr werrPtr wgapPtr iblockPtr indexwPtr gersPtr pivminPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,,,,,,,,,,,,)+         <*> peek vlPtr+         <*> peek vuPtr+         <*> fmap fromIntegral (peek nsplitPtr)+         <*> Call.freezeArray isplit+         <*> fmap fromIntegral (peek mPtr)+         <*> Call.freezeArray w+         <*> Call.freezeArray werr+         <*> Call.freezeArray wgap+         <*> Call.freezeArray iblock+         <*> Call.freezeArray indexw+         <*> Call.freezeArray gers+         <*> peek pivminPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slarrf.f>+larrf ::+   Array ZeroInt Float {- ^ d -} ->+   Array ZeroInt Float {- ^ l -} ->+   Array ZeroInt Float {- ^ ld -} ->+   Int {- ^ clstrt -} ->+   Int {- ^ clend -} ->+   Array ZeroInt Float {- ^ w -} ->+   IOArray ZeroInt Float {- ^ wgap -} ->+   Array ZeroInt Float {- ^ werr -} ->+   Float {- ^ spdiam -} ->+   Float {- ^ clgapl -} ->+   Float {- ^ clgapr -} ->+   Float {- ^ pivmin -} ->+   IO (Float, Array ZeroInt Float, Array ZeroInt Float, Int)+larrf d l ld clstrt clend w wgap werr spdiam clgapl clgapr pivmin = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let lDim0 = Call.sizes1 $ Array.shape l+   let ldDim0 = Call.sizes1 $ Array.shape ld+   let wDim0 = Call.sizes1 $ Array.shape w+   let wgapDim0 = Call.sizes1 $ MutArray.shape wgap+   let werrDim0 = Call.sizes1 $ Array.shape werr+   let n = dDim0+   let _wSize = wDim0+   let _wgapSize = wgapDim0+   let _werrSize = werrDim0+   Call.assert "larrf: n-1 == lDim0" (n-1 == lDim0)+   Call.assert "larrf: n-1 == ldDim0" (n-1 == ldDim0)+   dplus <- Call.newArray1 n+   lplus <- Call.newArray1 (n-1)+   work <- Call.newArray1 (2*n)+   evalContT $ do+      nPtr <- Call.cint n+      dPtr <- Call.array d+      lPtr <- Call.array l+      ldPtr <- Call.array ld+      clstrtPtr <- Call.cint clstrt+      clendPtr <- Call.cint clend+      wPtr <- Call.array w+      wgapPtr <- Call.ioarray wgap+      werrPtr <- Call.array werr+      spdiamPtr <- Call.float spdiam+      clgaplPtr <- Call.float clgapl+      clgaprPtr <- Call.float clgapr+      pivminPtr <- Call.float pivmin+      sigmaPtr <- Call.alloca+      dplusPtr <- Call.ioarray dplus+      lplusPtr <- Call.ioarray lplus+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.larrf nPtr dPtr lPtr ldPtr clstrtPtr clendPtr wPtr wgapPtr werrPtr spdiamPtr clgaplPtr clgaprPtr pivminPtr sigmaPtr dplusPtr lplusPtr workPtr infoPtr+      liftIO $ pure (,,,)+         <*> peek sigmaPtr+         <*> Call.freezeArray dplus+         <*> Call.freezeArray lplus+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slarrj.f>+larrj ::+   Array ZeroInt Float {- ^ d -} ->+   Array ZeroInt Float {- ^ e2 -} ->+   Int {- ^ ifirst -} ->+   Int {- ^ ilast -} ->+   Float {- ^ rtol -} ->+   Int {- ^ offset -} ->+   IOArray ZeroInt Float {- ^ w -} ->+   IOArray ZeroInt Float {- ^ werr -} ->+   Float {- ^ pivmin -} ->+   Float {- ^ spdiam -} ->+   IO (Int)+larrj d e2 ifirst ilast rtol offset w werr pivmin spdiam = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let e2Dim0 = Call.sizes1 $ Array.shape e2+   let wDim0 = Call.sizes1 $ MutArray.shape w+   let werrDim0 = Call.sizes1 $ MutArray.shape werr+   let n = dDim0+   Call.assert "larrj: n-1 == e2Dim0" (n-1 == e2Dim0)+   Call.assert "larrj: n == wDim0" (n == wDim0)+   Call.assert "larrj: n == werrDim0" (n == werrDim0)+   work <- Call.newArray1 (2*n)+   iwork <- Call.newArray1 (2*n)+   evalContT $ do+      nPtr <- Call.cint n+      dPtr <- Call.array d+      e2Ptr <- Call.array e2+      ifirstPtr <- Call.cint ifirst+      ilastPtr <- Call.cint ilast+      rtolPtr <- Call.float rtol+      offsetPtr <- Call.cint offset+      wPtr <- Call.ioarray w+      werrPtr <- Call.ioarray werr+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      pivminPtr <- Call.float pivmin+      spdiamPtr <- Call.float spdiam+      infoPtr <- Call.alloca+      liftIO $ FFI.larrj nPtr dPtr e2Ptr ifirstPtr ilastPtr rtolPtr offsetPtr wPtr werrPtr workPtr iworkPtr pivminPtr spdiamPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slarrk.f>+larrk ::+   Int {- ^ iw -} ->+   Float {- ^ gl -} ->+   Float {- ^ gu -} ->+   Array ZeroInt Float {- ^ d -} ->+   Array ZeroInt Float {- ^ e2 -} ->+   Float {- ^ pivmin -} ->+   Float {- ^ reltol -} ->+   IO (Float, Float, Int)+larrk iw gl gu d e2 pivmin reltol = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let e2Dim0 = Call.sizes1 $ Array.shape e2+   let n = dDim0+   Call.assert "larrk: n-1 == e2Dim0" (n-1 == e2Dim0)+   evalContT $ do+      nPtr <- Call.cint n+      iwPtr <- Call.cint iw+      glPtr <- Call.float gl+      guPtr <- Call.float gu+      dPtr <- Call.array d+      e2Ptr <- Call.array e2+      pivminPtr <- Call.float pivmin+      reltolPtr <- Call.float reltol+      wPtr <- Call.alloca+      werrPtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.larrk nPtr iwPtr glPtr guPtr dPtr e2Ptr pivminPtr reltolPtr wPtr werrPtr infoPtr+      liftIO $ pure (,,)+         <*> peek wPtr+         <*> peek werrPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slarrr.f>+larrr ::+   Array ZeroInt Float {- ^ d -} ->+   IOArray ZeroInt Float {- ^ e -} ->+   IO (Int)+larrr d e = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let n = dDim0+   Call.assert "larrr: n == eDim0" (n == eDim0)+   evalContT $ do+      nPtr <- Call.cint n+      dPtr <- Call.array d+      ePtr <- Call.ioarray e+      infoPtr <- Call.alloca+      liftIO $ FFI.larrr nPtr dPtr ePtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slarrv.f>+larrv ::+   Float {- ^ vl -} ->+   Float {- ^ vu -} ->+   IOArray ZeroInt Float {- ^ d -} ->+   IOArray ZeroInt Float {- ^ l -} ->+   Float {- ^ pivmin -} ->+   Array ZeroInt CInt {- ^ isplit -} ->+   Int {- ^ m -} ->+   Int {- ^ dol -} ->+   Int {- ^ dou -} ->+   Float {- ^ minrgp -} ->+   Float {- ^ rtol1 -} ->+   Float {- ^ rtol2 -} ->+   IOArray ZeroInt Float {- ^ w -} ->+   IOArray ZeroInt Float {- ^ werr -} ->+   IOArray ZeroInt Float {- ^ wgap -} ->+   Array ZeroInt CInt {- ^ iblock -} ->+   Array ZeroInt CInt {- ^ indexw -} ->+   Array ZeroInt Float {- ^ gers -} ->+   Int {- ^ ldz -} ->+   IO (Array (ZeroInt,ZeroInt) Float, Array ZeroInt CInt, Int)+larrv vl vu d l pivmin isplit m dol dou minrgp rtol1 rtol2 w werr wgap iblock indexw gers ldz = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let lDim0 = Call.sizes1 $ MutArray.shape l+   let isplitDim0 = Call.sizes1 $ Array.shape isplit+   let wDim0 = Call.sizes1 $ MutArray.shape w+   let werrDim0 = Call.sizes1 $ MutArray.shape werr+   let wgapDim0 = Call.sizes1 $ MutArray.shape wgap+   let iblockDim0 = Call.sizes1 $ Array.shape iblock+   let indexwDim0 = Call.sizes1 $ Array.shape indexw+   let gersDim0 = Call.sizes1 $ Array.shape gers+   let n = dDim0+   Call.assert "larrv: n == lDim0" (n == lDim0)+   Call.assert "larrv: n == isplitDim0" (n == isplitDim0)+   Call.assert "larrv: n == wDim0" (n == wDim0)+   Call.assert "larrv: n == werrDim0" (n == werrDim0)+   Call.assert "larrv: n == wgapDim0" (n == wgapDim0)+   Call.assert "larrv: n == iblockDim0" (n == iblockDim0)+   Call.assert "larrv: n == indexwDim0" (n == indexwDim0)+   Call.assert "larrv: 2*n == gersDim0" (2*n == gersDim0)+   z <- Call.newArray2 (maximum[1,m]) ldz+   isuppz <- Call.newArray1 (2*maximum[1,m])+   work <- Call.newArray1 (12*n)+   iwork <- Call.newArray1 (7*n)+   evalContT $ do+      nPtr <- Call.cint n+      vlPtr <- Call.float vl+      vuPtr <- Call.float vu+      dPtr <- Call.ioarray d+      lPtr <- Call.ioarray l+      pivminPtr <- Call.float pivmin+      isplitPtr <- Call.array isplit+      mPtr <- Call.cint m+      dolPtr <- Call.cint dol+      douPtr <- Call.cint dou+      minrgpPtr <- Call.float minrgp+      rtol1Ptr <- Call.float rtol1+      rtol2Ptr <- Call.float rtol2+      wPtr <- Call.ioarray w+      werrPtr <- Call.ioarray werr+      wgapPtr <- Call.ioarray wgap+      iblockPtr <- Call.array iblock+      indexwPtr <- Call.array indexw+      gersPtr <- Call.array gers+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      isuppzPtr <- Call.ioarray isuppz+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.larrv nPtr vlPtr vuPtr dPtr lPtr pivminPtr isplitPtr mPtr dolPtr douPtr minrgpPtr rtol1Ptr rtol2Ptr wPtr werrPtr wgapPtr iblockPtr indexwPtr gersPtr zPtr ldzPtr isuppzPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray z+         <*> Call.freezeArray isuppz+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slartg.f>+lartg ::+   Float {- ^ f -} ->+   Float {- ^ g -} ->+   IO (Float, Float, Float)+lartg f g = do+   evalContT $ do+      fPtr <- Call.float f+      gPtr <- Call.float g+      csPtr <- Call.alloca+      snPtr <- Call.alloca+      rPtr <- Call.alloca+      liftIO $ FFI.lartg fPtr gPtr csPtr snPtr rPtr+      liftIO $ pure (,,)+         <*> peek csPtr+         <*> peek snPtr+         <*> peek rPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slartgp.f>+lartgp ::+   Float {- ^ f -} ->+   Float {- ^ g -} ->+   IO (Float, Float, Float)+lartgp f g = do+   evalContT $ do+      fPtr <- Call.float f+      gPtr <- Call.float g+      csPtr <- Call.alloca+      snPtr <- Call.alloca+      rPtr <- Call.alloca+      liftIO $ FFI.lartgp fPtr gPtr csPtr snPtr rPtr+      liftIO $ pure (,,)+         <*> peek csPtr+         <*> peek snPtr+         <*> peek rPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slartgs.f>+lartgs ::+   Float {- ^ x -} ->+   Float {- ^ y -} ->+   Float {- ^ sigma -} ->+   IO (Float, Float)+lartgs x y sigma = do+   evalContT $ do+      xPtr <- Call.float x+      yPtr <- Call.float y+      sigmaPtr <- Call.float sigma+      csPtr <- Call.alloca+      snPtr <- Call.alloca+      liftIO $ FFI.lartgs xPtr yPtr sigmaPtr csPtr snPtr+      liftIO $ pure (,)+         <*> peek csPtr+         <*> peek snPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slartv.f>+lartv ::+   Int {- ^ n -} ->+   IOArray ZeroInt Float {- ^ x -} ->+   Int {- ^ incx -} ->+   IOArray ZeroInt Float {- ^ y -} ->+   Int {- ^ incy -} ->+   Array ZeroInt Float {- ^ c -} ->+   Array ZeroInt Float {- ^ s -} ->+   Int {- ^ incc -} ->+   IO ()+lartv n x incx y incy c s incc = do+   let xDim0 = Call.sizes1 $ MutArray.shape x+   let yDim0 = Call.sizes1 $ MutArray.shape y+   let cDim0 = Call.sizes1 $ Array.shape c+   let sDim0 = Call.sizes1 $ Array.shape s+   let _xSize = xDim0+   let _ySize = yDim0+   Call.assert "lartv: 1+(n-1)*incc == cDim0" (1+(n-1)*incc == cDim0)+   Call.assert "lartv: 1+(n-1)*incc == sDim0" (1+(n-1)*incc == sDim0)+   evalContT $ do+      nPtr <- Call.cint n+      xPtr <- Call.ioarray x+      incxPtr <- Call.cint incx+      yPtr <- Call.ioarray y+      incyPtr <- Call.cint incy+      cPtr <- Call.array c+      sPtr <- Call.array s+      inccPtr <- Call.cint incc+      liftIO $ FFI.lartv nPtr xPtr incxPtr yPtr incyPtr cPtr sPtr inccPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slaruv.f>+laruv ::+   IOArray ZeroInt CInt {- ^ iseed -} ->+   Int {- ^ n -} ->+   IO (Array ZeroInt Float)+laruv iseed n = do+   let iseedDim0 = Call.sizes1 $ MutArray.shape iseed+   Call.assert "laruv: 4 == iseedDim0" (4 == iseedDim0)+   x <- Call.newArray1 n+   evalContT $ do+      iseedPtr <- Call.ioarray iseed+      nPtr <- Call.cint n+      xPtr <- Call.ioarray x+      liftIO $ FFI.laruv iseedPtr nPtr xPtr+      liftIO $ Call.freezeArray x++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slarz.f>+larz ::+   Char {- ^ side -} ->+   Int {- ^ m -} ->+   Int {- ^ l -} ->+   Array ZeroInt Float {- ^ v -} ->+   Int {- ^ incv -} ->+   Float {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ c -} ->+   Int {- ^ workSize -} ->+   IO ()+larz side m l v incv tau c workSize = do+   let vDim0 = Call.sizes1 $ Array.shape v+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let n = cDim0+   let ldc = cDim1+   Call.assert "larz: 1+(l-1)*abs(incv) == vDim0" (1+(l-1)*abs(incv) == vDim0)+   work <- Call.newArray1 workSize+   evalContT $ do+      sidePtr <- Call.char side+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      lPtr <- Call.cint l+      vPtr <- Call.array v+      incvPtr <- Call.cint incv+      tauPtr <- Call.float tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      liftIO $ FFI.larz sidePtr mPtr nPtr lPtr vPtr incvPtr tauPtr cPtr ldcPtr workPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slarzb.f>+larzb ::+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Char {- ^ direct -} ->+   Char {- ^ storev -} ->+   Int {- ^ m -} ->+   Int {- ^ l -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ v -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ t -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ c -} ->+   Int {- ^ ldwork -} ->+   IO ()+larzb side trans direct storev m l v t c ldwork = do+   let (vDim0,vDim1) = Call.sizes2 $ Array.shape v+   let (tDim0,tDim1) = Call.sizes2 $ Array.shape t+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _nv = vDim0+   let ldv = vDim1+   let k = tDim0+   let ldt = tDim1+   let n = cDim0+   let ldc = cDim1+   work <- Call.newArray2 k ldwork+   evalContT $ do+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      directPtr <- Call.char direct+      storevPtr <- Call.char storev+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      lPtr <- Call.cint l+      vPtr <- Call.array v+      ldvPtr <- Call.cint ldv+      tPtr <- Call.array t+      ldtPtr <- Call.cint ldt+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      ldworkPtr <- Call.cint ldwork+      liftIO $ FFI.larzb sidePtr transPtr directPtr storevPtr mPtr nPtr kPtr lPtr vPtr ldvPtr tPtr ldtPtr cPtr ldcPtr workPtr ldworkPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slarzt.f>+larzt ::+   Char {- ^ direct -} ->+   Char {- ^ storev -} ->+   Int {- ^ n -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ v -} ->+   Array ZeroInt Float {- ^ tau -} ->+   Int {- ^ ldt -} ->+   IO (Array (ZeroInt,ZeroInt) Float)+larzt direct storev n v tau ldt = do+   let (vDim0,vDim1) = Call.sizes2 $ MutArray.shape v+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let _vSize = vDim0+   let ldv = vDim1+   let k = tauDim0+   t <- Call.newArray2 k ldt+   evalContT $ do+      directPtr <- Call.char direct+      storevPtr <- Call.char storev+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      vPtr <- Call.ioarray v+      ldvPtr <- Call.cint ldv+      tauPtr <- Call.array tau+      tPtr <- Call.ioarray t+      ldtPtr <- Call.cint ldt+      liftIO $ FFI.larzt directPtr storevPtr nPtr kPtr vPtr ldvPtr tauPtr tPtr ldtPtr+      liftIO $ Call.freezeArray t++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slas2.f>+las2 ::+   Float {- ^ f -} ->+   Float {- ^ g -} ->+   Float {- ^ h -} ->+   IO (Float, Float)+las2 f g h = do+   evalContT $ do+      fPtr <- Call.float f+      gPtr <- Call.float g+      hPtr <- Call.float h+      ssminPtr <- Call.alloca+      ssmaxPtr <- Call.alloca+      liftIO $ FFI.las2 fPtr gPtr hPtr ssminPtr ssmaxPtr+      liftIO $ pure (,)+         <*> peek ssminPtr+         <*> peek ssmaxPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slascl.f>+lascl ::+   Char {- ^ type_ -} ->+   Int {- ^ kl -} ->+   Int {- ^ ku -} ->+   Float {- ^ cfrom -} ->+   Float {- ^ cto -} ->+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IO (Int)+lascl type_ kl ku cfrom cto m a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   evalContT $ do+      type_Ptr <- Call.char type_+      klPtr <- Call.cint kl+      kuPtr <- Call.cint ku+      cfromPtr <- Call.float cfrom+      ctoPtr <- Call.float cto+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      infoPtr <- Call.alloca+      liftIO $ FFI.lascl type_Ptr klPtr kuPtr cfromPtr ctoPtr mPtr nPtr aPtr ldaPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slasd0.f>+lasd0 ::+   Int {- ^ sqre -} ->+   IOArray ZeroInt Float {- ^ d -} ->+   IOArray ZeroInt Float {- ^ e -} ->+   Int {- ^ ldu -} ->+   Int {- ^ m -} ->+   Int {- ^ ldvt -} ->+   Int {- ^ smlsiz -} ->+   IO (Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Int)+lasd0 sqre d e ldu m ldvt smlsiz = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let n = dDim0+   Call.assert "lasd0: m-1 == eDim0" (m-1 == eDim0)+   u <- Call.newArray2 n ldu+   vt <- Call.newArray2 m ldvt+   iwork <- Call.newArray1 (8*n)+   work <- Call.newArray1 (3*m^!2+2*m)+   evalContT $ do+      nPtr <- Call.cint n+      sqrePtr <- Call.cint sqre+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      uPtr <- Call.ioarray u+      lduPtr <- Call.cint ldu+      vtPtr <- Call.ioarray vt+      ldvtPtr <- Call.cint ldvt+      smlsizPtr <- Call.cint smlsiz+      iworkPtr <- Call.ioarray iwork+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.lasd0 nPtr sqrePtr dPtr ePtr uPtr lduPtr vtPtr ldvtPtr smlsizPtr iworkPtr workPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray u+         <*> Call.freezeArray vt+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slasd1.f>+lasd1 ::+   Int {- ^ nl -} ->+   Int {- ^ nr -} ->+   Int {- ^ sqre -} ->+   IOArray ZeroInt Float {- ^ d -} ->+   Float {- ^ alpha -} ->+   Float {- ^ beta -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ u -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ vt -} ->+   IOArray ZeroInt CInt {- ^ idxq -} ->+   IO (Float, Float, Int)+lasd1 nl nr sqre d alpha beta u vt idxq = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let (uDim0,uDim1) = Call.sizes2 $ MutArray.shape u+   let (vtDim0,vtDim1) = Call.sizes2 $ MutArray.shape vt+   let idxqDim0 = Call.sizes1 $ MutArray.shape idxq+   let n = uDim0+   let ldu = uDim1+   let m = vtDim0+   let ldvt = vtDim1+   Call.assert "lasd1: nl+nr+1 == dDim0" (nl+nr+1 == dDim0)+   Call.assert "lasd1: n == idxqDim0" (n == idxqDim0)+   iwork <- Call.newArray1 (4*n)+   work <- Call.newArray1 (3*m^!2+2*m)+   evalContT $ do+      nlPtr <- Call.cint nl+      nrPtr <- Call.cint nr+      sqrePtr <- Call.cint sqre+      dPtr <- Call.ioarray d+      alphaPtr <- Call.float alpha+      betaPtr <- Call.float beta+      uPtr <- Call.ioarray u+      lduPtr <- Call.cint ldu+      vtPtr <- Call.ioarray vt+      ldvtPtr <- Call.cint ldvt+      idxqPtr <- Call.ioarray idxq+      iworkPtr <- Call.ioarray iwork+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.lasd1 nlPtr nrPtr sqrePtr dPtr alphaPtr betaPtr uPtr lduPtr vtPtr ldvtPtr idxqPtr iworkPtr workPtr infoPtr+      liftIO $ pure (,,)+         <*> peek alphaPtr+         <*> peek betaPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slasd2.f>+lasd2 ::+   Int {- ^ nl -} ->+   Int {- ^ nr -} ->+   Int {- ^ sqre -} ->+   IOArray ZeroInt Float {- ^ d -} ->+   Float {- ^ alpha -} ->+   Float {- ^ beta -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ u -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ vt -} ->+   Int {- ^ ldu2 -} ->+   Int {- ^ ldvt2 -} ->+   IOArray ZeroInt CInt {- ^ idxq -} ->+   IO (Int, Array ZeroInt Float, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int)+lasd2 nl nr sqre d alpha beta u vt ldu2 ldvt2 idxq = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let (uDim0,uDim1) = Call.sizes2 $ MutArray.shape u+   let (vtDim0,vtDim1) = Call.sizes2 $ MutArray.shape vt+   let idxqDim0 = Call.sizes1 $ MutArray.shape idxq+   let n = dDim0+   let ldu = uDim1+   let _m = vtDim0+   let ldvt = vtDim1+   Call.assert "lasd2: n == uDim0" (n == uDim0)+   Call.assert "lasd2: n == idxqDim0" (n == idxqDim0)+   z <- Call.newArray1 n+   dsigma <- Call.newArray1 n+   u2 <- Call.newArray2 n ldu2+   vt2 <- Call.newArray2 n ldvt2+   idxp <- Call.newArray1 n+   idx <- Call.newArray1 n+   idxc <- Call.newArray1 n+   coltyp <- Call.newArray1 n+   evalContT $ do+      nlPtr <- Call.cint nl+      nrPtr <- Call.cint nr+      sqrePtr <- Call.cint sqre+      kPtr <- Call.alloca+      dPtr <- Call.ioarray d+      zPtr <- Call.ioarray z+      alphaPtr <- Call.float alpha+      betaPtr <- Call.float beta+      uPtr <- Call.ioarray u+      lduPtr <- Call.cint ldu+      vtPtr <- Call.ioarray vt+      ldvtPtr <- Call.cint ldvt+      dsigmaPtr <- Call.ioarray dsigma+      u2Ptr <- Call.ioarray u2+      ldu2Ptr <- Call.cint ldu2+      vt2Ptr <- Call.ioarray vt2+      ldvt2Ptr <- Call.cint ldvt2+      idxpPtr <- Call.ioarray idxp+      idxPtr <- Call.ioarray idx+      idxcPtr <- Call.ioarray idxc+      idxqPtr <- Call.ioarray idxq+      coltypPtr <- Call.ioarray coltyp+      infoPtr <- Call.alloca+      liftIO $ FFI.lasd2 nlPtr nrPtr sqrePtr kPtr dPtr zPtr alphaPtr betaPtr uPtr lduPtr vtPtr ldvtPtr dsigmaPtr u2Ptr ldu2Ptr vt2Ptr ldvt2Ptr idxpPtr idxPtr idxcPtr idxqPtr coltypPtr infoPtr+      liftIO $ pure (,,,,,,,,,)+         <*> fmap fromIntegral (peek kPtr)+         <*> Call.freezeArray z+         <*> Call.freezeArray dsigma+         <*> Call.freezeArray u2+         <*> Call.freezeArray vt2+         <*> Call.freezeArray idxp+         <*> Call.freezeArray idx+         <*> Call.freezeArray idxc+         <*> Call.freezeArray coltyp+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slasd3.f>+lasd3 ::+   Int {- ^ nl -} ->+   Int {- ^ nr -} ->+   Int {- ^ sqre -} ->+   Int {- ^ ldq -} ->+   IOArray ZeroInt Float {- ^ dsigma -} ->+   Int {- ^ ldu -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ u2 -} ->+   Int {- ^ m -} ->+   Int {- ^ ldvt -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ vt2 -} ->+   Array ZeroInt CInt {- ^ idxc -} ->+   Array ZeroInt CInt {- ^ ctot -} ->+   IOArray ZeroInt Float {- ^ z -} ->+   IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Int)+lasd3 nl nr sqre ldq dsigma ldu u2 m ldvt vt2 idxc ctot z = do+   let dsigmaDim0 = Call.sizes1 $ MutArray.shape dsigma+   let (u2Dim0,u2Dim1) = Call.sizes2 $ Array.shape u2+   let (vt2Dim0,vt2Dim1) = Call.sizes2 $ MutArray.shape vt2+   let idxcDim0 = Call.sizes1 $ Array.shape idxc+   let ctotDim0 = Call.sizes1 $ Array.shape ctot+   let zDim0 = Call.sizes1 $ MutArray.shape z+   let k = dsigmaDim0+   let n = u2Dim0+   let ldu2 = u2Dim1+   let ldvt2 = vt2Dim1+   Call.assert "lasd3: n == vt2Dim0" (n == vt2Dim0)+   Call.assert "lasd3: n == idxcDim0" (n == idxcDim0)+   Call.assert "lasd3: 4 == ctotDim0" (4 == ctotDim0)+   Call.assert "lasd3: k == zDim0" (k == zDim0)+   d <- Call.newArray1 k+   q <- Call.newArray2 k ldq+   u <- Call.newArray2 n ldu+   vt <- Call.newArray2 m ldvt+   evalContT $ do+      nlPtr <- Call.cint nl+      nrPtr <- Call.cint nr+      sqrePtr <- Call.cint sqre+      kPtr <- Call.cint k+      dPtr <- Call.ioarray d+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      dsigmaPtr <- Call.ioarray dsigma+      uPtr <- Call.ioarray u+      lduPtr <- Call.cint ldu+      u2Ptr <- Call.array u2+      ldu2Ptr <- Call.cint ldu2+      vtPtr <- Call.ioarray vt+      ldvtPtr <- Call.cint ldvt+      vt2Ptr <- Call.ioarray vt2+      ldvt2Ptr <- Call.cint ldvt2+      idxcPtr <- Call.array idxc+      ctotPtr <- Call.array ctot+      zPtr <- Call.ioarray z+      infoPtr <- Call.alloca+      liftIO $ FFI.lasd3 nlPtr nrPtr sqrePtr kPtr dPtr qPtr ldqPtr dsigmaPtr uPtr lduPtr u2Ptr ldu2Ptr vtPtr ldvtPtr vt2Ptr ldvt2Ptr idxcPtr ctotPtr zPtr infoPtr+      liftIO $ pure (,,,,)+         <*> Call.freezeArray d+         <*> Call.freezeArray q+         <*> Call.freezeArray u+         <*> Call.freezeArray vt+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slasd4.f>+lasd4 ::+   Int {- ^ i -} ->+   Array ZeroInt Float {- ^ d -} ->+   Array ZeroInt Float {- ^ z -} ->+   Float {- ^ rho -} ->+   IO (Array ZeroInt Float, Float, Int)+lasd4 i d z rho = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let zDim0 = Call.sizes1 $ Array.shape z+   let n = dDim0+   Call.assert "lasd4: n == zDim0" (n == zDim0)+   delta <- Call.newArray1 n+   work <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      iPtr <- Call.cint i+      dPtr <- Call.array d+      zPtr <- Call.array z+      deltaPtr <- Call.ioarray delta+      rhoPtr <- Call.float rho+      sigmaPtr <- Call.alloca+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.lasd4 nPtr iPtr dPtr zPtr deltaPtr rhoPtr sigmaPtr workPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray delta+         <*> peek sigmaPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slasd5.f>+lasd5 ::+   Int {- ^ i -} ->+   Array ZeroInt Float {- ^ d -} ->+   Array ZeroInt Float {- ^ z -} ->+   Float {- ^ rho -} ->+   IO (Array ZeroInt Float, Float)+lasd5 i d z rho = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let zDim0 = Call.sizes1 $ Array.shape z+   Call.assert "lasd5: 2 == dDim0" (2 == dDim0)+   Call.assert "lasd5: 2 == zDim0" (2 == zDim0)+   delta <- Call.newArray1 2+   work <- Call.newArray1 2+   evalContT $ do+      iPtr <- Call.cint i+      dPtr <- Call.array d+      zPtr <- Call.array z+      deltaPtr <- Call.ioarray delta+      rhoPtr <- Call.float rho+      dsigmaPtr <- Call.alloca+      workPtr <- Call.ioarray work+      liftIO $ FFI.lasd5 iPtr dPtr zPtr deltaPtr rhoPtr dsigmaPtr workPtr+      liftIO $ pure (,)+         <*> Call.freezeArray delta+         <*> peek dsigmaPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slasd6.f>+lasd6 ::+   Int {- ^ icompq -} ->+   Int {- ^ nl -} ->+   Int {- ^ nr -} ->+   Int {- ^ sqre -} ->+   IOArray ZeroInt Float {- ^ d -} ->+   IOArray ZeroInt Float {- ^ vf -} ->+   IOArray ZeroInt Float {- ^ vl -} ->+   Float {- ^ alpha -} ->+   Float {- ^ beta -} ->+   IOArray ZeroInt CInt {- ^ idxq -} ->+   Int {- ^ ldgcol -} ->+   Int {- ^ ldgnum -} ->+   Int {- ^ difrSize -} ->+   IO (Float, Float, Array ZeroInt CInt, Int, Array (ZeroInt,ZeroInt) CInt, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)+lasd6 icompq nl nr sqre d vf vl alpha beta idxq ldgcol ldgnum difrSize = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let vfDim0 = Call.sizes1 $ MutArray.shape vf+   let vlDim0 = Call.sizes1 $ MutArray.shape vl+   let idxqDim0 = Call.sizes1 $ MutArray.shape idxq+   let m = vfDim0+   let n = idxqDim0+   Call.assert "lasd6: nl+nr+1 == dDim0" (nl+nr+1 == dDim0)+   Call.assert "lasd6: m == vlDim0" (m == vlDim0)+   perm <- Call.newArray1 n+   givcol <- Call.newArray2 2 ldgcol+   givnum <- Call.newArray2 2 ldgnum+   poles <- Call.newArray2 2 ldgnum+   difl <- Call.newArray1 n+   difr <- Call.newArray1 difrSize+   z <- Call.newArray1 m+   work <- Call.newArray1 (4*m)+   iwork <- Call.newArray1 (3*n)+   evalContT $ do+      icompqPtr <- Call.cint icompq+      nlPtr <- Call.cint nl+      nrPtr <- Call.cint nr+      sqrePtr <- Call.cint sqre+      dPtr <- Call.ioarray d+      vfPtr <- Call.ioarray vf+      vlPtr <- Call.ioarray vl+      alphaPtr <- Call.float alpha+      betaPtr <- Call.float beta+      idxqPtr <- Call.ioarray idxq+      permPtr <- Call.ioarray perm+      givptrPtr <- Call.alloca+      givcolPtr <- Call.ioarray givcol+      ldgcolPtr <- Call.cint ldgcol+      givnumPtr <- Call.ioarray givnum+      ldgnumPtr <- Call.cint ldgnum+      polesPtr <- Call.ioarray poles+      diflPtr <- Call.ioarray difl+      difrPtr <- Call.ioarray difr+      zPtr <- Call.ioarray z+      kPtr <- Call.alloca+      cPtr <- Call.alloca+      sPtr <- Call.alloca+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.lasd6 icompqPtr nlPtr nrPtr sqrePtr dPtr vfPtr vlPtr alphaPtr betaPtr idxqPtr permPtr givptrPtr givcolPtr ldgcolPtr givnumPtr ldgnumPtr polesPtr diflPtr difrPtr zPtr kPtr cPtr sPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,,,,,,,,,,,,,)+         <*> peek alphaPtr+         <*> peek betaPtr+         <*> Call.freezeArray perm+         <*> fmap fromIntegral (peek givptrPtr)+         <*> Call.freezeArray givcol+         <*> Call.freezeArray givnum+         <*> Call.freezeArray poles+         <*> Call.freezeArray difl+         <*> Call.freezeArray difr+         <*> Call.freezeArray z+         <*> fmap fromIntegral (peek kPtr)+         <*> peek cPtr+         <*> peek sPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slasd7.f>+lasd7 ::+   Int {- ^ icompq -} ->+   Int {- ^ nl -} ->+   Int {- ^ nr -} ->+   Int {- ^ sqre -} ->+   IOArray ZeroInt Float {- ^ d -} ->+   IOArray ZeroInt Float {- ^ vf -} ->+   IOArray ZeroInt Float {- ^ vl -} ->+   Float {- ^ alpha -} ->+   Float {- ^ beta -} ->+   Array ZeroInt CInt {- ^ idxq -} ->+   Int {- ^ ldgcol -} ->+   Int {- ^ ldgnum -} ->+   IO (Int, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int, Array (ZeroInt,ZeroInt) CInt, Array (ZeroInt,ZeroInt) Float, Float, Float, Int)+lasd7 icompq nl nr sqre d vf vl alpha beta idxq ldgcol ldgnum = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let vfDim0 = Call.sizes1 $ MutArray.shape vf+   let vlDim0 = Call.sizes1 $ MutArray.shape vl+   let idxqDim0 = Call.sizes1 $ Array.shape idxq+   let n = dDim0+   let m = vfDim0+   Call.assert "lasd7: m == vlDim0" (m == vlDim0)+   Call.assert "lasd7: n == idxqDim0" (n == idxqDim0)+   z <- Call.newArray1 m+   zw <- Call.newArray1 m+   vfw <- Call.newArray1 m+   vlw <- Call.newArray1 m+   dsigma <- Call.newArray1 n+   idx <- Call.newArray1 n+   idxp <- Call.newArray1 n+   perm <- Call.newArray1 n+   givcol <- Call.newArray2 2 ldgcol+   givnum <- Call.newArray2 2 ldgnum+   evalContT $ do+      icompqPtr <- Call.cint icompq+      nlPtr <- Call.cint nl+      nrPtr <- Call.cint nr+      sqrePtr <- Call.cint sqre+      kPtr <- Call.alloca+      dPtr <- Call.ioarray d+      zPtr <- Call.ioarray z+      zwPtr <- Call.ioarray zw+      vfPtr <- Call.ioarray vf+      vfwPtr <- Call.ioarray vfw+      vlPtr <- Call.ioarray vl+      vlwPtr <- Call.ioarray vlw+      alphaPtr <- Call.float alpha+      betaPtr <- Call.float beta+      dsigmaPtr <- Call.ioarray dsigma+      idxPtr <- Call.ioarray idx+      idxpPtr <- Call.ioarray idxp+      idxqPtr <- Call.array idxq+      permPtr <- Call.ioarray perm+      givptrPtr <- Call.alloca+      givcolPtr <- Call.ioarray givcol+      ldgcolPtr <- Call.cint ldgcol+      givnumPtr <- Call.ioarray givnum+      ldgnumPtr <- Call.cint ldgnum+      cPtr <- Call.alloca+      sPtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.lasd7 icompqPtr nlPtr nrPtr sqrePtr kPtr dPtr zPtr zwPtr vfPtr vfwPtr vlPtr vlwPtr alphaPtr betaPtr dsigmaPtr idxPtr idxpPtr idxqPtr permPtr givptrPtr givcolPtr ldgcolPtr givnumPtr ldgnumPtr cPtr sPtr infoPtr+      liftIO $ pure (,,,,,,,,,,,,,,)+         <*> fmap fromIntegral (peek kPtr)+         <*> Call.freezeArray z+         <*> Call.freezeArray zw+         <*> Call.freezeArray vfw+         <*> Call.freezeArray vlw+         <*> Call.freezeArray dsigma+         <*> Call.freezeArray idx+         <*> Call.freezeArray idxp+         <*> Call.freezeArray perm+         <*> fmap fromIntegral (peek givptrPtr)+         <*> Call.freezeArray givcol+         <*> Call.freezeArray givnum+         <*> peek cPtr+         <*> peek sPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slasd8.f>+lasd8 ::+   Int {- ^ icompq -} ->+   IOArray ZeroInt Float {- ^ z -} ->+   IOArray ZeroInt Float {- ^ vf -} ->+   IOArray ZeroInt Float {- ^ vl -} ->+   Int {- ^ difrSize -} ->+   Int {- ^ lddifr -} ->+   IOArray ZeroInt Float {- ^ dsigma -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Int)+lasd8 icompq z vf vl difrSize lddifr dsigma = do+   let zDim0 = Call.sizes1 $ MutArray.shape z+   let vfDim0 = Call.sizes1 $ MutArray.shape vf+   let vlDim0 = Call.sizes1 $ MutArray.shape vl+   let dsigmaDim0 = Call.sizes1 $ MutArray.shape dsigma+   let k = zDim0+   Call.assert "lasd8: k == vfDim0" (k == vfDim0)+   Call.assert "lasd8: k == vlDim0" (k == vlDim0)+   Call.assert "lasd8: k == dsigmaDim0" (k == dsigmaDim0)+   d <- Call.newArray1 k+   difl <- Call.newArray1 k+   difr <- Call.newArray2 difrSize lddifr+   work <- Call.newArray1 (3*k)+   evalContT $ do+      icompqPtr <- Call.cint icompq+      kPtr <- Call.cint k+      dPtr <- Call.ioarray d+      zPtr <- Call.ioarray z+      vfPtr <- Call.ioarray vf+      vlPtr <- Call.ioarray vl+      diflPtr <- Call.ioarray difl+      difrPtr <- Call.ioarray difr+      lddifrPtr <- Call.cint lddifr+      dsigmaPtr <- Call.ioarray dsigma+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.lasd8 icompqPtr kPtr dPtr zPtr vfPtr vlPtr diflPtr difrPtr lddifrPtr dsigmaPtr workPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray d+         <*> Call.freezeArray difl+         <*> Call.freezeArray difr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slasda.f>+lasda ::+   Int {- ^ icompq -} ->+   Int {- ^ smlsiz -} ->+   Int {- ^ sqre -} ->+   IOArray ZeroInt Float {- ^ d -} ->+   Array ZeroInt Float {- ^ e -} ->+   Int {- ^ uSize -} ->+   Int {- ^ ldu -} ->+   Int {- ^ vtSize -} ->+   Int {- ^ kSize -} ->+   Int {- ^ nlvl -} ->+   Int {- ^ difrSize -} ->+   Int {- ^ zSize -} ->+   Int {- ^ polesSize -} ->+   Int {- ^ givptrSize -} ->+   Int {- ^ givcolSize -} ->+   Int {- ^ ldgcol -} ->+   Int {- ^ permSize -} ->+   Int {- ^ givnumSize -} ->+   Int {- ^ cSize -} ->+   Int {- ^ sSize -} ->+   Int {- ^ workSize -} ->+   IO (Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Array ZeroInt CInt, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Array ZeroInt CInt, Array (ZeroInt,ZeroInt) CInt, Array (ZeroInt,ZeroInt) CInt, Array (ZeroInt,ZeroInt) Float, Array ZeroInt Float, Array ZeroInt Float, Int)+lasda icompq smlsiz sqre d e uSize ldu vtSize kSize nlvl difrSize zSize polesSize givptrSize givcolSize ldgcol permSize givnumSize cSize sSize workSize = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ Array.shape e+   let n = dDim0+   Call.ignore "lasda: m-1 == eDim0" eDim0+   u <- Call.newArray2 uSize ldu+   vt <- Call.newArray2 vtSize ldu+   k <- Call.newArray1 kSize+   difl <- Call.newArray2 nlvl ldu+   difr <- Call.newArray2 difrSize ldu+   z <- Call.newArray2 zSize ldu+   poles <- Call.newArray2 polesSize ldu+   givptr <- Call.newArray1 givptrSize+   givcol <- Call.newArray2 givcolSize ldgcol+   perm <- Call.newArray2 permSize ldgcol+   givnum <- Call.newArray2 givnumSize ldu+   c <- Call.newArray1 cSize+   s <- Call.newArray1 sSize+   work <- Call.newArray1 workSize+   iwork <- Call.newArray1 (7*n)+   evalContT $ do+      icompqPtr <- Call.cint icompq+      smlsizPtr <- Call.cint smlsiz+      nPtr <- Call.cint n+      sqrePtr <- Call.cint sqre+      dPtr <- Call.ioarray d+      ePtr <- Call.array e+      uPtr <- Call.ioarray u+      lduPtr <- Call.cint ldu+      vtPtr <- Call.ioarray vt+      kPtr <- Call.ioarray k+      diflPtr <- Call.ioarray difl+      difrPtr <- Call.ioarray difr+      zPtr <- Call.ioarray z+      polesPtr <- Call.ioarray poles+      givptrPtr <- Call.ioarray givptr+      givcolPtr <- Call.ioarray givcol+      ldgcolPtr <- Call.cint ldgcol+      permPtr <- Call.ioarray perm+      givnumPtr <- Call.ioarray givnum+      cPtr <- Call.ioarray c+      sPtr <- Call.ioarray s+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.lasda icompqPtr smlsizPtr nPtr sqrePtr dPtr ePtr uPtr lduPtr vtPtr kPtr diflPtr difrPtr zPtr polesPtr givptrPtr givcolPtr ldgcolPtr permPtr givnumPtr cPtr sPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,,,,,,,,,,,,,)+         <*> Call.freezeArray u+         <*> Call.freezeArray vt+         <*> Call.freezeArray k+         <*> Call.freezeArray difl+         <*> Call.freezeArray difr+         <*> Call.freezeArray z+         <*> Call.freezeArray poles+         <*> Call.freezeArray givptr+         <*> Call.freezeArray givcol+         <*> Call.freezeArray perm+         <*> Call.freezeArray givnum+         <*> Call.freezeArray c+         <*> Call.freezeArray s+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slasdq.f>+lasdq ::+   Char {- ^ uplo -} ->+   Int {- ^ sqre -} ->+   Int {- ^ nru -} ->+   IOArray ZeroInt Float {- ^ d -} ->+   IOArray ZeroInt Float {- ^ e -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ vt -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ u -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ c -} ->+   IO (Int)+lasdq uplo sqre nru d e vt u c = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let (vtDim0,vtDim1) = Call.sizes2 $ MutArray.shape vt+   let (uDim0,uDim1) = Call.sizes2 $ MutArray.shape u+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let n = dDim0+   let ncvt = vtDim0+   let ldvt = vtDim1+   let ldu = uDim1+   let ncc = cDim0+   let ldc = cDim1+   Call.assert "lasdq: n-1+sqre == eDim0" (n-1+sqre == eDim0)+   Call.assert "lasdq: n == uDim0" (n == uDim0)+   work <- Call.newArray1 (4*n)+   evalContT $ do+      uploPtr <- Call.char uplo+      sqrePtr <- Call.cint sqre+      nPtr <- Call.cint n+      ncvtPtr <- Call.cint ncvt+      nruPtr <- Call.cint nru+      nccPtr <- Call.cint ncc+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      vtPtr <- Call.ioarray vt+      ldvtPtr <- Call.cint ldvt+      uPtr <- Call.ioarray u+      lduPtr <- Call.cint ldu+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.lasdq uploPtr sqrePtr nPtr ncvtPtr nruPtr nccPtr dPtr ePtr vtPtr ldvtPtr uPtr lduPtr cPtr ldcPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slasdt.f>+lasdt ::+   Int {- ^ n -} ->+   Int {- ^ msub -} ->+   IO (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt)+lasdt n msub = do+   inode <- Call.newArray1 n+   ndiml <- Call.newArray1 n+   ndimr <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      lvlPtr <- Call.alloca+      ndPtr <- Call.alloca+      inodePtr <- Call.ioarray inode+      ndimlPtr <- Call.ioarray ndiml+      ndimrPtr <- Call.ioarray ndimr+      msubPtr <- Call.cint msub+      liftIO $ FFI.lasdt nPtr lvlPtr ndPtr inodePtr ndimlPtr ndimrPtr msubPtr+      liftIO $ pure (,,,,)+         <*> fmap fromIntegral (peek lvlPtr)+         <*> fmap fromIntegral (peek ndPtr)+         <*> Call.freezeArray inode+         <*> Call.freezeArray ndiml+         <*> Call.freezeArray ndimr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slaset.f>+laset ::+   Char {- ^ uplo -} ->+   Int {- ^ m -} ->+   Int {- ^ n -} ->+   Float {- ^ alpha -} ->+   Float {- ^ beta -} ->+   Int {- ^ lda -} ->+   IO (Array (ZeroInt,ZeroInt) Float)+laset uplo m n alpha beta lda = do+   a <- Call.newArray2 n lda+   evalContT $ do+      uploPtr <- Call.char uplo+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      alphaPtr <- Call.float alpha+      betaPtr <- Call.float beta+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      liftIO $ FFI.laset uploPtr mPtr nPtr alphaPtr betaPtr aPtr ldaPtr+      liftIO $ Call.freezeArray a++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slasq1.f>+lasq1 ::+   IOArray ZeroInt Float {- ^ d -} ->+   IOArray ZeroInt Float {- ^ e -} ->+   IO (Int)+lasq1 d e = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let n = dDim0+   Call.assert "lasq1: n == eDim0" (n == eDim0)+   work <- Call.newArray1 (4*n)+   evalContT $ do+      nPtr <- Call.cint n+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.lasq1 nPtr dPtr ePtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slasq2.f>+lasq2 ::+   Int {- ^ n -} ->+   IOArray ZeroInt Float {- ^ z -} ->+   IO (Int)+lasq2 n z = do+   let zDim0 = Call.sizes1 $ MutArray.shape z+   Call.assert "lasq2: 4*n == zDim0" (4*n == zDim0)+   evalContT $ do+      nPtr <- Call.cint n+      zPtr <- Call.ioarray z+      infoPtr <- Call.alloca+      liftIO $ FFI.lasq2 nPtr zPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slasq4.f>+lasq4 ::+   Int {- ^ i0 -} ->+   Int {- ^ n0 -} ->+   Array ZeroInt Float {- ^ z -} ->+   Int {- ^ pp -} ->+   Int {- ^ n0in -} ->+   Float {- ^ dmin -} ->+   Float {- ^ dmin1 -} ->+   Float {- ^ dmin2 -} ->+   Float {- ^ dn -} ->+   Float {- ^ dn1 -} ->+   Float {- ^ dn2 -} ->+   Float {- ^ g -} ->+   IO (Float, Int, Float)+lasq4 i0 n0 z pp n0in dmin dmin1 dmin2 dn dn1 dn2 g = do+   let zDim0 = Call.sizes1 $ Array.shape z+   Call.assert "lasq4: 4*n0 == zDim0" (4*n0 == zDim0)+   evalContT $ do+      i0Ptr <- Call.cint i0+      n0Ptr <- Call.cint n0+      zPtr <- Call.array z+      ppPtr <- Call.cint pp+      n0inPtr <- Call.cint n0in+      dminPtr <- Call.float dmin+      dmin1Ptr <- Call.float dmin1+      dmin2Ptr <- Call.float dmin2+      dnPtr <- Call.float dn+      dn1Ptr <- Call.float dn1+      dn2Ptr <- Call.float dn2+      tauPtr <- Call.alloca+      ttypePtr <- Call.alloca+      gPtr <- Call.float g+      liftIO $ FFI.lasq4 i0Ptr n0Ptr zPtr ppPtr n0inPtr dminPtr dmin1Ptr dmin2Ptr dnPtr dn1Ptr dn2Ptr tauPtr ttypePtr gPtr+      liftIO $ pure (,,)+         <*> peek tauPtr+         <*> fmap fromIntegral (peek ttypePtr)+         <*> peek gPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slasq5.f>+lasq5 ::+   Int {- ^ i0 -} ->+   Int {- ^ n0 -} ->+   Array ZeroInt Float {- ^ z -} ->+   Int {- ^ pp -} ->+   Float {- ^ tau -} ->+   Float {- ^ sigma -} ->+   Bool {- ^ ieee -} ->+   Float {- ^ eps -} ->+   IO (Float, Float, Float, Float, Float, Float)+lasq5 i0 n0 z pp tau sigma ieee eps = do+   let zDim0 = Call.sizes1 $ Array.shape z+   Call.ignore "lasq5: 4*n == zDim0" zDim0+   evalContT $ do+      i0Ptr <- Call.cint i0+      n0Ptr <- Call.cint n0+      zPtr <- Call.array z+      ppPtr <- Call.cint pp+      tauPtr <- Call.float tau+      sigmaPtr <- Call.float sigma+      dminPtr <- Call.alloca+      dmin1Ptr <- Call.alloca+      dmin2Ptr <- Call.alloca+      dnPtr <- Call.alloca+      dnm1Ptr <- Call.alloca+      dnm2Ptr <- Call.alloca+      ieeePtr <- Call.bool ieee+      epsPtr <- Call.float eps+      liftIO $ FFI.lasq5 i0Ptr n0Ptr zPtr ppPtr tauPtr sigmaPtr dminPtr dmin1Ptr dmin2Ptr dnPtr dnm1Ptr dnm2Ptr ieeePtr epsPtr+      liftIO $ pure (,,,,,)+         <*> peek dminPtr+         <*> peek dmin1Ptr+         <*> peek dmin2Ptr+         <*> peek dnPtr+         <*> peek dnm1Ptr+         <*> peek dnm2Ptr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slasq6.f>+lasq6 ::+   Int {- ^ i0 -} ->+   Int {- ^ n0 -} ->+   Array ZeroInt Float {- ^ z -} ->+   Int {- ^ pp -} ->+   IO (Float, Float, Float, Float, Float, Float)+lasq6 i0 n0 z pp = do+   let zDim0 = Call.sizes1 $ Array.shape z+   Call.ignore "lasq6: 4*n == zDim0" zDim0+   evalContT $ do+      i0Ptr <- Call.cint i0+      n0Ptr <- Call.cint n0+      zPtr <- Call.array z+      ppPtr <- Call.cint pp+      dminPtr <- Call.alloca+      dmin1Ptr <- Call.alloca+      dmin2Ptr <- Call.alloca+      dnPtr <- Call.alloca+      dnm1Ptr <- Call.alloca+      dnm2Ptr <- Call.alloca+      liftIO $ FFI.lasq6 i0Ptr n0Ptr zPtr ppPtr dminPtr dmin1Ptr dmin2Ptr dnPtr dnm1Ptr dnm2Ptr+      liftIO $ pure (,,,,,)+         <*> peek dminPtr+         <*> peek dmin1Ptr+         <*> peek dmin2Ptr+         <*> peek dnPtr+         <*> peek dnm1Ptr+         <*> peek dnm2Ptr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slasr.f>+lasr ::+   Char {- ^ side -} ->+   Char {- ^ pivot -} ->+   Char {- ^ direct -} ->+   Int {- ^ m -} ->+   Array ZeroInt Float {- ^ c -} ->+   Array ZeroInt Float {- ^ s -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IO ()+lasr side pivot direct m c s a = do+   let cDim0 = Call.sizes1 $ Array.shape c+   let sDim0 = Call.sizes1 $ Array.shape s+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let _cSize = cDim0+   let _sSize = sDim0+   let n = aDim0+   let lda = aDim1+   evalContT $ do+      sidePtr <- Call.char side+      pivotPtr <- Call.char pivot+      directPtr <- Call.char direct+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      cPtr <- Call.array c+      sPtr <- Call.array s+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      liftIO $ FFI.lasr sidePtr pivotPtr directPtr mPtr nPtr cPtr sPtr aPtr ldaPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slasrt.f>+lasrt ::+   Char {- ^ id_ -} ->+   IOArray ZeroInt Float {- ^ d -} ->+   IO (Int)+lasrt id_ d = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let n = dDim0+   evalContT $ do+      id_Ptr <- Call.char id_+      nPtr <- Call.cint n+      dPtr <- Call.ioarray d+      infoPtr <- Call.alloca+      liftIO $ FFI.lasrt id_Ptr nPtr dPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slassq.f>+lassq ::+   Array ZeroInt Float {- ^ x -} ->+   Int {- ^ incx -} ->+   Float {- ^ scale -} ->+   Float {- ^ sumsq -} ->+   IO (Float, Float)+lassq x incx scale sumsq = do+   let xDim0 = Call.sizes1 $ Array.shape x+   let n = xDim0+   evalContT $ do+      nPtr <- Call.cint n+      xPtr <- Call.array x+      incxPtr <- Call.cint incx+      scalePtr <- Call.float scale+      sumsqPtr <- Call.float sumsq+      liftIO $ FFI.lassq nPtr xPtr incxPtr scalePtr sumsqPtr+      liftIO $ pure (,)+         <*> peek scalePtr+         <*> peek sumsqPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slasv2.f>+lasv2 ::+   Float {- ^ f -} ->+   Float {- ^ g -} ->+   Float {- ^ h -} ->+   IO (Float, Float, Float, Float, Float, Float)+lasv2 f g h = do+   evalContT $ do+      fPtr <- Call.float f+      gPtr <- Call.float g+      hPtr <- Call.float h+      ssminPtr <- Call.alloca+      ssmaxPtr <- Call.alloca+      snrPtr <- Call.alloca+      csrPtr <- Call.alloca+      snlPtr <- Call.alloca+      cslPtr <- Call.alloca+      liftIO $ FFI.lasv2 fPtr gPtr hPtr ssminPtr ssmaxPtr snrPtr csrPtr snlPtr cslPtr+      liftIO $ pure (,,,,,)+         <*> peek ssminPtr+         <*> peek ssmaxPtr+         <*> peek snrPtr+         <*> peek csrPtr+         <*> peek snlPtr+         <*> peek cslPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slaswp.f>+laswp ::+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Int {- ^ k1 -} ->+   Int {- ^ k2 -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Int {- ^ incx -} ->+   IO ()+laswp a k1 k2 ipiv incx = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = aDim0+   let lda = aDim1+   Call.assert "laswp: k1+(k2-k1)*abs(incx) == ipivDim0" (k1+(k2-k1)*abs(incx) == ipivDim0)+   evalContT $ do+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      k1Ptr <- Call.cint k1+      k2Ptr <- Call.cint k2+      ipivPtr <- Call.array ipiv+      incxPtr <- Call.cint incx+      liftIO $ FFI.laswp nPtr aPtr ldaPtr k1Ptr k2Ptr ipivPtr incxPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slasy2.f>+lasy2 ::+   Bool {- ^ ltranl -} ->+   Bool {- ^ ltranr -} ->+   Int {- ^ isgn -} ->+   Int {- ^ n1 -} ->+   Int {- ^ n2 -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ tl -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ tr -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ b -} ->+   Int {- ^ ldx -} ->+   IO (Float, Array (ZeroInt,ZeroInt) Float, Float, Int)+lasy2 ltranl ltranr isgn n1 n2 tl tr b ldx = do+   let (tlDim0,tlDim1) = Call.sizes2 $ Array.shape tl+   let (trDim0,trDim1) = Call.sizes2 $ Array.shape tr+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let ldtl = tlDim1+   let ldtr = trDim1+   let ldb = bDim1+   Call.assert "lasy2: 2 == tlDim0" (2 == tlDim0)+   Call.assert "lasy2: 2 == trDim0" (2 == trDim0)+   Call.assert "lasy2: 2 == bDim0" (2 == bDim0)+   x <- Call.newArray2 2 ldx+   evalContT $ do+      ltranlPtr <- Call.bool ltranl+      ltranrPtr <- Call.bool ltranr+      isgnPtr <- Call.cint isgn+      n1Ptr <- Call.cint n1+      n2Ptr <- Call.cint n2+      tlPtr <- Call.array tl+      ldtlPtr <- Call.cint ldtl+      trPtr <- Call.array tr+      ldtrPtr <- Call.cint ldtr+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      scalePtr <- Call.alloca+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      xnormPtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.lasy2 ltranlPtr ltranrPtr isgnPtr n1Ptr n2Ptr tlPtr ldtlPtr trPtr ldtrPtr bPtr ldbPtr scalePtr xPtr ldxPtr xnormPtr infoPtr+      liftIO $ pure (,,,)+         <*> peek scalePtr+         <*> Call.freezeArray x+         <*> peek xnormPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slasyf.f>+lasyf ::+   Char {- ^ uplo -} ->+   Int {- ^ nb -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Int {- ^ ldw -} ->+   IO (Int, Array ZeroInt CInt, Array (ZeroInt,ZeroInt) Float, Int)+lasyf uplo nb a ldw = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   ipiv <- Call.newArray1 n+   w <- Call.newArray2 nb ldw+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nbPtr <- Call.cint nb+      kbPtr <- Call.alloca+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.ioarray ipiv+      wPtr <- Call.ioarray w+      ldwPtr <- Call.cint ldw+      infoPtr <- Call.alloca+      liftIO $ FFI.lasyf uploPtr nPtr nbPtr kbPtr aPtr ldaPtr ipivPtr wPtr ldwPtr infoPtr+      liftIO $ pure (,,,)+         <*> fmap fromIntegral (peek kbPtr)+         <*> Call.freezeArray ipiv+         <*> Call.freezeArray w+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slatbs.f>+latbs ::+   Char {- ^ uplo -} ->+   Char {- ^ trans -} ->+   Char {- ^ diag -} ->+   Char {- ^ normin -} ->+   Int {- ^ kd -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ ab -} ->+   IOArray ZeroInt Float {- ^ x -} ->+   IOArray ZeroInt Float {- ^ cnorm -} ->+   IO (Float, Int)+latbs uplo trans diag normin kd ab x cnorm = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let xDim0 = Call.sizes1 $ MutArray.shape x+   let cnormDim0 = Call.sizes1 $ MutArray.shape cnorm+   let n = abDim0+   let ldab = abDim1+   Call.assert "latbs: n == xDim0" (n == xDim0)+   Call.assert "latbs: n == cnormDim0" (n == cnormDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      transPtr <- Call.char trans+      diagPtr <- Call.char diag+      norminPtr <- Call.char normin+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      xPtr <- Call.ioarray x+      scalePtr <- Call.alloca+      cnormPtr <- Call.ioarray cnorm+      infoPtr <- Call.alloca+      liftIO $ FFI.latbs uploPtr transPtr diagPtr norminPtr nPtr kdPtr abPtr ldabPtr xPtr scalePtr cnormPtr infoPtr+      liftIO $ pure (,)+         <*> peek scalePtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slatdf.f>+latdf ::+   Int {- ^ ijob -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ z -} ->+   IOArray ZeroInt Float {- ^ rhs -} ->+   Float {- ^ rdsum -} ->+   Float {- ^ rdscal -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Array ZeroInt CInt {- ^ jpiv -} ->+   IO (Float, Float)+latdf ijob z rhs rdsum rdscal ipiv jpiv = do+   let (zDim0,zDim1) = Call.sizes2 $ Array.shape z+   let rhsDim0 = Call.sizes1 $ MutArray.shape rhs+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let jpivDim0 = Call.sizes1 $ Array.shape jpiv+   let n = zDim0+   let ldz = zDim1+   let _rhsSize = rhsDim0+   Call.assert "latdf: n == ipivDim0" (n == ipivDim0)+   Call.assert "latdf: n == jpivDim0" (n == jpivDim0)+   evalContT $ do+      ijobPtr <- Call.cint ijob+      nPtr <- Call.cint n+      zPtr <- Call.array z+      ldzPtr <- Call.cint ldz+      rhsPtr <- Call.ioarray rhs+      rdsumPtr <- Call.float rdsum+      rdscalPtr <- Call.float rdscal+      ipivPtr <- Call.array ipiv+      jpivPtr <- Call.array jpiv+      liftIO $ FFI.latdf ijobPtr nPtr zPtr ldzPtr rhsPtr rdsumPtr rdscalPtr ipivPtr jpivPtr+      liftIO $ pure (,)+         <*> peek rdsumPtr+         <*> peek rdscalPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slatps.f>+latps ::+   Char {- ^ uplo -} ->+   Char {- ^ trans -} ->+   Char {- ^ diag -} ->+   Char {- ^ normin -} ->+   Array ZeroInt Float {- ^ ap -} ->+   IOArray ZeroInt Float {- ^ x -} ->+   IOArray ZeroInt Float {- ^ cnorm -} ->+   IO (Float, Int)+latps uplo trans diag normin ap x cnorm = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let xDim0 = Call.sizes1 $ MutArray.shape x+   let cnormDim0 = Call.sizes1 $ MutArray.shape cnorm+   let n = xDim0+   Call.assert "latps: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   Call.assert "latps: n == cnormDim0" (n == cnormDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      transPtr <- Call.char trans+      diagPtr <- Call.char diag+      norminPtr <- Call.char normin+      nPtr <- Call.cint n+      apPtr <- Call.array ap+      xPtr <- Call.ioarray x+      scalePtr <- Call.alloca+      cnormPtr <- Call.ioarray cnorm+      infoPtr <- Call.alloca+      liftIO $ FFI.latps uploPtr transPtr diagPtr norminPtr nPtr apPtr xPtr scalePtr cnormPtr infoPtr+      liftIO $ pure (,)+         <*> peek scalePtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slatrd.f>+latrd ::+   Char {- ^ uplo -} ->+   Int {- ^ nb -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Int {- ^ ldw -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float)+latrd uplo nb a ldw = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   e <- Call.newArray1 (n-1)+   tau <- Call.newArray1 (n-1)+   w <- Call.newArray2 nb ldw+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nbPtr <- Call.cint nb+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ePtr <- Call.ioarray e+      tauPtr <- Call.ioarray tau+      wPtr <- Call.ioarray w+      ldwPtr <- Call.cint ldw+      liftIO $ FFI.latrd uploPtr nPtr nbPtr aPtr ldaPtr ePtr tauPtr wPtr ldwPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray e+         <*> Call.freezeArray tau+         <*> Call.freezeArray w++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slatrs.f>+latrs ::+   Char {- ^ uplo -} ->+   Char {- ^ trans -} ->+   Char {- ^ diag -} ->+   Char {- ^ normin -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IOArray ZeroInt Float {- ^ x -} ->+   IOArray ZeroInt Float {- ^ cnorm -} ->+   IO (Float, Int)+latrs uplo trans diag normin a x cnorm = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let xDim0 = Call.sizes1 $ MutArray.shape x+   let cnormDim0 = Call.sizes1 $ MutArray.shape cnorm+   let n = aDim0+   let lda = aDim1+   Call.assert "latrs: n == xDim0" (n == xDim0)+   Call.assert "latrs: n == cnormDim0" (n == cnormDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      transPtr <- Call.char trans+      diagPtr <- Call.char diag+      norminPtr <- Call.char normin+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      xPtr <- Call.ioarray x+      scalePtr <- Call.alloca+      cnormPtr <- Call.ioarray cnorm+      infoPtr <- Call.alloca+      liftIO $ FFI.latrs uploPtr transPtr diagPtr norminPtr nPtr aPtr ldaPtr xPtr scalePtr cnormPtr infoPtr+      liftIO $ pure (,)+         <*> peek scalePtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slatrz.f>+latrz ::+   Int {- ^ m -} ->+   Int {- ^ l -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IO (Array ZeroInt Float)+latrz m l a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 m+   work <- Call.newArray1 m+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      lPtr <- Call.cint l+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      liftIO $ FFI.latrz mPtr nPtr lPtr aPtr ldaPtr tauPtr workPtr+      liftIO $ Call.freezeArray tau++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slauu2.f>+lauu2 ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IO (Int)+lauu2 uplo a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      infoPtr <- Call.alloca+      liftIO $ FFI.lauu2 uploPtr nPtr aPtr ldaPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slauum.f>+lauum ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IO (Int)+lauum uplo a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      infoPtr <- Call.alloca+      liftIO $ FFI.lauum uploPtr nPtr aPtr ldaPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sorbdb.f>+orbdb ::+   Char {- ^ trans -} ->+   Char {- ^ signs -} ->+   Int {- ^ m -} ->+   Int {- ^ p -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ x11 -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ x12 -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ x21 -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ x22 -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)+orbdb trans signs m p x11 x12 x21 x22 lwork = do+   let (x11Dim0,x11Dim1) = Call.sizes2 $ MutArray.shape x11+   let (x12Dim0,x12Dim1) = Call.sizes2 $ MutArray.shape x12+   let (x21Dim0,x21Dim1) = Call.sizes2 $ MutArray.shape x21+   let (x22Dim0,x22Dim1) = Call.sizes2 $ MutArray.shape x22+   let q = x11Dim0+   let ldx11 = x11Dim1+   let ldx12 = x12Dim1+   let ldx21 = x21Dim1+   let ldx22 = x22Dim1+   Call.assert "orbdb: m-q == x12Dim0" (m-q == x12Dim0)+   Call.assert "orbdb: q == x21Dim0" (q == x21Dim0)+   Call.assert "orbdb: m-q == x22Dim0" (m-q == x22Dim0)+   theta <- Call.newArray1 q+   phi <- Call.newArray1 (q-1)+   taup1 <- Call.newArray1 p+   taup2 <- Call.newArray1 (m-p)+   tauq1 <- Call.newArray1 q+   tauq2 <- Call.newArray1 (m-q)+   work <- Call.newArray1 lwork+   evalContT $ do+      transPtr <- Call.char trans+      signsPtr <- Call.char signs+      mPtr <- Call.cint m+      pPtr <- Call.cint p+      qPtr <- Call.cint q+      x11Ptr <- Call.ioarray x11+      ldx11Ptr <- Call.cint ldx11+      x12Ptr <- Call.ioarray x12+      ldx12Ptr <- Call.cint ldx12+      x21Ptr <- Call.ioarray x21+      ldx21Ptr <- Call.cint ldx21+      x22Ptr <- Call.ioarray x22+      ldx22Ptr <- Call.cint ldx22+      thetaPtr <- Call.ioarray theta+      phiPtr <- Call.ioarray phi+      taup1Ptr <- Call.ioarray taup1+      taup2Ptr <- Call.ioarray taup2+      tauq1Ptr <- Call.ioarray tauq1+      tauq2Ptr <- Call.ioarray tauq2+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.orbdb transPtr signsPtr mPtr pPtr qPtr x11Ptr ldx11Ptr x12Ptr ldx12Ptr x21Ptr ldx21Ptr x22Ptr ldx22Ptr thetaPtr phiPtr taup1Ptr taup2Ptr tauq1Ptr tauq2Ptr workPtr lworkPtr infoPtr+      liftIO $ pure (,,,,,,)+         <*> Call.freezeArray theta+         <*> Call.freezeArray phi+         <*> Call.freezeArray taup1+         <*> Call.freezeArray taup2+         <*> Call.freezeArray tauq1+         <*> Call.freezeArray tauq2+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sorcsd.f>+orcsd ::+   Char {- ^ jobu1 -} ->+   Char {- ^ jobu2 -} ->+   Char {- ^ jobv1t -} ->+   Char {- ^ jobv2t -} ->+   Char {- ^ trans -} ->+   Char {- ^ signs -} ->+   Int {- ^ m -} ->+   Int {- ^ p -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ x11 -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ x12 -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ x21 -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ x22 -} ->+   Int {- ^ r -} ->+   Int {- ^ ldu1 -} ->+   Int {- ^ ldu2 -} ->+   Int {- ^ ldv1t -} ->+   Int {- ^ ldv2t -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Int)+orcsd jobu1 jobu2 jobv1t jobv2t trans signs m p x11 x12 x21 x22 r ldu1 ldu2 ldv1t ldv2t lwork = do+   let (x11Dim0,x11Dim1) = Call.sizes2 $ MutArray.shape x11+   let (x12Dim0,x12Dim1) = Call.sizes2 $ MutArray.shape x12+   let (x21Dim0,x21Dim1) = Call.sizes2 $ MutArray.shape x21+   let (x22Dim0,x22Dim1) = Call.sizes2 $ MutArray.shape x22+   let q = x11Dim0+   let ldx11 = x11Dim1+   let ldx12 = x12Dim1+   let ldx21 = x21Dim1+   let ldx22 = x22Dim1+   Call.assert "orcsd: m-q == x12Dim0" (m-q == x12Dim0)+   Call.assert "orcsd: q == x21Dim0" (q == x21Dim0)+   Call.assert "orcsd: m-q == x22Dim0" (m-q == x22Dim0)+   theta <- Call.newArray1 r+   u1 <- Call.newArray2 p ldu1+   u2 <- Call.newArray2 (m-p) ldu2+   v1t <- Call.newArray2 q ldv1t+   v2t <- Call.newArray2 (m-q) ldv2t+   work <- Call.newArray1 (maximum[1,lwork])+   iwork <- Call.newArray1 (m-minimum[p,m-p,q,m-q])+   evalContT $ do+      jobu1Ptr <- Call.char jobu1+      jobu2Ptr <- Call.char jobu2+      jobv1tPtr <- Call.char jobv1t+      jobv2tPtr <- Call.char jobv2t+      transPtr <- Call.char trans+      signsPtr <- Call.char signs+      mPtr <- Call.cint m+      pPtr <- Call.cint p+      qPtr <- Call.cint q+      x11Ptr <- Call.ioarray x11+      ldx11Ptr <- Call.cint ldx11+      x12Ptr <- Call.ioarray x12+      ldx12Ptr <- Call.cint ldx12+      x21Ptr <- Call.ioarray x21+      ldx21Ptr <- Call.cint ldx21+      x22Ptr <- Call.ioarray x22+      ldx22Ptr <- Call.cint ldx22+      thetaPtr <- Call.ioarray theta+      u1Ptr <- Call.ioarray u1+      ldu1Ptr <- Call.cint ldu1+      u2Ptr <- Call.ioarray u2+      ldu2Ptr <- Call.cint ldu2+      v1tPtr <- Call.ioarray v1t+      ldv1tPtr <- Call.cint ldv1t+      v2tPtr <- Call.ioarray v2t+      ldv2tPtr <- Call.cint ldv2t+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.orcsd jobu1Ptr jobu2Ptr jobv1tPtr jobv2tPtr transPtr signsPtr mPtr pPtr qPtr x11Ptr ldx11Ptr x12Ptr ldx12Ptr x21Ptr ldx21Ptr x22Ptr ldx22Ptr thetaPtr u1Ptr ldu1Ptr u2Ptr ldu2Ptr v1tPtr ldv1tPtr v2tPtr ldv2tPtr workPtr lworkPtr iworkPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> Call.freezeArray theta+         <*> Call.freezeArray u1+         <*> Call.freezeArray u2+         <*> Call.freezeArray v1t+         <*> Call.freezeArray v2t+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spbcon.f>+pbcon ::+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ ab -} ->+   Float {- ^ anorm -} ->+   IO (Float, Int)+pbcon uplo kd ab anorm = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let n = abDim0+   let ldab = abDim1+   work <- Call.newArray1 (3*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      anormPtr <- Call.float anorm+      rcondPtr <- Call.alloca+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.pbcon uploPtr nPtr kdPtr abPtr ldabPtr anormPtr rcondPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,)+         <*> peek rcondPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spbequ.f>+pbequ ::+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ ab -} ->+   IO (Array ZeroInt Float, Float, Float, Int)+pbequ uplo kd ab = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let n = abDim0+   let ldab = abDim1+   s <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      sPtr <- Call.ioarray s+      scondPtr <- Call.alloca+      amaxPtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.pbequ uploPtr nPtr kdPtr abPtr ldabPtr sPtr scondPtr amaxPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray s+         <*> peek scondPtr+         <*> peek amaxPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spbrfs.f>+pbrfs ::+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ ab -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ afb -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ x -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Int)+pbrfs uplo kd ab afb b x = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let (afbDim0,afbDim1) = Call.sizes2 $ Array.shape afb+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (xDim0,xDim1) = Call.sizes2 $ MutArray.shape x+   let n = abDim0+   let ldab = abDim1+   let ldafb = afbDim1+   let nrhs = bDim0+   let ldb = bDim1+   let ldx = xDim1+   Call.assert "pbrfs: n == afbDim0" (n == afbDim0)+   Call.assert "pbrfs: nrhs == xDim0" (nrhs == xDim0)+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (3*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      nrhsPtr <- Call.cint nrhs+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      afbPtr <- Call.array afb+      ldafbPtr <- Call.cint ldafb+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.pbrfs uploPtr nPtr kdPtr nrhsPtr abPtr ldabPtr afbPtr ldafbPtr bPtr ldbPtr xPtr ldxPtr ferrPtr berrPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spbstf.f>+pbstf ::+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ ab -} ->+   IO (Int)+pbstf uplo kd ab = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let n = abDim0+   let ldab = abDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      infoPtr <- Call.alloca+      liftIO $ FFI.pbstf uploPtr nPtr kdPtr abPtr ldabPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spbsv.f>+pbsv ::+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ ab -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   IO (Int)+pbsv uplo kd ab b = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = abDim0+   let ldab = abDim1+   let nrhs = bDim0+   let ldb = bDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      nrhsPtr <- Call.cint nrhs+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.pbsv uploPtr nPtr kdPtr nrhsPtr abPtr ldabPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spbsvx.f>+pbsvx ::+   Char {- ^ fact -} ->+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ ab -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ afb -} ->+   Char {- ^ equed -} ->+   IOArray ZeroInt Float {- ^ s -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   Int {- ^ ldx -} ->+   IO (Char, Array (ZeroInt,ZeroInt) Float, Float, Array ZeroInt Float, Array ZeroInt Float, Int)+pbsvx fact uplo kd ab afb equed s b ldx = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let (afbDim0,afbDim1) = Call.sizes2 $ MutArray.shape afb+   let sDim0 = Call.sizes1 $ MutArray.shape s+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = abDim0+   let ldab = abDim1+   let ldafb = afbDim1+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "pbsvx: n == afbDim0" (n == afbDim0)+   Call.assert "pbsvx: n == sDim0" (n == sDim0)+   x <- Call.newArray2 nrhs ldx+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (3*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      factPtr <- Call.char fact+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      nrhsPtr <- Call.cint nrhs+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      afbPtr <- Call.ioarray afb+      ldafbPtr <- Call.cint ldafb+      equedPtr <- Call.char equed+      sPtr <- Call.ioarray s+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      rcondPtr <- Call.alloca+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.pbsvx factPtr uploPtr nPtr kdPtr nrhsPtr abPtr ldabPtr afbPtr ldafbPtr equedPtr sPtr bPtr ldbPtr xPtr ldxPtr rcondPtr ferrPtr berrPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> fmap castCCharToChar (peek equedPtr)+         <*> Call.freezeArray x+         <*> peek rcondPtr+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spbtf2.f>+pbtf2 ::+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ ab -} ->+   IO (Int)+pbtf2 uplo kd ab = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let n = abDim0+   let ldab = abDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      infoPtr <- Call.alloca+      liftIO $ FFI.pbtf2 uploPtr nPtr kdPtr abPtr ldabPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spbtrf.f>+pbtrf ::+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ ab -} ->+   IO (Int)+pbtrf uplo kd ab = do+   let (abDim0,abDim1) = Call.sizes2 $ MutArray.shape ab+   let n = abDim0+   let ldab = abDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      abPtr <- Call.ioarray ab+      ldabPtr <- Call.cint ldab+      infoPtr <- Call.alloca+      liftIO $ FFI.pbtrf uploPtr nPtr kdPtr abPtr ldabPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spbtrs.f>+pbtrs ::+   Char {- ^ uplo -} ->+   Int {- ^ kd -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ ab -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   IO (Int)+pbtrs uplo kd ab b = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = abDim0+   let ldab = abDim1+   let nrhs = bDim0+   let ldb = bDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      nrhsPtr <- Call.cint nrhs+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.pbtrs uploPtr nPtr kdPtr nrhsPtr abPtr ldabPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spftrf.f>+pftrf ::+   Char {- ^ transr -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt Float {- ^ a -} ->+   IO (Int)+pftrf transr uplo n a = do+   let aDim0 = Call.sizes1 $ MutArray.shape a+   Call.assert "pftrf: n*(n+1)`div`2 == aDim0" (n*(n+1)`div`2 == aDim0)+   evalContT $ do+      transrPtr <- Call.char transr+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      infoPtr <- Call.alloca+      liftIO $ FFI.pftrf transrPtr uploPtr nPtr aPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spftri.f>+pftri ::+   Char {- ^ transr -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt Float {- ^ a -} ->+   IO (Int)+pftri transr uplo n a = do+   let aDim0 = Call.sizes1 $ MutArray.shape a+   Call.assert "pftri: n*(n+1)`div`2 == aDim0" (n*(n+1)`div`2 == aDim0)+   evalContT $ do+      transrPtr <- Call.char transr+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      infoPtr <- Call.alloca+      liftIO $ FFI.pftri transrPtr uploPtr nPtr aPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spftrs.f>+pftrs ::+   Char {- ^ transr -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Array ZeroInt Float {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   IO (Int)+pftrs transr uplo n a b = do+   let aDim0 = Call.sizes1 $ Array.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "pftrs: n*(n+1)`div`2 == aDim0" (n*(n+1)`div`2 == aDim0)+   evalContT $ do+      transrPtr <- Call.char transr+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.array a+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.pftrs transrPtr uploPtr nPtr nrhsPtr aPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spocon.f>+pocon ::+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Float {- ^ anorm -} ->+   IO (Float, Int)+pocon uplo a anorm = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   work <- Call.newArray1 (3*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      anormPtr <- Call.float anorm+      rcondPtr <- Call.alloca+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.pocon uploPtr nPtr aPtr ldaPtr anormPtr rcondPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,)+         <*> peek rcondPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spoequ.f>+poequ ::+   Array (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IO (Array ZeroInt Float, Float, Float, Int)+poequ a = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   s <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      sPtr <- Call.ioarray s+      scondPtr <- Call.alloca+      amaxPtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.poequ nPtr aPtr ldaPtr sPtr scondPtr amaxPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray s+         <*> peek scondPtr+         <*> peek amaxPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spoequb.f>+poequb ::+   Array (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IO (Array ZeroInt Float, Float, Float, Int)+poequb a = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   s <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      sPtr <- Call.ioarray s+      scondPtr <- Call.alloca+      amaxPtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.poequb nPtr aPtr ldaPtr sPtr scondPtr amaxPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray s+         <*> peek scondPtr+         <*> peek amaxPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sporfs.f>+porfs ::+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ af -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ x -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Int)+porfs uplo a af b x = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (afDim0,afDim1) = Call.sizes2 $ Array.shape af+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (xDim0,xDim1) = Call.sizes2 $ MutArray.shape x+   let n = aDim0+   let lda = aDim1+   let ldaf = afDim1+   let nrhs = bDim0+   let ldb = bDim1+   let ldx = xDim1+   Call.assert "porfs: n == afDim0" (n == afDim0)+   Call.assert "porfs: nrhs == xDim0" (nrhs == xDim0)+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (3*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      afPtr <- Call.array af+      ldafPtr <- Call.cint ldaf+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.porfs uploPtr nPtr nrhsPtr aPtr ldaPtr afPtr ldafPtr bPtr ldbPtr xPtr ldxPtr ferrPtr berrPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sposv.f>+posv ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   IO (Int)+posv uplo a b = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.posv uploPtr nPtr nrhsPtr aPtr ldaPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sposvx.f>+posvx ::+   Char {- ^ fact -} ->+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ af -} ->+   Char {- ^ equed -} ->+   IOArray ZeroInt Float {- ^ s -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   Int {- ^ ldx -} ->+   IO (Char, Array (ZeroInt,ZeroInt) Float, Float, Array ZeroInt Float, Array ZeroInt Float, Int)+posvx fact uplo a af equed s b ldx = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (afDim0,afDim1) = Call.sizes2 $ MutArray.shape af+   let sDim0 = Call.sizes1 $ MutArray.shape s+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let ldaf = afDim1+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "posvx: n == afDim0" (n == afDim0)+   Call.assert "posvx: n == sDim0" (n == sDim0)+   x <- Call.newArray2 nrhs ldx+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (3*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      factPtr <- Call.char fact+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      afPtr <- Call.ioarray af+      ldafPtr <- Call.cint ldaf+      equedPtr <- Call.char equed+      sPtr <- Call.ioarray s+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      rcondPtr <- Call.alloca+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.posvx factPtr uploPtr nPtr nrhsPtr aPtr ldaPtr afPtr ldafPtr equedPtr sPtr bPtr ldbPtr xPtr ldxPtr rcondPtr ferrPtr berrPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> fmap castCCharToChar (peek equedPtr)+         <*> Call.freezeArray x+         <*> peek rcondPtr+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spotf2.f>+potf2 ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IO (Int)+potf2 uplo a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      infoPtr <- Call.alloca+      liftIO $ FFI.potf2 uploPtr nPtr aPtr ldaPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spotrf.f>+potrf ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IO (Int)+potrf uplo a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      infoPtr <- Call.alloca+      liftIO $ FFI.potrf uploPtr nPtr aPtr ldaPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spotri.f>+potri ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IO (Int)+potri uplo a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      infoPtr <- Call.alloca+      liftIO $ FFI.potri uploPtr nPtr aPtr ldaPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spotrs.f>+potrs ::+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   IO (Int)+potrs uplo a b = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.potrs uploPtr nPtr nrhsPtr aPtr ldaPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sppcon.f>+ppcon ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Array ZeroInt Float {- ^ ap -} ->+   Float {- ^ anorm -} ->+   IO (Float, Int)+ppcon uplo n ap anorm = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   Call.assert "ppcon: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   work <- Call.newArray1 (3*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.array ap+      anormPtr <- Call.float anorm+      rcondPtr <- Call.alloca+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ppcon uploPtr nPtr apPtr anormPtr rcondPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,)+         <*> peek rcondPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sppequ.f>+ppequ ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Array ZeroInt Float {- ^ ap -} ->+   IO (Array ZeroInt Float, Float, Float, Int)+ppequ uplo n ap = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   Call.assert "ppequ: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   s <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.array ap+      sPtr <- Call.ioarray s+      scondPtr <- Call.alloca+      amaxPtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.ppequ uploPtr nPtr apPtr sPtr scondPtr amaxPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray s+         <*> peek scondPtr+         <*> peek amaxPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spprfs.f>+pprfs ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Array ZeroInt Float {- ^ ap -} ->+   Array ZeroInt Float {- ^ afp -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ x -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Int)+pprfs uplo n ap afp b x = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let afpDim0 = Call.sizes1 $ Array.shape afp+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (xDim0,xDim1) = Call.sizes2 $ MutArray.shape x+   let nrhs = bDim0+   let ldb = bDim1+   let ldx = xDim1+   Call.assert "pprfs: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   Call.assert "pprfs: n*(n+1)`div`2 == afpDim0" (n*(n+1)`div`2 == afpDim0)+   Call.assert "pprfs: nrhs == xDim0" (nrhs == xDim0)+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (3*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      apPtr <- Call.array ap+      afpPtr <- Call.array afp+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.pprfs uploPtr nPtr nrhsPtr apPtr afpPtr bPtr ldbPtr xPtr ldxPtr ferrPtr berrPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sppsv.f>+ppsv ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt Float {- ^ ap -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   IO (Int)+ppsv uplo n ap b = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "ppsv: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      apPtr <- Call.ioarray ap+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.ppsv uploPtr nPtr nrhsPtr apPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sppsvx.f>+ppsvx ::+   Char {- ^ fact -} ->+   Char {- ^ uplo -} ->+   IOArray ZeroInt Float {- ^ ap -} ->+   IOArray ZeroInt Float {- ^ afp -} ->+   Char {- ^ equed -} ->+   IOArray ZeroInt Float {- ^ s -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   Int {- ^ ldx -} ->+   IO (Char, Array (ZeroInt,ZeroInt) Float, Float, Array ZeroInt Float, Array ZeroInt Float, Int)+ppsvx fact uplo ap afp equed s b ldx = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   let afpDim0 = Call.sizes1 $ MutArray.shape afp+   let sDim0 = Call.sizes1 $ MutArray.shape s+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = sDim0+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "ppsvx: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   Call.assert "ppsvx: n*(n+1)`div`2 == afpDim0" (n*(n+1)`div`2 == afpDim0)+   x <- Call.newArray2 nrhs ldx+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (3*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      factPtr <- Call.char fact+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      apPtr <- Call.ioarray ap+      afpPtr <- Call.ioarray afp+      equedPtr <- Call.char equed+      sPtr <- Call.ioarray s+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      rcondPtr <- Call.alloca+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ppsvx factPtr uploPtr nPtr nrhsPtr apPtr afpPtr equedPtr sPtr bPtr ldbPtr xPtr ldxPtr rcondPtr ferrPtr berrPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> fmap castCCharToChar (peek equedPtr)+         <*> Call.freezeArray x+         <*> peek rcondPtr+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spptrf.f>+pptrf ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt Float {- ^ ap -} ->+   IO (Int)+pptrf uplo n ap = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   Call.assert "pptrf: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      infoPtr <- Call.alloca+      liftIO $ FFI.pptrf uploPtr nPtr apPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spptri.f>+pptri ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt Float {- ^ ap -} ->+   IO (Int)+pptri uplo n ap = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   Call.assert "pptri: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      infoPtr <- Call.alloca+      liftIO $ FFI.pptri uploPtr nPtr apPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spptrs.f>+pptrs ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Array ZeroInt Float {- ^ ap -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   IO (Int)+pptrs uplo n ap b = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "pptrs: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      apPtr <- Call.array ap+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.pptrs uploPtr nPtr nrhsPtr apPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spstf2.f>+pstf2 ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Float {- ^ tol -} ->+   IO (Array ZeroInt CInt, Int, Int)+pstf2 uplo a tol = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   piv <- Call.newArray1 n+   work <- Call.newArray1 (2*n)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      pivPtr <- Call.ioarray piv+      rankPtr <- Call.alloca+      tolPtr <- Call.float tol+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.pstf2 uploPtr nPtr aPtr ldaPtr pivPtr rankPtr tolPtr workPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray piv+         <*> fmap fromIntegral (peek rankPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spstrf.f>+pstrf ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Float {- ^ tol -} ->+   IO (Array ZeroInt CInt, Int, Int)+pstrf uplo a tol = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   piv <- Call.newArray1 n+   work <- Call.newArray1 (2*n)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      pivPtr <- Call.ioarray piv+      rankPtr <- Call.alloca+      tolPtr <- Call.float tol+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.pstrf uploPtr nPtr aPtr ldaPtr pivPtr rankPtr tolPtr workPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray piv+         <*> fmap fromIntegral (peek rankPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sptcon.f>+ptcon ::+   Array ZeroInt Float {- ^ d -} ->+   Array ZeroInt Float {- ^ e -} ->+   Float {- ^ anorm -} ->+   IO (Float, Int)+ptcon d e anorm = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let eDim0 = Call.sizes1 $ Array.shape e+   let n = dDim0+   Call.assert "ptcon: n-1 == eDim0" (n-1 == eDim0)+   work <- Call.newArray1 n+   evalContT $ do+      nPtr <- Call.cint n+      dPtr <- Call.array d+      ePtr <- Call.array e+      anormPtr <- Call.float anorm+      rcondPtr <- Call.alloca+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.ptcon nPtr dPtr ePtr anormPtr rcondPtr workPtr infoPtr+      liftIO $ pure (,)+         <*> peek rcondPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spteqr.f>+pteqr ::+   Char {- ^ compz -} ->+   IOArray ZeroInt Float {- ^ d -} ->+   IOArray ZeroInt Float {- ^ e -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ z -} ->+   IO (Int)+pteqr compz d e z = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = dDim0+   let ldz = zDim1+   Call.assert "pteqr: n-1 == eDim0" (n-1 == eDim0)+   Call.assert "pteqr: n == zDim0" (n == zDim0)+   work <- Call.newArray1 (4*n)+   evalContT $ do+      compzPtr <- Call.char compz+      nPtr <- Call.cint n+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.pteqr compzPtr nPtr dPtr ePtr zPtr ldzPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sptrfs.f>+ptrfs ::+   Array ZeroInt Float {- ^ d -} ->+   Array ZeroInt Float {- ^ e -} ->+   Array ZeroInt Float {- ^ df -} ->+   Array ZeroInt Float {- ^ ef -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ x -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Int)+ptrfs d e df ef b x = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let eDim0 = Call.sizes1 $ Array.shape e+   let dfDim0 = Call.sizes1 $ Array.shape df+   let efDim0 = Call.sizes1 $ Array.shape ef+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (xDim0,xDim1) = Call.sizes2 $ MutArray.shape x+   let n = dDim0+   let nrhs = bDim0+   let ldb = bDim1+   let ldx = xDim1+   Call.assert "ptrfs: n-1 == eDim0" (n-1 == eDim0)+   Call.assert "ptrfs: n == dfDim0" (n == dfDim0)+   Call.assert "ptrfs: n-1 == efDim0" (n-1 == efDim0)+   Call.assert "ptrfs: nrhs == xDim0" (nrhs == xDim0)+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (2*n)+   evalContT $ do+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      dPtr <- Call.array d+      ePtr <- Call.array e+      dfPtr <- Call.array df+      efPtr <- Call.array ef+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.ptrfs nPtr nrhsPtr dPtr ePtr dfPtr efPtr bPtr ldbPtr xPtr ldxPtr ferrPtr berrPtr workPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sptsv.f>+ptsv ::+   IOArray ZeroInt Float {- ^ d -} ->+   IOArray ZeroInt Float {- ^ e -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   IO (Int)+ptsv d e b = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = dDim0+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "ptsv: n-1 == eDim0" (n-1 == eDim0)+   evalContT $ do+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.ptsv nPtr nrhsPtr dPtr ePtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sptsvx.f>+ptsvx ::+   Char {- ^ fact -} ->+   Array ZeroInt Float {- ^ d -} ->+   Array ZeroInt Float {- ^ e -} ->+   IOArray ZeroInt Float {- ^ df -} ->+   IOArray ZeroInt Float {- ^ ef -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ b -} ->+   Int {- ^ ldx -} ->+   IO (Array (ZeroInt,ZeroInt) Float, Float, Array ZeroInt Float, Array ZeroInt Float, Int)+ptsvx fact d e df ef b ldx = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let eDim0 = Call.sizes1 $ Array.shape e+   let dfDim0 = Call.sizes1 $ MutArray.shape df+   let efDim0 = Call.sizes1 $ MutArray.shape ef+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let n = dDim0+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "ptsvx: n-1 == eDim0" (n-1 == eDim0)+   Call.assert "ptsvx: n == dfDim0" (n == dfDim0)+   Call.assert "ptsvx: n-1 == efDim0" (n-1 == efDim0)+   x <- Call.newArray2 nrhs ldx+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (2*n)+   evalContT $ do+      factPtr <- Call.char fact+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      dPtr <- Call.array d+      ePtr <- Call.array e+      dfPtr <- Call.ioarray df+      efPtr <- Call.ioarray ef+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      rcondPtr <- Call.alloca+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.ptsvx factPtr nPtr nrhsPtr dPtr ePtr dfPtr efPtr bPtr ldbPtr xPtr ldxPtr rcondPtr ferrPtr berrPtr workPtr infoPtr+      liftIO $ pure (,,,,)+         <*> Call.freezeArray x+         <*> peek rcondPtr+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spttrf.f>+pttrf ::+   IOArray ZeroInt Float {- ^ d -} ->+   IOArray ZeroInt Float {- ^ e -} ->+   IO (Int)+pttrf d e = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let n = dDim0+   Call.assert "pttrf: n-1 == eDim0" (n-1 == eDim0)+   evalContT $ do+      nPtr <- Call.cint n+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      infoPtr <- Call.alloca+      liftIO $ FFI.pttrf nPtr dPtr ePtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spttrs.f>+pttrs ::+   Array ZeroInt Float {- ^ d -} ->+   Array ZeroInt Float {- ^ e -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   IO (Int)+pttrs d e b = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let eDim0 = Call.sizes1 $ Array.shape e+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = dDim0+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "pttrs: n-1 == eDim0" (n-1 == eDim0)+   evalContT $ do+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      dPtr <- Call.array d+      ePtr <- Call.array e+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.pttrs nPtr nrhsPtr dPtr ePtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sptts2.f>+ptts2 ::+   Array ZeroInt Float {- ^ d -} ->+   Array ZeroInt Float {- ^ e -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   IO ()+ptts2 d e b = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let eDim0 = Call.sizes1 $ Array.shape e+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = dDim0+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "ptts2: n-1 == eDim0" (n-1 == eDim0)+   evalContT $ do+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      dPtr <- Call.array d+      ePtr <- Call.array e+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      liftIO $ FFI.ptts2 nPtr nrhsPtr dPtr ePtr bPtr ldbPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/srscl.f>+rscl ::+   Int {- ^ n -} ->+   Float {- ^ sa -} ->+   IOArray ZeroInt Float {- ^ sx -} ->+   Int {- ^ incx -} ->+   IO ()+rscl n sa sx incx = do+   let sxDim0 = Call.sizes1 $ MutArray.shape sx+   let _sxSize = sxDim0+   evalContT $ do+      nPtr <- Call.cint n+      saPtr <- Call.float sa+      sxPtr <- Call.ioarray sx+      incxPtr <- Call.cint incx+      liftIO $ FFI.rscl nPtr saPtr sxPtr incxPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sspcon.f>+spcon ::+   Char {- ^ uplo -} ->+   Array ZeroInt Float {- ^ ap -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Float {- ^ anorm -} ->+   IO (Float, Int)+spcon uplo ap ipiv anorm = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = ipivDim0+   Call.assert "spcon: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   work <- Call.newArray1 (2*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.array ap+      ipivPtr <- Call.array ipiv+      anormPtr <- Call.float anorm+      rcondPtr <- Call.alloca+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.spcon uploPtr nPtr apPtr ipivPtr anormPtr rcondPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,)+         <*> peek rcondPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssprfs.f>+sprfs ::+   Char {- ^ uplo -} ->+   Array ZeroInt Float {- ^ ap -} ->+   Array ZeroInt Float {- ^ afp -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ x -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Int)+sprfs uplo ap afp ipiv b x = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let afpDim0 = Call.sizes1 $ Array.shape afp+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (xDim0,xDim1) = Call.sizes2 $ MutArray.shape x+   let n = ipivDim0+   let nrhs = bDim0+   let ldb = bDim1+   let ldx = xDim1+   Call.assert "sprfs: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   Call.assert "sprfs: n*(n+1)`div`2 == afpDim0" (n*(n+1)`div`2 == afpDim0)+   Call.assert "sprfs: nrhs == xDim0" (nrhs == xDim0)+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (3*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      apPtr <- Call.array ap+      afpPtr <- Call.array afp+      ipivPtr <- Call.array ipiv+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.sprfs uploPtr nPtr nrhsPtr apPtr afpPtr ipivPtr bPtr ldbPtr xPtr ldxPtr ferrPtr berrPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sspsv.f>+spsv ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt Float {- ^ ap -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   IO (Array ZeroInt CInt, Int)+spsv uplo n ap b = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "spsv: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   ipiv <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      apPtr <- Call.ioarray ap+      ipivPtr <- Call.ioarray ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.spsv uploPtr nPtr nrhsPtr apPtr ipivPtr bPtr ldbPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sspsvx.f>+spsvx ::+   Char {- ^ fact -} ->+   Char {- ^ uplo -} ->+   Array ZeroInt Float {- ^ ap -} ->+   IOArray ZeroInt Float {- ^ afp -} ->+   IOArray ZeroInt CInt {- ^ ipiv -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ b -} ->+   Int {- ^ ldx -} ->+   IO (Array (ZeroInt,ZeroInt) Float, Float, Array ZeroInt Float, Array ZeroInt Float, Int)+spsvx fact uplo ap afp ipiv b ldx = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let afpDim0 = Call.sizes1 $ MutArray.shape afp+   let ipivDim0 = Call.sizes1 $ MutArray.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let n = ipivDim0+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "spsvx: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   Call.assert "spsvx: n*(n+1)`div`2 == afpDim0" (n*(n+1)`div`2 == afpDim0)+   x <- Call.newArray2 nrhs ldx+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (3*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      factPtr <- Call.char fact+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      apPtr <- Call.array ap+      afpPtr <- Call.ioarray afp+      ipivPtr <- Call.ioarray ipiv+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      rcondPtr <- Call.alloca+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.spsvx factPtr uploPtr nPtr nrhsPtr apPtr afpPtr ipivPtr bPtr ldbPtr xPtr ldxPtr rcondPtr ferrPtr berrPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,,,,)+         <*> Call.freezeArray x+         <*> peek rcondPtr+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssptrf.f>+sptrf ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt Float {- ^ ap -} ->+   IO (Array ZeroInt CInt, Int)+sptrf uplo n ap = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   Call.assert "sptrf: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   ipiv <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      ipivPtr <- Call.ioarray ipiv+      infoPtr <- Call.alloca+      liftIO $ FFI.sptrf uploPtr nPtr apPtr ipivPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssptri.f>+sptri ::+   Char {- ^ uplo -} ->+   IOArray ZeroInt Float {- ^ ap -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   IO (Int)+sptri uplo ap ipiv = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = ipivDim0+   Call.assert "sptri: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   work <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      ipivPtr <- Call.array ipiv+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.sptri uploPtr nPtr apPtr ipivPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssptrs.f>+sptrs ::+   Char {- ^ uplo -} ->+   Array ZeroInt Float {- ^ ap -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   IO (Int)+sptrs uplo ap ipiv b = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = ipivDim0+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "sptrs: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      apPtr <- Call.array ap+      ipivPtr <- Call.array ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.sptrs uploPtr nPtr nrhsPtr apPtr ipivPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sstebz.f>+stebz ::+   Char {- ^ range -} ->+   Char {- ^ order -} ->+   Float {- ^ vl -} ->+   Float {- ^ vu -} ->+   Int {- ^ il -} ->+   Int {- ^ iu -} ->+   Float {- ^ abstol -} ->+   Array ZeroInt Float {- ^ d -} ->+   Array ZeroInt Float {- ^ e -} ->+   IO (Int, Int, Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt, Int)+stebz range order vl vu il iu abstol d e = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let eDim0 = Call.sizes1 $ Array.shape e+   let n = dDim0+   Call.assert "stebz: n-1 == eDim0" (n-1 == eDim0)+   w <- Call.newArray1 n+   iblock <- Call.newArray1 n+   isplit <- Call.newArray1 n+   work <- Call.newArray1 (4*n)+   iwork <- Call.newArray1 (3*n)+   evalContT $ do+      rangePtr <- Call.char range+      orderPtr <- Call.char order+      nPtr <- Call.cint n+      vlPtr <- Call.float vl+      vuPtr <- Call.float vu+      ilPtr <- Call.cint il+      iuPtr <- Call.cint iu+      abstolPtr <- Call.float abstol+      dPtr <- Call.array d+      ePtr <- Call.array e+      mPtr <- Call.alloca+      nsplitPtr <- Call.alloca+      wPtr <- Call.ioarray w+      iblockPtr <- Call.ioarray iblock+      isplitPtr <- Call.ioarray isplit+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.stebz rangePtr orderPtr nPtr vlPtr vuPtr ilPtr iuPtr abstolPtr dPtr ePtr mPtr nsplitPtr wPtr iblockPtr isplitPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> fmap fromIntegral (peek mPtr)+         <*> fmap fromIntegral (peek nsplitPtr)+         <*> Call.freezeArray w+         <*> Call.freezeArray iblock+         <*> Call.freezeArray isplit+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sstedc.f>+stedc ::+   Char {- ^ compz -} ->+   IOArray ZeroInt Float {- ^ d -} ->+   IOArray ZeroInt Float {- ^ e -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ z -} ->+   Int {- ^ lwork -} ->+   Int {- ^ liwork -} ->+   IO (Int)+stedc compz d e z lwork liwork = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = dDim0+   let ldz = zDim1+   Call.assert "stedc: n-1 == eDim0" (n-1 == eDim0)+   Call.assert "stedc: n == zDim0" (n == zDim0)+   work <- Call.newArray1 (maximum[1,lwork])+   iwork <- Call.newArray1 (maximum[1,liwork])+   evalContT $ do+      compzPtr <- Call.char compz+      nPtr <- Call.cint n+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      infoPtr <- Call.alloca+      liftIO $ FFI.stedc compzPtr nPtr dPtr ePtr zPtr ldzPtr workPtr lworkPtr iworkPtr liworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sstegr.f>+stegr ::+   Char {- ^ jobz -} ->+   Char {- ^ range -} ->+   IOArray ZeroInt Float {- ^ d -} ->+   IOArray ZeroInt Float {- ^ e -} ->+   Float {- ^ vl -} ->+   Float {- ^ vu -} ->+   Int {- ^ il -} ->+   Int {- ^ iu -} ->+   Float {- ^ abstol -} ->+   Int {- ^ m -} ->+   Int {- ^ ldz -} ->+   Int {- ^ lwork -} ->+   Int {- ^ liwork -} ->+   IO (Int, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array ZeroInt CInt, Int)+stegr jobz range d e vl vu il iu abstol m ldz lwork liwork = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let n = dDim0+   Call.assert "stegr: n == eDim0" (n == eDim0)+   w <- Call.newArray1 n+   z <- Call.newArray2 (maximum[1,m]) ldz+   isuppz <- Call.newArray1 (2*maximum[1,m])+   work <- Call.newArray1 lwork+   iwork <- Call.newArray1 liwork+   evalContT $ do+      jobzPtr <- Call.char jobz+      rangePtr <- Call.char range+      nPtr <- Call.cint n+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      vlPtr <- Call.float vl+      vuPtr <- Call.float vu+      ilPtr <- Call.cint il+      iuPtr <- Call.cint iu+      abstolPtr <- Call.float abstol+      mPtr <- Call.alloca+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      isuppzPtr <- Call.ioarray isuppz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      infoPtr <- Call.alloca+      liftIO $ FFI.stegr jobzPtr rangePtr nPtr dPtr ePtr vlPtr vuPtr ilPtr iuPtr abstolPtr mPtr wPtr zPtr ldzPtr isuppzPtr workPtr lworkPtr iworkPtr liworkPtr infoPtr+      liftIO $ pure (,,,,)+         <*> fmap fromIntegral (peek mPtr)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> Call.freezeArray isuppz+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sstein.f>+stein ::+   Array ZeroInt Float {- ^ d -} ->+   Array ZeroInt Float {- ^ e -} ->+   Int {- ^ m -} ->+   Array ZeroInt Float {- ^ w -} ->+   Array ZeroInt CInt {- ^ iblock -} ->+   Array ZeroInt CInt {- ^ isplit -} ->+   Int {- ^ ldz -} ->+   IO (Array (ZeroInt,ZeroInt) Float, Array ZeroInt CInt, Int)+stein d e m w iblock isplit ldz = do+   let dDim0 = Call.sizes1 $ Array.shape d+   let eDim0 = Call.sizes1 $ Array.shape e+   let wDim0 = Call.sizes1 $ Array.shape w+   let iblockDim0 = Call.sizes1 $ Array.shape iblock+   let isplitDim0 = Call.sizes1 $ Array.shape isplit+   let n = dDim0+   Call.assert "stein: n-1 == eDim0" (n-1 == eDim0)+   Call.assert "stein: n == wDim0" (n == wDim0)+   Call.assert "stein: n == iblockDim0" (n == iblockDim0)+   Call.assert "stein: n == isplitDim0" (n == isplitDim0)+   z <- Call.newArray2 m ldz+   work <- Call.newArray1 (5*n)+   iwork <- Call.newArray1 n+   ifail <- Call.newArray1 m+   evalContT $ do+      nPtr <- Call.cint n+      dPtr <- Call.array d+      ePtr <- Call.array e+      mPtr <- Call.cint m+      wPtr <- Call.array w+      iblockPtr <- Call.array iblock+      isplitPtr <- Call.array isplit+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      ifailPtr <- Call.ioarray ifail+      infoPtr <- Call.alloca+      liftIO $ FFI.stein nPtr dPtr ePtr mPtr wPtr iblockPtr isplitPtr zPtr ldzPtr workPtr iworkPtr ifailPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray z+         <*> Call.freezeArray ifail+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sstemr.f>+stemr ::+   Char {- ^ jobz -} ->+   Char {- ^ range -} ->+   IOArray ZeroInt Float {- ^ d -} ->+   IOArray ZeroInt Float {- ^ e -} ->+   Float {- ^ vl -} ->+   Float {- ^ vu -} ->+   Int {- ^ il -} ->+   Int {- ^ iu -} ->+   Int {- ^ m -} ->+   Int {- ^ ldz -} ->+   Int {- ^ nzc -} ->+   Bool {- ^ tryrac -} ->+   Int {- ^ lwork -} ->+   Int {- ^ liwork -} ->+   IO (Int, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array ZeroInt CInt, Bool, Int)+stemr jobz range d e vl vu il iu m ldz nzc tryrac lwork liwork = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let n = dDim0+   Call.assert "stemr: n == eDim0" (n == eDim0)+   w <- Call.newArray1 n+   z <- Call.newArray2 (maximum[1,m]) ldz+   isuppz <- Call.newArray1 (2*maximum[1,m])+   work <- Call.newArray1 lwork+   iwork <- Call.newArray1 liwork+   evalContT $ do+      jobzPtr <- Call.char jobz+      rangePtr <- Call.char range+      nPtr <- Call.cint n+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      vlPtr <- Call.float vl+      vuPtr <- Call.float vu+      ilPtr <- Call.cint il+      iuPtr <- Call.cint iu+      mPtr <- Call.alloca+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      nzcPtr <- Call.cint nzc+      isuppzPtr <- Call.ioarray isuppz+      tryracPtr <- Call.bool tryrac+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      infoPtr <- Call.alloca+      liftIO $ FFI.stemr jobzPtr rangePtr nPtr dPtr ePtr vlPtr vuPtr ilPtr iuPtr mPtr wPtr zPtr ldzPtr nzcPtr isuppzPtr tryracPtr workPtr lworkPtr iworkPtr liworkPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> fmap fromIntegral (peek mPtr)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> Call.freezeArray isuppz+         <*> peek tryracPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssteqr.f>+steqr ::+   Char {- ^ compz -} ->+   IOArray ZeroInt Float {- ^ d -} ->+   IOArray ZeroInt Float {- ^ e -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ z -} ->+   IO (Int)+steqr compz d e z = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = dDim0+   let ldz = zDim1+   Call.assert "steqr: n-1 == eDim0" (n-1 == eDim0)+   Call.assert "steqr: n == zDim0" (n == zDim0)+   work <- Call.newArray1 (maximum[1,2*n-2])+   evalContT $ do+      compzPtr <- Call.char compz+      nPtr <- Call.cint n+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.steqr compzPtr nPtr dPtr ePtr zPtr ldzPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssterf.f>+sterf ::+   IOArray ZeroInt Float {- ^ d -} ->+   IOArray ZeroInt Float {- ^ e -} ->+   IO (Int)+sterf d e = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let n = dDim0+   Call.assert "sterf: n-1 == eDim0" (n-1 == eDim0)+   evalContT $ do+      nPtr <- Call.cint n+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      infoPtr <- Call.alloca+      liftIO $ FFI.sterf nPtr dPtr ePtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sstev.f>+stev ::+   Char {- ^ jobz -} ->+   IOArray ZeroInt Float {- ^ d -} ->+   IOArray ZeroInt Float {- ^ e -} ->+   Int {- ^ ldz -} ->+   IO (Array (ZeroInt,ZeroInt) Float, Int)+stev jobz d e ldz = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let n = dDim0+   Call.assert "stev: n-1 == eDim0" (n-1 == eDim0)+   z <- Call.newArray2 n ldz+   work <- Call.newArray1 (maximum[1,2*n-2])+   evalContT $ do+      jobzPtr <- Call.char jobz+      nPtr <- Call.cint n+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.stev jobzPtr nPtr dPtr ePtr zPtr ldzPtr workPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray z+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sstevd.f>+stevd ::+   Char {- ^ jobz -} ->+   IOArray ZeroInt Float {- ^ d -} ->+   IOArray ZeroInt Float {- ^ e -} ->+   Int {- ^ ldz -} ->+   Int {- ^ workSize -} ->+   Int {- ^ lwork -} ->+   Int {- ^ liwork -} ->+   IO (Array (ZeroInt,ZeroInt) Float, Int)+stevd jobz d e ldz workSize lwork liwork = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let n = dDim0+   Call.assert "stevd: n-1 == eDim0" (n-1 == eDim0)+   z <- Call.newArray2 n ldz+   work <- Call.newArray1 workSize+   iwork <- Call.newArray1 (maximum[1,liwork])+   evalContT $ do+      jobzPtr <- Call.char jobz+      nPtr <- Call.cint n+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      infoPtr <- Call.alloca+      liftIO $ FFI.stevd jobzPtr nPtr dPtr ePtr zPtr ldzPtr workPtr lworkPtr iworkPtr liworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray z+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sstevr.f>+stevr ::+   Char {- ^ jobz -} ->+   Char {- ^ range -} ->+   IOArray ZeroInt Float {- ^ d -} ->+   IOArray ZeroInt Float {- ^ e -} ->+   Float {- ^ vl -} ->+   Float {- ^ vu -} ->+   Int {- ^ il -} ->+   Int {- ^ iu -} ->+   Float {- ^ abstol -} ->+   Int {- ^ m -} ->+   Int {- ^ ldz -} ->+   Int {- ^ lwork -} ->+   Int {- ^ liwork -} ->+   IO (Int, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array ZeroInt CInt, Int)+stevr jobz range d e vl vu il iu abstol m ldz lwork liwork = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let n = dDim0+   Call.assert "stevr: maximum[1,n-1] == eDim0" (maximum[1,n-1] == eDim0)+   w <- Call.newArray1 n+   z <- Call.newArray2 (maximum[1,m]) ldz+   isuppz <- Call.newArray1 (2*maximum[1,m])+   work <- Call.newArray1 (maximum[1,lwork])+   iwork <- Call.newArray1 (maximum[1,liwork])+   evalContT $ do+      jobzPtr <- Call.char jobz+      rangePtr <- Call.char range+      nPtr <- Call.cint n+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      vlPtr <- Call.float vl+      vuPtr <- Call.float vu+      ilPtr <- Call.cint il+      iuPtr <- Call.cint iu+      abstolPtr <- Call.float abstol+      mPtr <- Call.alloca+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      isuppzPtr <- Call.ioarray isuppz+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      infoPtr <- Call.alloca+      liftIO $ FFI.stevr jobzPtr rangePtr nPtr dPtr ePtr vlPtr vuPtr ilPtr iuPtr abstolPtr mPtr wPtr zPtr ldzPtr isuppzPtr workPtr lworkPtr iworkPtr liworkPtr infoPtr+      liftIO $ pure (,,,,)+         <*> fmap fromIntegral (peek mPtr)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> Call.freezeArray isuppz+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sstevx.f>+stevx ::+   Char {- ^ jobz -} ->+   Char {- ^ range -} ->+   IOArray ZeroInt Float {- ^ d -} ->+   IOArray ZeroInt Float {- ^ e -} ->+   Float {- ^ vl -} ->+   Float {- ^ vu -} ->+   Int {- ^ il -} ->+   Int {- ^ iu -} ->+   Float {- ^ abstol -} ->+   Int {- ^ m -} ->+   Int {- ^ ldz -} ->+   IO (Int, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array ZeroInt CInt, Int)+stevx jobz range d e vl vu il iu abstol m ldz = do+   let dDim0 = Call.sizes1 $ MutArray.shape d+   let eDim0 = Call.sizes1 $ MutArray.shape e+   let n = dDim0+   Call.assert "stevx: maximum[1,n-1] == eDim0" (maximum[1,n-1] == eDim0)+   w <- Call.newArray1 n+   z <- Call.newArray2 (maximum[1,m]) ldz+   work <- Call.newArray1 (5*n)+   iwork <- Call.newArray1 (5*n)+   ifail <- Call.newArray1 n+   evalContT $ do+      jobzPtr <- Call.char jobz+      rangePtr <- Call.char range+      nPtr <- Call.cint n+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      vlPtr <- Call.float vl+      vuPtr <- Call.float vu+      ilPtr <- Call.cint il+      iuPtr <- Call.cint iu+      abstolPtr <- Call.float abstol+      mPtr <- Call.alloca+      wPtr <- Call.ioarray w+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      ifailPtr <- Call.ioarray ifail+      infoPtr <- Call.alloca+      liftIO $ FFI.stevx jobzPtr rangePtr nPtr dPtr ePtr vlPtr vuPtr ilPtr iuPtr abstolPtr mPtr wPtr zPtr ldzPtr workPtr iworkPtr ifailPtr infoPtr+      liftIO $ pure (,,,,)+         <*> fmap fromIntegral (peek mPtr)+         <*> Call.freezeArray w+         <*> Call.freezeArray z+         <*> Call.freezeArray ifail+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssycon.f>+sycon ::+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Float {- ^ anorm -} ->+   IO (Float, Int)+sycon uplo a ipiv anorm = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = aDim0+   let lda = aDim1+   Call.assert "sycon: n == ipivDim0" (n == ipivDim0)+   work <- Call.newArray1 (2*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.array ipiv+      anormPtr <- Call.float anorm+      rcondPtr <- Call.alloca+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.sycon uploPtr nPtr aPtr ldaPtr ipivPtr anormPtr rcondPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,)+         <*> peek rcondPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssyconv.f>+syconv ::+   Char {- ^ uplo -} ->+   Char {- ^ way -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   IO (Array ZeroInt Float, Int)+syconv uplo way a ipiv = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = aDim0+   let lda = aDim1+   Call.assert "syconv: n == ipivDim0" (n == ipivDim0)+   e <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      wayPtr <- Call.char way+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.array ipiv+      ePtr <- Call.ioarray e+      infoPtr <- Call.alloca+      liftIO $ FFI.syconv uploPtr wayPtr nPtr aPtr ldaPtr ipivPtr ePtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray e+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssyequb.f>+syequb ::+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IO (Array ZeroInt Float, Float, Float, Int)+syequb uplo a = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   s <- Call.newArray1 n+   work <- Call.newArray1 (2*n)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      sPtr <- Call.ioarray s+      scondPtr <- Call.alloca+      amaxPtr <- Call.alloca+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.syequb uploPtr nPtr aPtr ldaPtr sPtr scondPtr amaxPtr workPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray s+         <*> peek scondPtr+         <*> peek amaxPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssyrfs.f>+syrfs ::+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ af -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ x -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Int)+syrfs uplo a af ipiv b x = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (afDim0,afDim1) = Call.sizes2 $ Array.shape af+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (xDim0,xDim1) = Call.sizes2 $ MutArray.shape x+   let n = aDim0+   let lda = aDim1+   let ldaf = afDim1+   let nrhs = bDim0+   let ldb = bDim1+   let ldx = xDim1+   Call.assert "syrfs: n == afDim0" (n == afDim0)+   Call.assert "syrfs: n == ipivDim0" (n == ipivDim0)+   Call.assert "syrfs: nrhs == xDim0" (nrhs == xDim0)+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (3*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      afPtr <- Call.array af+      ldafPtr <- Call.cint ldaf+      ipivPtr <- Call.array ipiv+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.syrfs uploPtr nPtr nrhsPtr aPtr ldaPtr afPtr ldafPtr ipivPtr bPtr ldbPtr xPtr ldxPtr ferrPtr berrPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssysv.f>+sysv ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt CInt, Int)+sysv uplo a b lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   ipiv <- Call.newArray1 n+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.ioarray ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.sysv uploPtr nPtr nrhsPtr aPtr ldaPtr ipivPtr bPtr ldbPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssysvx.f>+sysvx ::+   Char {- ^ fact -} ->+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ af -} ->+   IOArray ZeroInt CInt {- ^ ipiv -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ b -} ->+   Int {- ^ ldx -} ->+   Int {- ^ lwork -} ->+   IO (Array (ZeroInt,ZeroInt) Float, Float, Array ZeroInt Float, Array ZeroInt Float, Int)+sysvx fact uplo a af ipiv b ldx lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (afDim0,afDim1) = Call.sizes2 $ MutArray.shape af+   let ipivDim0 = Call.sizes1 $ MutArray.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let n = aDim0+   let lda = aDim1+   let ldaf = afDim1+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "sysvx: n == afDim0" (n == afDim0)+   Call.assert "sysvx: n == ipivDim0" (n == ipivDim0)+   x <- Call.newArray2 nrhs ldx+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (maximum[1,lwork])+   iwork <- Call.newArray1 n+   evalContT $ do+      factPtr <- Call.char fact+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      afPtr <- Call.ioarray af+      ldafPtr <- Call.cint ldaf+      ipivPtr <- Call.ioarray ipiv+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.ioarray x+      ldxPtr <- Call.cint ldx+      rcondPtr <- Call.alloca+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.sysvx factPtr uploPtr nPtr nrhsPtr aPtr ldaPtr afPtr ldafPtr ipivPtr bPtr ldbPtr xPtr ldxPtr rcondPtr ferrPtr berrPtr workPtr lworkPtr iworkPtr infoPtr+      liftIO $ pure (,,,,)+         <*> Call.freezeArray x+         <*> peek rcondPtr+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssyswapr.f>+syswapr ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Int {- ^ i1 -} ->+   Int {- ^ i2 -} ->+   IO ()+syswapr uplo a i1 i2 = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      i1Ptr <- Call.cint i1+      i2Ptr <- Call.cint i2+      liftIO $ FFI.syswapr uploPtr nPtr aPtr ldaPtr i1Ptr i2Ptr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssytd2.f>+sytd2 ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)+sytd2 uplo a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   d <- Call.newArray1 n+   e <- Call.newArray1 (n-1)+   tau <- Call.newArray1 (n-1)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      tauPtr <- Call.ioarray tau+      infoPtr <- Call.alloca+      liftIO $ FFI.sytd2 uploPtr nPtr aPtr ldaPtr dPtr ePtr tauPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray d+         <*> Call.freezeArray e+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssytf2.f>+sytf2 ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IO (Array ZeroInt CInt, Int)+sytf2 uplo a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   ipiv <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.ioarray ipiv+      infoPtr <- Call.alloca+      liftIO $ FFI.sytf2 uploPtr nPtr aPtr ldaPtr ipivPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssytrd.f>+sytrd ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)+sytrd uplo a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   d <- Call.newArray1 n+   e <- Call.newArray1 (n-1)+   tau <- Call.newArray1 (n-1)+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      dPtr <- Call.ioarray d+      ePtr <- Call.ioarray e+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.sytrd uploPtr nPtr aPtr ldaPtr dPtr ePtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray d+         <*> Call.freezeArray e+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssytrf.f>+sytrf ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt CInt, Int)+sytrf uplo a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   ipiv <- Call.newArray1 n+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.ioarray ipiv+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.sytrf uploPtr nPtr aPtr ldaPtr ipivPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ipiv+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssytri.f>+sytri ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   IO (Int)+sytri uplo a ipiv = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = aDim0+   let lda = aDim1+   Call.assert "sytri: n == ipivDim0" (n == ipivDim0)+   work <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.array ipiv+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.sytri uploPtr nPtr aPtr ldaPtr ipivPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssytri2.f>+sytri2 ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Int {- ^ nb -} ->+   Int {- ^ lwork -} ->+   IO (Int)+sytri2 uplo a ipiv nb lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = aDim0+   let lda = aDim1+   Call.assert "sytri2: n == ipivDim0" (n == ipivDim0)+   work <- Call.newArray1 (n+nb+1)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.array ipiv+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.sytri2 uploPtr nPtr aPtr ldaPtr ipivPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssytri2x.f>+sytri2x ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   Int {- ^ nb -} ->+   IO (Int)+sytri2x uplo a ipiv nb = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let n = aDim0+   let lda = aDim1+   Call.assert "sytri2x: n == ipivDim0" (n == ipivDim0)+   work <- Call.newArray2 (nb+3) (n+nb+1)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.array ipiv+      workPtr <- Call.ioarray work+      nbPtr <- Call.cint nb+      infoPtr <- Call.alloca+      liftIO $ FFI.sytri2x uploPtr nPtr aPtr ldaPtr ipivPtr workPtr nbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssytrs.f>+sytrs ::+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   IO (Int)+sytrs uplo a ipiv b = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "sytrs: n == ipivDim0" (n == ipivDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.array ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.sytrs uploPtr nPtr nrhsPtr aPtr ldaPtr ipivPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssytrs2.f>+sytrs2 ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Array ZeroInt CInt {- ^ ipiv -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   IO (Int)+sytrs2 uplo a ipiv b = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let ipivDim0 = Call.sizes1 $ Array.shape ipiv+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "sytrs2: n == ipivDim0" (n == ipivDim0)+   work <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      ipivPtr <- Call.array ipiv+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.sytrs2 uploPtr nPtr nrhsPtr aPtr ldaPtr ipivPtr bPtr ldbPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/stbcon.f>+tbcon ::+   Char {- ^ norm -} ->+   Char {- ^ uplo -} ->+   Char {- ^ diag -} ->+   Int {- ^ kd -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ ab -} ->+   IO (Float, Int)+tbcon norm uplo diag kd ab = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let n = abDim0+   let ldab = abDim1+   work <- Call.newArray1 (3*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      normPtr <- Call.char norm+      uploPtr <- Call.char uplo+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      rcondPtr <- Call.alloca+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.tbcon normPtr uploPtr diagPtr nPtr kdPtr abPtr ldabPtr rcondPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,)+         <*> peek rcondPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/stbrfs.f>+tbrfs ::+   Char {- ^ uplo -} ->+   Char {- ^ trans -} ->+   Char {- ^ diag -} ->+   Int {- ^ kd -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ ab -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ b -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ x -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Int)+tbrfs uplo trans diag kd ab b x = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (xDim0,xDim1) = Call.sizes2 $ Array.shape x+   let n = abDim0+   let ldab = abDim1+   let nrhs = bDim0+   let ldb = bDim1+   let ldx = xDim1+   Call.assert "tbrfs: nrhs == xDim0" (nrhs == xDim0)+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (3*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      transPtr <- Call.char trans+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      nrhsPtr <- Call.cint nrhs+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.array x+      ldxPtr <- Call.cint ldx+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.tbrfs uploPtr transPtr diagPtr nPtr kdPtr nrhsPtr abPtr ldabPtr bPtr ldbPtr xPtr ldxPtr ferrPtr berrPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/stbtrs.f>+tbtrs ::+   Char {- ^ uplo -} ->+   Char {- ^ trans -} ->+   Char {- ^ diag -} ->+   Int {- ^ kd -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ ab -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   IO (Int)+tbtrs uplo trans diag kd ab b = do+   let (abDim0,abDim1) = Call.sizes2 $ Array.shape ab+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = abDim0+   let ldab = abDim1+   let nrhs = bDim0+   let ldb = bDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      transPtr <- Call.char trans+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      kdPtr <- Call.cint kd+      nrhsPtr <- Call.cint nrhs+      abPtr <- Call.array ab+      ldabPtr <- Call.cint ldab+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.tbtrs uploPtr transPtr diagPtr nPtr kdPtr nrhsPtr abPtr ldabPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/stfsm.f>+tfsm ::+   Char {- ^ transr -} ->+   Char {- ^ side -} ->+   Char {- ^ uplo -} ->+   Char {- ^ trans -} ->+   Char {- ^ diag -} ->+   Int {- ^ m -} ->+   Float {- ^ alpha -} ->+   Array ZeroInt Float {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   IO ()+tfsm transr side uplo trans diag m alpha a b = do+   let aDim0 = Call.sizes1 $ Array.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let _nt = aDim0+   let n = bDim0+   let ldb = bDim1+   evalContT $ do+      transrPtr <- Call.char transr+      sidePtr <- Call.char side+      uploPtr <- Call.char uplo+      transPtr <- Call.char trans+      diagPtr <- Call.char diag+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      alphaPtr <- Call.float alpha+      aPtr <- Call.array a+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      liftIO $ FFI.tfsm transrPtr sidePtr uploPtr transPtr diagPtr mPtr nPtr alphaPtr aPtr bPtr ldbPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/stftri.f>+tftri ::+   Char {- ^ transr -} ->+   Char {- ^ uplo -} ->+   Char {- ^ diag -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt Float {- ^ a -} ->+   IO (Int)+tftri transr uplo diag n a = do+   let aDim0 = Call.sizes1 $ MutArray.shape a+   let _nt = aDim0+   evalContT $ do+      transrPtr <- Call.char transr+      uploPtr <- Call.char uplo+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      infoPtr <- Call.alloca+      liftIO $ FFI.tftri transrPtr uploPtr diagPtr nPtr aPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/stfttp.f>+tfttp ::+   Char {- ^ transr -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Array ZeroInt Float {- ^ arf -} ->+   IO (Array ZeroInt Float, Int)+tfttp transr uplo n arf = do+   let arfDim0 = Call.sizes1 $ Array.shape arf+   Call.assert "tfttp: n*(n+1)`div`2 == arfDim0" (n*(n+1)`div`2 == arfDim0)+   ap <- Call.newArray1 (n*(n+1)`div`2)+   evalContT $ do+      transrPtr <- Call.char transr+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      arfPtr <- Call.array arf+      apPtr <- Call.ioarray ap+      infoPtr <- Call.alloca+      liftIO $ FFI.tfttp transrPtr uploPtr nPtr arfPtr apPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ap+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/stfttr.f>+tfttr ::+   Char {- ^ transr -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Array ZeroInt Float {- ^ arf -} ->+   Int {- ^ lda -} ->+   IO (Array (ZeroInt,ZeroInt) Float, Int)+tfttr transr uplo n arf lda = do+   let arfDim0 = Call.sizes1 $ Array.shape arf+   Call.assert "tfttr: n*(n+1)`div`2 == arfDim0" (n*(n+1)`div`2 == arfDim0)+   a <- Call.newArray2 n lda+   evalContT $ do+      transrPtr <- Call.char transr+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      arfPtr <- Call.array arf+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      infoPtr <- Call.alloca+      liftIO $ FFI.tfttr transrPtr uploPtr nPtr arfPtr aPtr ldaPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray a+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/stgevc.f>+tgevc ::+   Char {- ^ side -} ->+   Char {- ^ howmny -} ->+   Array ZeroInt Bool {- ^ select -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ s -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ p -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ vl -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ vr -} ->+   IO (Int, Int)+tgevc side howmny select s p vl vr = do+   let selectDim0 = Call.sizes1 $ Array.shape select+   let (sDim0,sDim1) = Call.sizes2 $ Array.shape s+   let (pDim0,pDim1) = Call.sizes2 $ Array.shape p+   let (vlDim0,vlDim1) = Call.sizes2 $ MutArray.shape vl+   let (vrDim0,vrDim1) = Call.sizes2 $ MutArray.shape vr+   let n = selectDim0+   let lds = sDim1+   let ldp = pDim1+   let mm = vlDim0+   let ldvl = vlDim1+   let ldvr = vrDim1+   Call.assert "tgevc: n == sDim0" (n == sDim0)+   Call.assert "tgevc: n == pDim0" (n == pDim0)+   Call.assert "tgevc: mm == vrDim0" (mm == vrDim0)+   work <- Call.newArray1 (6*n)+   evalContT $ do+      sidePtr <- Call.char side+      howmnyPtr <- Call.char howmny+      selectPtr <- Call.array select+      nPtr <- Call.cint n+      sPtr <- Call.array s+      ldsPtr <- Call.cint lds+      pPtr <- Call.array p+      ldpPtr <- Call.cint ldp+      vlPtr <- Call.ioarray vl+      ldvlPtr <- Call.cint ldvl+      vrPtr <- Call.ioarray vr+      ldvrPtr <- Call.cint ldvr+      mmPtr <- Call.cint mm+      mPtr <- Call.alloca+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.tgevc sidePtr howmnyPtr selectPtr nPtr sPtr ldsPtr pPtr ldpPtr vlPtr ldvlPtr vrPtr ldvrPtr mmPtr mPtr workPtr infoPtr+      liftIO $ pure (,)+         <*> fmap fromIntegral (peek mPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/stgex2.f>+tgex2 ::+   Bool {- ^ wantq -} ->+   Bool {- ^ wantz -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ q -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ z -} ->+   Int {- ^ j1 -} ->+   Int {- ^ n1 -} ->+   Int {- ^ n2 -} ->+   Int {- ^ lwork -} ->+   IO (Int)+tgex2 wantq wantz a b q z j1 n1 n2 lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   let ldq = qDim1+   let ldz = zDim1+   Call.assert "tgex2: n == bDim0" (n == bDim0)+   Call.assert "tgex2: n == qDim0" (n == qDim0)+   Call.assert "tgex2: n == zDim0" (n == zDim0)+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      wantqPtr <- Call.bool wantq+      wantzPtr <- Call.bool wantz+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      j1Ptr <- Call.cint j1+      n1Ptr <- Call.cint n1+      n2Ptr <- Call.cint n2+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.tgex2 wantqPtr wantzPtr nPtr aPtr ldaPtr bPtr ldbPtr qPtr ldqPtr zPtr ldzPtr j1Ptr n1Ptr n2Ptr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/stgexc.f>+tgexc ::+   Bool {- ^ wantq -} ->+   Bool {- ^ wantz -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ q -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ z -} ->+   Int {- ^ ifst -} ->+   Int {- ^ ilst -} ->+   Int {- ^ lwork -} ->+   IO (Int, Int, Int)+tgexc wantq wantz a b q z ifst ilst lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   let ldq = qDim1+   let ldz = zDim1+   Call.assert "tgexc: n == bDim0" (n == bDim0)+   Call.assert "tgexc: n == qDim0" (n == qDim0)+   Call.assert "tgexc: n == zDim0" (n == zDim0)+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      wantqPtr <- Call.bool wantq+      wantzPtr <- Call.bool wantz+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      ifstPtr <- Call.cint ifst+      ilstPtr <- Call.cint ilst+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.tgexc wantqPtr wantzPtr nPtr aPtr ldaPtr bPtr ldbPtr qPtr ldqPtr zPtr ldzPtr ifstPtr ilstPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,,)+         <*> fmap fromIntegral (peek ifstPtr)+         <*> fmap fromIntegral (peek ilstPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/stgsen.f>+tgsen ::+   Int {- ^ ijob -} ->+   Bool {- ^ wantq -} ->+   Bool {- ^ wantz -} ->+   Array ZeroInt Bool {- ^ select -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ q -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ z -} ->+   Int {- ^ lwork -} ->+   Int {- ^ liwork -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Array ZeroInt Float, Int)+tgsen ijob wantq wantz select a b q z lwork liwork = do+   let selectDim0 = Call.sizes1 $ Array.shape select+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let (zDim0,zDim1) = Call.sizes2 $ MutArray.shape z+   let n = selectDim0+   let lda = aDim1+   let ldb = bDim1+   let ldq = qDim1+   let ldz = zDim1+   Call.assert "tgsen: n == aDim0" (n == aDim0)+   Call.assert "tgsen: n == bDim0" (n == bDim0)+   Call.assert "tgsen: n == qDim0" (n == qDim0)+   Call.assert "tgsen: n == zDim0" (n == zDim0)+   alphar <- Call.newArray1 n+   alphai <- Call.newArray1 n+   beta <- Call.newArray1 n+   dif <- Call.newArray1 2+   work <- Call.newArray1 (maximum[1,lwork])+   iwork <- Call.newArray1 (maximum[1,liwork])+   evalContT $ do+      ijobPtr <- Call.cint ijob+      wantqPtr <- Call.bool wantq+      wantzPtr <- Call.bool wantz+      selectPtr <- Call.array select+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      alpharPtr <- Call.ioarray alphar+      alphaiPtr <- Call.ioarray alphai+      betaPtr <- Call.ioarray beta+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      zPtr <- Call.ioarray z+      ldzPtr <- Call.cint ldz+      mPtr <- Call.alloca+      plPtr <- Call.alloca+      prPtr <- Call.alloca+      difPtr <- Call.ioarray dif+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      infoPtr <- Call.alloca+      liftIO $ FFI.tgsen ijobPtr wantqPtr wantzPtr selectPtr nPtr aPtr ldaPtr bPtr ldbPtr alpharPtr alphaiPtr betaPtr qPtr ldqPtr zPtr ldzPtr mPtr plPtr prPtr difPtr workPtr lworkPtr iworkPtr liworkPtr infoPtr+      liftIO $ pure (,,,,,,,)+         <*> Call.freezeArray alphar+         <*> Call.freezeArray alphai+         <*> Call.freezeArray beta+         <*> fmap fromIntegral (peek mPtr)+         <*> peek plPtr+         <*> peek prPtr+         <*> Call.freezeArray dif+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/stgsja.f>+tgsja ::+   Char {- ^ jobu -} ->+   Char {- ^ jobv -} ->+   Char {- ^ jobq -} ->+   Int {- ^ k -} ->+   Int {- ^ l -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   Float {- ^ tola -} ->+   Float {- ^ tolb -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ u -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ v -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ q -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)+tgsja jobu jobv jobq k l a b tola tolb u v q = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let (uDim0,uDim1) = Call.sizes2 $ MutArray.shape u+   let (vDim0,vDim1) = Call.sizes2 $ MutArray.shape v+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let n = aDim0+   let lda = aDim1+   let ldb = bDim1+   let m = uDim0+   let ldu = uDim1+   let p = vDim0+   let ldv = vDim1+   let ldq = qDim1+   Call.assert "tgsja: n == bDim0" (n == bDim0)+   Call.assert "tgsja: n == qDim0" (n == qDim0)+   alpha <- Call.newArray1 n+   beta <- Call.newArray1 n+   work <- Call.newArray1 (2*n)+   evalContT $ do+      jobuPtr <- Call.char jobu+      jobvPtr <- Call.char jobv+      jobqPtr <- Call.char jobq+      mPtr <- Call.cint m+      pPtr <- Call.cint p+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      lPtr <- Call.cint l+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      tolaPtr <- Call.float tola+      tolbPtr <- Call.float tolb+      alphaPtr <- Call.ioarray alpha+      betaPtr <- Call.ioarray beta+      uPtr <- Call.ioarray u+      lduPtr <- Call.cint ldu+      vPtr <- Call.ioarray v+      ldvPtr <- Call.cint ldv+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      workPtr <- Call.ioarray work+      ncyclePtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.tgsja jobuPtr jobvPtr jobqPtr mPtr pPtr nPtr kPtr lPtr aPtr ldaPtr bPtr ldbPtr tolaPtr tolbPtr alphaPtr betaPtr uPtr lduPtr vPtr ldvPtr qPtr ldqPtr workPtr ncyclePtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray alpha+         <*> Call.freezeArray beta+         <*> fmap fromIntegral (peek ncyclePtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/stgsna.f>+tgsna ::+   Char {- ^ job -} ->+   Char {- ^ howmny -} ->+   Array ZeroInt Bool {- ^ select -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ b -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ vl -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ vr -} ->+   Int {- ^ mm -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)+tgsna job howmny select a b vl vr mm lwork = do+   let selectDim0 = Call.sizes1 $ Array.shape select+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (vlDim0,vlDim1) = Call.sizes2 $ Array.shape vl+   let (vrDim0,vrDim1) = Call.sizes2 $ Array.shape vr+   let n = selectDim0+   let lda = aDim1+   let ldb = bDim1+   let m = vlDim0+   let ldvl = vlDim1+   let ldvr = vrDim1+   Call.assert "tgsna: n == aDim0" (n == aDim0)+   Call.assert "tgsna: n == bDim0" (n == bDim0)+   Call.assert "tgsna: m == vrDim0" (m == vrDim0)+   s <- Call.newArray1 mm+   dif <- Call.newArray1 mm+   work <- Call.newArray1 (maximum[1,lwork])+   iwork <- Call.newArray1 (n+6)+   evalContT $ do+      jobPtr <- Call.char job+      howmnyPtr <- Call.char howmny+      selectPtr <- Call.array select+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      vlPtr <- Call.array vl+      ldvlPtr <- Call.cint ldvl+      vrPtr <- Call.array vr+      ldvrPtr <- Call.cint ldvr+      sPtr <- Call.ioarray s+      difPtr <- Call.ioarray dif+      mmPtr <- Call.cint mm+      mPtr <- Call.alloca+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.tgsna jobPtr howmnyPtr selectPtr nPtr aPtr ldaPtr bPtr ldbPtr vlPtr ldvlPtr vrPtr ldvrPtr sPtr difPtr mmPtr mPtr workPtr lworkPtr iworkPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray s+         <*> Call.freezeArray dif+         <*> fmap fromIntegral (peek mPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/stgsy2.f>+tgsy2 ::+   Char {- ^ trans -} ->+   Int {- ^ ijob -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ c -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ d -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ e -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ f -} ->+   Float {- ^ rdsum -} ->+   Float {- ^ rdscal -} ->+   IO (Float, Float, Float, Int, Int)+tgsy2 trans ijob a b c d e f rdsum rdscal = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let (dDim0,dDim1) = Call.sizes2 $ Array.shape d+   let (eDim0,eDim1) = Call.sizes2 $ Array.shape e+   let (fDim0,fDim1) = Call.sizes2 $ MutArray.shape f+   let m = aDim0+   let lda = aDim1+   let n = bDim0+   let ldb = bDim1+   let ldc = cDim1+   let ldd = dDim1+   let lde = eDim1+   let ldf = fDim1+   Call.assert "tgsy2: n == cDim0" (n == cDim0)+   Call.assert "tgsy2: m == dDim0" (m == dDim0)+   Call.assert "tgsy2: n == eDim0" (n == eDim0)+   Call.assert "tgsy2: n == fDim0" (n == fDim0)+   iwork <- Call.newArray1 (m+n+2)+   evalContT $ do+      transPtr <- Call.char trans+      ijobPtr <- Call.cint ijob+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      dPtr <- Call.array d+      lddPtr <- Call.cint ldd+      ePtr <- Call.array e+      ldePtr <- Call.cint lde+      fPtr <- Call.ioarray f+      ldfPtr <- Call.cint ldf+      scalePtr <- Call.alloca+      rdsumPtr <- Call.float rdsum+      rdscalPtr <- Call.float rdscal+      iworkPtr <- Call.ioarray iwork+      pqPtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.tgsy2 transPtr ijobPtr mPtr nPtr aPtr ldaPtr bPtr ldbPtr cPtr ldcPtr dPtr lddPtr ePtr ldePtr fPtr ldfPtr scalePtr rdsumPtr rdscalPtr iworkPtr pqPtr infoPtr+      liftIO $ pure (,,,,)+         <*> peek scalePtr+         <*> peek rdsumPtr+         <*> peek rdscalPtr+         <*> fmap fromIntegral (peek pqPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/stgsyl.f>+tgsyl ::+   Char {- ^ trans -} ->+   Int {- ^ ijob -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ c -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ d -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ e -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ f -} ->+   Int {- ^ lwork -} ->+   IO (Float, Float, Int)+tgsyl trans ijob a b c d e f lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let (dDim0,dDim1) = Call.sizes2 $ Array.shape d+   let (eDim0,eDim1) = Call.sizes2 $ Array.shape e+   let (fDim0,fDim1) = Call.sizes2 $ MutArray.shape f+   let m = aDim0+   let lda = aDim1+   let n = bDim0+   let ldb = bDim1+   let ldc = cDim1+   let ldd = dDim1+   let lde = eDim1+   let ldf = fDim1+   Call.assert "tgsyl: n == cDim0" (n == cDim0)+   Call.assert "tgsyl: m == dDim0" (m == dDim0)+   Call.assert "tgsyl: n == eDim0" (n == eDim0)+   Call.assert "tgsyl: n == fDim0" (n == fDim0)+   work <- Call.newArray1 (maximum[1,lwork])+   iwork <- Call.newArray1 (m+n+6)+   evalContT $ do+      transPtr <- Call.char trans+      ijobPtr <- Call.cint ijob+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      dPtr <- Call.array d+      lddPtr <- Call.cint ldd+      ePtr <- Call.array e+      ldePtr <- Call.cint lde+      fPtr <- Call.ioarray f+      ldfPtr <- Call.cint ldf+      scalePtr <- Call.alloca+      difPtr <- Call.alloca+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.tgsyl transPtr ijobPtr mPtr nPtr aPtr ldaPtr bPtr ldbPtr cPtr ldcPtr dPtr lddPtr ePtr ldePtr fPtr ldfPtr scalePtr difPtr workPtr lworkPtr iworkPtr infoPtr+      liftIO $ pure (,,)+         <*> peek scalePtr+         <*> peek difPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/stpcon.f>+tpcon ::+   Char {- ^ norm -} ->+   Char {- ^ uplo -} ->+   Char {- ^ diag -} ->+   Int {- ^ n -} ->+   Array ZeroInt Float {- ^ ap -} ->+   IO (Float, Int)+tpcon norm uplo diag n ap = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   Call.assert "tpcon: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   work <- Call.newArray1 (3*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      normPtr <- Call.char norm+      uploPtr <- Call.char uplo+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      apPtr <- Call.array ap+      rcondPtr <- Call.alloca+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.tpcon normPtr uploPtr diagPtr nPtr apPtr rcondPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,)+         <*> peek rcondPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/stprfs.f>+tprfs ::+   Char {- ^ uplo -} ->+   Char {- ^ trans -} ->+   Char {- ^ diag -} ->+   Int {- ^ n -} ->+   Array ZeroInt Float {- ^ ap -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ b -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ x -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Int)+tprfs uplo trans diag n ap b x = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (xDim0,xDim1) = Call.sizes2 $ Array.shape x+   let nrhs = bDim0+   let ldb = bDim1+   let ldx = xDim1+   Call.assert "tprfs: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   Call.assert "tprfs: nrhs == xDim0" (nrhs == xDim0)+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (3*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      transPtr <- Call.char trans+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      apPtr <- Call.array ap+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.array x+      ldxPtr <- Call.cint ldx+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.tprfs uploPtr transPtr diagPtr nPtr nrhsPtr apPtr bPtr ldbPtr xPtr ldxPtr ferrPtr berrPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/stptri.f>+tptri ::+   Char {- ^ uplo -} ->+   Char {- ^ diag -} ->+   Int {- ^ n -} ->+   IOArray ZeroInt Float {- ^ ap -} ->+   IO (Int)+tptri uplo diag n ap = do+   let apDim0 = Call.sizes1 $ MutArray.shape ap+   Call.assert "tptri: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      apPtr <- Call.ioarray ap+      infoPtr <- Call.alloca+      liftIO $ FFI.tptri uploPtr diagPtr nPtr apPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/stptrs.f>+tptrs ::+   Char {- ^ uplo -} ->+   Char {- ^ trans -} ->+   Char {- ^ diag -} ->+   Int {- ^ n -} ->+   Array ZeroInt Float {- ^ ap -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   IO (Int)+tptrs uplo trans diag n ap b = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let nrhs = bDim0+   let ldb = bDim1+   Call.assert "tptrs: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   evalContT $ do+      uploPtr <- Call.char uplo+      transPtr <- Call.char trans+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      apPtr <- Call.array ap+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.tptrs uploPtr transPtr diagPtr nPtr nrhsPtr apPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/stpttf.f>+tpttf ::+   Char {- ^ transr -} ->+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Array ZeroInt Float {- ^ ap -} ->+   IO (Array ZeroInt Float, Int)+tpttf transr uplo n ap = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   Call.assert "tpttf: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   arf <- Call.newArray1 (n*(n+1)`div`2)+   evalContT $ do+      transrPtr <- Call.char transr+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.array ap+      arfPtr <- Call.ioarray arf+      infoPtr <- Call.alloca+      liftIO $ FFI.tpttf transrPtr uploPtr nPtr apPtr arfPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray arf+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/stpttr.f>+tpttr ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Array ZeroInt Float {- ^ ap -} ->+   Int {- ^ lda -} ->+   IO (Array (ZeroInt,ZeroInt) Float, Int)+tpttr uplo n ap lda = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   Call.assert "tpttr: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   a <- Call.newArray2 n lda+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.array ap+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      infoPtr <- Call.alloca+      liftIO $ FFI.tpttr uploPtr nPtr apPtr aPtr ldaPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray a+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/strcon.f>+trcon ::+   Char {- ^ norm -} ->+   Char {- ^ uplo -} ->+   Char {- ^ diag -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IO (Float, Int)+trcon norm uplo diag a = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   work <- Call.newArray1 (3*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      normPtr <- Call.char norm+      uploPtr <- Call.char uplo+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      rcondPtr <- Call.alloca+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.trcon normPtr uploPtr diagPtr nPtr aPtr ldaPtr rcondPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,)+         <*> peek rcondPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/strevc.f>+trevc ::+   Char {- ^ side -} ->+   Char {- ^ howmny -} ->+   IOArray ZeroInt Bool {- ^ select -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ t -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ vl -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ vr -} ->+   IO (Int, Int)+trevc side howmny select t vl vr = do+   let selectDim0 = Call.sizes1 $ MutArray.shape select+   let (tDim0,tDim1) = Call.sizes2 $ Array.shape t+   let (vlDim0,vlDim1) = Call.sizes2 $ MutArray.shape vl+   let (vrDim0,vrDim1) = Call.sizes2 $ MutArray.shape vr+   let n = selectDim0+   let ldt = tDim1+   let mm = vlDim0+   let ldvl = vlDim1+   let ldvr = vrDim1+   Call.assert "trevc: n == tDim0" (n == tDim0)+   Call.assert "trevc: mm == vrDim0" (mm == vrDim0)+   work <- Call.newArray1 (3*n)+   evalContT $ do+      sidePtr <- Call.char side+      howmnyPtr <- Call.char howmny+      selectPtr <- Call.ioarray select+      nPtr <- Call.cint n+      tPtr <- Call.array t+      ldtPtr <- Call.cint ldt+      vlPtr <- Call.ioarray vl+      ldvlPtr <- Call.cint ldvl+      vrPtr <- Call.ioarray vr+      ldvrPtr <- Call.cint ldvr+      mmPtr <- Call.cint mm+      mPtr <- Call.alloca+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.trevc sidePtr howmnyPtr selectPtr nPtr tPtr ldtPtr vlPtr ldvlPtr vrPtr ldvrPtr mmPtr mPtr workPtr infoPtr+      liftIO $ pure (,)+         <*> fmap fromIntegral (peek mPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/strexc.f>+trexc ::+   Char {- ^ compq -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ t -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ q -} ->+   Int {- ^ ifst -} ->+   Int {- ^ ilst -} ->+   IO (Int, Int, Int)+trexc compq t q ifst ilst = do+   let (tDim0,tDim1) = Call.sizes2 $ MutArray.shape t+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let n = tDim0+   let ldt = tDim1+   let ldq = qDim1+   Call.assert "trexc: n == qDim0" (n == qDim0)+   work <- Call.newArray1 n+   evalContT $ do+      compqPtr <- Call.char compq+      nPtr <- Call.cint n+      tPtr <- Call.ioarray t+      ldtPtr <- Call.cint ldt+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      ifstPtr <- Call.cint ifst+      ilstPtr <- Call.cint ilst+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.trexc compqPtr nPtr tPtr ldtPtr qPtr ldqPtr ifstPtr ilstPtr workPtr infoPtr+      liftIO $ pure (,,)+         <*> fmap fromIntegral (peek ifstPtr)+         <*> fmap fromIntegral (peek ilstPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/strrfs.f>+trrfs ::+   Char {- ^ uplo -} ->+   Char {- ^ trans -} ->+   Char {- ^ diag -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ b -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ x -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Int)+trrfs uplo trans diag a b x = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (xDim0,xDim1) = Call.sizes2 $ Array.shape x+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   let ldx = xDim1+   Call.assert "trrfs: nrhs == xDim0" (nrhs == xDim0)+   ferr <- Call.newArray1 nrhs+   berr <- Call.newArray1 nrhs+   work <- Call.newArray1 (3*n)+   iwork <- Call.newArray1 n+   evalContT $ do+      uploPtr <- Call.char uplo+      transPtr <- Call.char trans+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      xPtr <- Call.array x+      ldxPtr <- Call.cint ldx+      ferrPtr <- Call.ioarray ferr+      berrPtr <- Call.ioarray berr+      workPtr <- Call.ioarray work+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.trrfs uploPtr transPtr diagPtr nPtr nrhsPtr aPtr ldaPtr bPtr ldbPtr xPtr ldxPtr ferrPtr berrPtr workPtr iworkPtr infoPtr+      liftIO $ pure (,,)+         <*> Call.freezeArray ferr+         <*> Call.freezeArray berr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/strsen.f>+trsen ::+   Char {- ^ job -} ->+   Char {- ^ compq -} ->+   Array ZeroInt Bool {- ^ select -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ t -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ q -} ->+   Int {- ^ lwork -} ->+   Int {- ^ liwork -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)+trsen job compq select t q lwork liwork = do+   let selectDim0 = Call.sizes1 $ Array.shape select+   let (tDim0,tDim1) = Call.sizes2 $ MutArray.shape t+   let (qDim0,qDim1) = Call.sizes2 $ MutArray.shape q+   let n = selectDim0+   let ldt = tDim1+   let ldq = qDim1+   Call.assert "trsen: n == tDim0" (n == tDim0)+   Call.assert "trsen: n == qDim0" (n == qDim0)+   wr <- Call.newArray1 n+   wi <- Call.newArray1 n+   work <- Call.newArray1 (maximum[1,lwork])+   iwork <- Call.newArray1 (maximum[1,liwork])+   evalContT $ do+      jobPtr <- Call.char job+      compqPtr <- Call.char compq+      selectPtr <- Call.array select+      nPtr <- Call.cint n+      tPtr <- Call.ioarray t+      ldtPtr <- Call.cint ldt+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      wrPtr <- Call.ioarray wr+      wiPtr <- Call.ioarray wi+      mPtr <- Call.alloca+      sPtr <- Call.alloca+      sepPtr <- Call.alloca+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      iworkPtr <- Call.ioarray iwork+      liworkPtr <- Call.cint liwork+      infoPtr <- Call.alloca+      liftIO $ FFI.trsen jobPtr compqPtr selectPtr nPtr tPtr ldtPtr qPtr ldqPtr wrPtr wiPtr mPtr sPtr sepPtr workPtr lworkPtr iworkPtr liworkPtr infoPtr+      liftIO $ pure (,,,,,)+         <*> Call.freezeArray wr+         <*> Call.freezeArray wi+         <*> fmap fromIntegral (peek mPtr)+         <*> peek sPtr+         <*> peek sepPtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/strsna.f>+trsna ::+   Char {- ^ job -} ->+   Char {- ^ howmny -} ->+   Array ZeroInt Bool {- ^ select -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ t -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ vl -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ vr -} ->+   Int {- ^ mm -} ->+   Int {- ^ ldwork -} ->+   IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)+trsna job howmny select t vl vr mm ldwork = do+   let selectDim0 = Call.sizes1 $ Array.shape select+   let (tDim0,tDim1) = Call.sizes2 $ Array.shape t+   let (vlDim0,vlDim1) = Call.sizes2 $ Array.shape vl+   let (vrDim0,vrDim1) = Call.sizes2 $ Array.shape vr+   let n = selectDim0+   let ldt = tDim1+   let m = vlDim0+   let ldvl = vlDim1+   let ldvr = vrDim1+   Call.assert "trsna: n == tDim0" (n == tDim0)+   Call.assert "trsna: m == vrDim0" (m == vrDim0)+   s <- Call.newArray1 mm+   sep <- Call.newArray1 mm+   work <- Call.newArray2 (n+6) ldwork+   iwork <- Call.newArray1 (2*(n-1))+   evalContT $ do+      jobPtr <- Call.char job+      howmnyPtr <- Call.char howmny+      selectPtr <- Call.array select+      nPtr <- Call.cint n+      tPtr <- Call.array t+      ldtPtr <- Call.cint ldt+      vlPtr <- Call.array vl+      ldvlPtr <- Call.cint ldvl+      vrPtr <- Call.array vr+      ldvrPtr <- Call.cint ldvr+      sPtr <- Call.ioarray s+      sepPtr <- Call.ioarray sep+      mmPtr <- Call.cint mm+      mPtr <- Call.alloca+      workPtr <- Call.ioarray work+      ldworkPtr <- Call.cint ldwork+      iworkPtr <- Call.ioarray iwork+      infoPtr <- Call.alloca+      liftIO $ FFI.trsna jobPtr howmnyPtr selectPtr nPtr tPtr ldtPtr vlPtr ldvlPtr vrPtr ldvrPtr sPtr sepPtr mmPtr mPtr workPtr ldworkPtr iworkPtr infoPtr+      liftIO $ pure (,,,)+         <*> Call.freezeArray s+         <*> Call.freezeArray sep+         <*> fmap fromIntegral (peek mPtr)+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/strsyl.f>+trsyl ::+   Char {- ^ trana -} ->+   Char {- ^ tranb -} ->+   Int {- ^ isgn -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ b -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ c -} ->+   IO (Float, Int)+trsyl trana tranb isgn a b c = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (bDim0,bDim1) = Call.sizes2 $ Array.shape b+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let m = aDim0+   let lda = aDim1+   let n = bDim0+   let ldb = bDim1+   let ldc = cDim1+   Call.assert "trsyl: n == cDim0" (n == cDim0)+   evalContT $ do+      tranaPtr <- Call.char trana+      tranbPtr <- Call.char tranb+      isgnPtr <- Call.cint isgn+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      bPtr <- Call.array b+      ldbPtr <- Call.cint ldb+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      scalePtr <- Call.alloca+      infoPtr <- Call.alloca+      liftIO $ FFI.trsyl tranaPtr tranbPtr isgnPtr mPtr nPtr aPtr ldaPtr bPtr ldbPtr cPtr ldcPtr scalePtr infoPtr+      liftIO $ pure (,)+         <*> peek scalePtr+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/strti2.f>+trti2 ::+   Char {- ^ uplo -} ->+   Char {- ^ diag -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IO (Int)+trti2 uplo diag a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      infoPtr <- Call.alloca+      liftIO $ FFI.trti2 uploPtr diagPtr nPtr aPtr ldaPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/strtri.f>+trtri ::+   Char {- ^ uplo -} ->+   Char {- ^ diag -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IO (Int)+trtri uplo diag a = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      infoPtr <- Call.alloca+      liftIO $ FFI.trtri uploPtr diagPtr nPtr aPtr ldaPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/strtrs.f>+trtrs ::+   Char {- ^ uplo -} ->+   Char {- ^ trans -} ->+   Char {- ^ diag -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ b -} ->+   IO (Int)+trtrs uplo trans diag a b = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let (bDim0,bDim1) = Call.sizes2 $ MutArray.shape b+   let n = aDim0+   let lda = aDim1+   let nrhs = bDim0+   let ldb = bDim1+   evalContT $ do+      uploPtr <- Call.char uplo+      transPtr <- Call.char trans+      diagPtr <- Call.char diag+      nPtr <- Call.cint n+      nrhsPtr <- Call.cint nrhs+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      bPtr <- Call.ioarray b+      ldbPtr <- Call.cint ldb+      infoPtr <- Call.alloca+      liftIO $ FFI.trtrs uploPtr transPtr diagPtr nPtr nrhsPtr aPtr ldaPtr bPtr ldbPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/strttf.f>+trttf ::+   Char {- ^ transr -} ->+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Int {- ^ nt -} ->+   IO (Array ZeroInt Float, Int)+trttf transr uplo a nt = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   arf <- Call.newArray1 nt+   evalContT $ do+      transrPtr <- Call.char transr+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      arfPtr <- Call.ioarray arf+      infoPtr <- Call.alloca+      liftIO $ FFI.trttf transrPtr uploPtr nPtr aPtr ldaPtr arfPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray arf+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/strttp.f>+trttp ::+   Char {- ^ uplo -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ a -} ->+   IO (Array ZeroInt Float, Int)+trttp uplo a = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let n = aDim0+   let lda = aDim1+   ap <- Call.newArray1 (n*(n+1)`div`2)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      apPtr <- Call.ioarray ap+      infoPtr <- Call.alloca+      liftIO $ FFI.trttp uploPtr nPtr aPtr ldaPtr apPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray ap+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/stzrzf.f>+tzrzf ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Int {- ^ lwork -} ->+   IO (Array ZeroInt Float, Int)+tzrzf m a lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let n = aDim0+   let lda = aDim1+   tau <- Call.newArray1 m+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.ioarray tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.tzrzf mPtr nPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray tau+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sorg2l.f>+org2l ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Array ZeroInt Float {- ^ tau -} ->+   IO (Int)+org2l m a tau = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let n = aDim0+   let lda = aDim1+   let k = tauDim0+   work <- Call.newArray1 n+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.org2l mPtr nPtr kPtr aPtr ldaPtr tauPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sorg2r.f>+org2r ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Array ZeroInt Float {- ^ tau -} ->+   IO (Int)+org2r m a tau = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let n = aDim0+   let lda = aDim1+   let k = tauDim0+   work <- Call.newArray1 n+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.org2r mPtr nPtr kPtr aPtr ldaPtr tauPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sorgbr.f>+orgbr ::+   Char {- ^ vect -} ->+   Int {- ^ m -} ->+   Int {- ^ k -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Array ZeroInt Float {- ^ tau -} ->+   Int {- ^ lwork -} ->+   IO (Int)+orgbr vect m k a tau lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let n = aDim0+   let lda = aDim1+   let _tauSize = tauDim0+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      vectPtr <- Call.char vect+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.orgbr vectPtr mPtr nPtr kPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sorghr.f>+orghr ::+   Int {- ^ ilo -} ->+   Int {- ^ ihi -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Array ZeroInt Float {- ^ tau -} ->+   Int {- ^ lwork -} ->+   IO (Int)+orghr ilo ihi a tau lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let n = aDim0+   let lda = aDim1+   Call.assert "orghr: n-1 == tauDim0" (n-1 == tauDim0)+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      nPtr <- Call.cint n+      iloPtr <- Call.cint ilo+      ihiPtr <- Call.cint ihi+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.orghr nPtr iloPtr ihiPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sorgl2.f>+orgl2 ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Array ZeroInt Float {- ^ tau -} ->+   IO (Int)+orgl2 m a tau = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let n = aDim0+   let lda = aDim1+   let k = tauDim0+   work <- Call.newArray1 m+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.orgl2 mPtr nPtr kPtr aPtr ldaPtr tauPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sorglq.f>+orglq ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Array ZeroInt Float {- ^ tau -} ->+   Int {- ^ lwork -} ->+   IO (Int)+orglq m a tau lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let n = aDim0+   let lda = aDim1+   let k = tauDim0+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.orglq mPtr nPtr kPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sorgql.f>+orgql ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Array ZeroInt Float {- ^ tau -} ->+   Int {- ^ lwork -} ->+   IO (Int)+orgql m a tau lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let n = aDim0+   let lda = aDim1+   let k = tauDim0+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.orgql mPtr nPtr kPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sorgqr.f>+orgqr ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Array ZeroInt Float {- ^ tau -} ->+   Int {- ^ lwork -} ->+   IO (Int)+orgqr m a tau lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let n = aDim0+   let lda = aDim1+   let k = tauDim0+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.orgqr mPtr nPtr kPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sorgr2.f>+orgr2 ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Array ZeroInt Float {- ^ tau -} ->+   IO (Int)+orgr2 m a tau = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let n = aDim0+   let lda = aDim1+   let k = tauDim0+   work <- Call.newArray1 m+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.orgr2 mPtr nPtr kPtr aPtr ldaPtr tauPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sorgrq.f>+orgrq ::+   Int {- ^ m -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Array ZeroInt Float {- ^ tau -} ->+   Int {- ^ lwork -} ->+   IO (Int)+orgrq m a tau lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let n = aDim0+   let lda = aDim1+   let k = tauDim0+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.orgrq mPtr nPtr kPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sorgtr.f>+orgtr ::+   Char {- ^ uplo -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Array ZeroInt Float {- ^ tau -} ->+   Int {- ^ lwork -} ->+   IO (Int)+orgtr uplo a tau lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ MutArray.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let n = aDim0+   let lda = aDim1+   Call.assert "orgtr: n-1 == tauDim0" (n-1 == tauDim0)+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      aPtr <- Call.ioarray a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.orgtr uploPtr nPtr aPtr ldaPtr tauPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sorm2l.f>+orm2l ::+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Array ZeroInt Float {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ c -} ->+   Int {- ^ workSize -} ->+   IO (Int)+orm2l side trans m a tau c workSize = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let k = aDim0+   let lda = aDim1+   let n = cDim0+   let ldc = cDim1+   Call.assert "orm2l: k == tauDim0" (k == tauDim0)+   work <- Call.newArray1 workSize+   evalContT $ do+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.orm2l sidePtr transPtr mPtr nPtr kPtr aPtr ldaPtr tauPtr cPtr ldcPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sorm2r.f>+orm2r ::+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Array ZeroInt Float {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ c -} ->+   Int {- ^ workSize -} ->+   IO (Int)+orm2r side trans m a tau c workSize = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let k = aDim0+   let lda = aDim1+   let n = cDim0+   let ldc = cDim1+   Call.assert "orm2r: k == tauDim0" (k == tauDim0)+   work <- Call.newArray1 workSize+   evalContT $ do+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.orm2r sidePtr transPtr mPtr nPtr kPtr aPtr ldaPtr tauPtr cPtr ldcPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sormbr.f>+ormbr ::+   Char {- ^ vect -} ->+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Int {- ^ k -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Array ZeroInt Float {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ c -} ->+   Int {- ^ lwork -} ->+   IO (Int)+ormbr vect side trans m k a tau c lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _aSize = aDim0+   let lda = aDim1+   let n = cDim0+   let ldc = cDim1+   Call.ignore "ormbr: minimum[nq,k] == tauDim0" tauDim0+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      vectPtr <- Call.char vect+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ormbr vectPtr sidePtr transPtr mPtr nPtr kPtr aPtr ldaPtr tauPtr cPtr ldcPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sormhr.f>+ormhr ::+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Int {- ^ ilo -} ->+   Int {- ^ ihi -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Array ZeroInt Float {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ c -} ->+   Int {- ^ lwork -} ->+   IO (Int)+ormhr side trans m ilo ihi a tau c lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _aSize = aDim0+   let lda = aDim1+   let _tauSize = tauDim0+   let n = cDim0+   let ldc = cDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      iloPtr <- Call.cint ilo+      ihiPtr <- Call.cint ihi+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ormhr sidePtr transPtr mPtr nPtr iloPtr ihiPtr aPtr ldaPtr tauPtr cPtr ldcPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sorml2.f>+orml2 ::+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Array ZeroInt Float {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ c -} ->+   Int {- ^ workSize -} ->+   IO (Int)+orml2 side trans m a tau c workSize = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _aSize = aDim0+   let lda = aDim1+   let k = tauDim0+   let n = cDim0+   let ldc = cDim1+   work <- Call.newArray1 workSize+   evalContT $ do+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.orml2 sidePtr transPtr mPtr nPtr kPtr aPtr ldaPtr tauPtr cPtr ldcPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sormlq.f>+ormlq ::+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Array ZeroInt Float {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ c -} ->+   Int {- ^ lwork -} ->+   IO (Int)+ormlq side trans m a tau c lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _aSize = aDim0+   let lda = aDim1+   let k = tauDim0+   let n = cDim0+   let ldc = cDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ormlq sidePtr transPtr mPtr nPtr kPtr aPtr ldaPtr tauPtr cPtr ldcPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sormql.f>+ormql ::+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Array ZeroInt Float {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ c -} ->+   Int {- ^ lwork -} ->+   IO (Int)+ormql side trans m a tau c lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let k = aDim0+   let lda = aDim1+   let n = cDim0+   let ldc = cDim1+   Call.assert "ormql: k == tauDim0" (k == tauDim0)+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ormql sidePtr transPtr mPtr nPtr kPtr aPtr ldaPtr tauPtr cPtr ldcPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sormqr.f>+ormqr ::+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Array ZeroInt Float {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ c -} ->+   Int {- ^ lwork -} ->+   IO (Int)+ormqr side trans m a tau c lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let k = aDim0+   let lda = aDim1+   let n = cDim0+   let ldc = cDim1+   Call.assert "ormqr: k == tauDim0" (k == tauDim0)+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ormqr sidePtr transPtr mPtr nPtr kPtr aPtr ldaPtr tauPtr cPtr ldcPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sormr2.f>+ormr2 ::+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Array ZeroInt Float {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ c -} ->+   Int {- ^ workSize -} ->+   IO (Int)+ormr2 side trans m a tau c workSize = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _aSize = aDim0+   let lda = aDim1+   let k = tauDim0+   let n = cDim0+   let ldc = cDim1+   work <- Call.newArray1 workSize+   evalContT $ do+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.ormr2 sidePtr transPtr mPtr nPtr kPtr aPtr ldaPtr tauPtr cPtr ldcPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sormr3.f>+ormr3 ::+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Int {- ^ l -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Array ZeroInt Float {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ c -} ->+   Int {- ^ workSize -} ->+   IO (Int)+ormr3 side trans m l a tau c workSize = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _aSize = aDim0+   let lda = aDim1+   let k = tauDim0+   let n = cDim0+   let ldc = cDim1+   work <- Call.newArray1 workSize+   evalContT $ do+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      lPtr <- Call.cint l+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.ormr3 sidePtr transPtr mPtr nPtr kPtr lPtr aPtr ldaPtr tauPtr cPtr ldcPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sormrq.f>+ormrq ::+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Array ZeroInt Float {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ c -} ->+   Int {- ^ lwork -} ->+   IO (Int)+ormrq side trans m a tau c lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _aSize = aDim0+   let lda = aDim1+   let k = tauDim0+   let n = cDim0+   let ldc = cDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ormrq sidePtr transPtr mPtr nPtr kPtr aPtr ldaPtr tauPtr cPtr ldcPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sormrz.f>+ormrz ::+   Char {- ^ side -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Int {- ^ l -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Array ZeroInt Float {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ c -} ->+   Int {- ^ lwork -} ->+   IO (Int)+ormrz side trans m l a tau c lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _aSize = aDim0+   let lda = aDim1+   let k = tauDim0+   let n = cDim0+   let ldc = cDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      sidePtr <- Call.char side+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      kPtr <- Call.cint k+      lPtr <- Call.cint l+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ormrz sidePtr transPtr mPtr nPtr kPtr lPtr aPtr ldaPtr tauPtr cPtr ldcPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sormtr.f>+ormtr ::+   Char {- ^ side -} ->+   Char {- ^ uplo -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Array (ZeroInt,ZeroInt) Float {- ^ a -} ->+   Array ZeroInt Float {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ c -} ->+   Int {- ^ lwork -} ->+   IO (Int)+ormtr side uplo trans m a tau c lwork = do+   let (aDim0,aDim1) = Call.sizes2 $ Array.shape a+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _aSize = aDim0+   let lda = aDim1+   let _tauSize = tauDim0+   let n = cDim0+   let ldc = cDim1+   work <- Call.newArray1 (maximum[1,lwork])+   evalContT $ do+      sidePtr <- Call.char side+      uploPtr <- Call.char uplo+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      aPtr <- Call.array a+      ldaPtr <- Call.cint lda+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      lworkPtr <- Call.cint lwork+      infoPtr <- Call.alloca+      liftIO $ FFI.ormtr sidePtr uploPtr transPtr mPtr nPtr aPtr ldaPtr tauPtr cPtr ldcPtr workPtr lworkPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sopgtr.f>+opgtr ::+   Char {- ^ uplo -} ->+   Int {- ^ n -} ->+   Array ZeroInt Float {- ^ ap -} ->+   Array ZeroInt Float {- ^ tau -} ->+   Int {- ^ ldq -} ->+   IO (Array (ZeroInt,ZeroInt) Float, Int)+opgtr uplo n ap tau ldq = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let tauDim0 = Call.sizes1 $ Array.shape tau+   Call.assert "opgtr: n*(n+1)`div`2 == apDim0" (n*(n+1)`div`2 == apDim0)+   Call.assert "opgtr: n-1 == tauDim0" (n-1 == tauDim0)+   q <- Call.newArray2 n ldq+   work <- Call.newArray1 (n-1)+   evalContT $ do+      uploPtr <- Call.char uplo+      nPtr <- Call.cint n+      apPtr <- Call.array ap+      tauPtr <- Call.array tau+      qPtr <- Call.ioarray q+      ldqPtr <- Call.cint ldq+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.opgtr uploPtr nPtr apPtr tauPtr qPtr ldqPtr workPtr infoPtr+      liftIO $ pure (,)+         <*> Call.freezeArray q+         <*> fmap fromIntegral (peek infoPtr)++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sopmtr.f>+opmtr ::+   Char {- ^ side -} ->+   Char {- ^ uplo -} ->+   Char {- ^ trans -} ->+   Int {- ^ m -} ->+   Array ZeroInt Float {- ^ ap -} ->+   Array ZeroInt Float {- ^ tau -} ->+   IOArray (ZeroInt,ZeroInt) Float {- ^ c -} ->+   Int {- ^ workSize -} ->+   IO (Int)+opmtr side uplo trans m ap tau c workSize = do+   let apDim0 = Call.sizes1 $ Array.shape ap+   let tauDim0 = Call.sizes1 $ Array.shape tau+   let (cDim0,cDim1) = Call.sizes2 $ MutArray.shape c+   let _apSize = apDim0+   let _tauSize = tauDim0+   let n = cDim0+   let ldc = cDim1+   work <- Call.newArray1 workSize+   evalContT $ do+      sidePtr <- Call.char side+      uploPtr <- Call.char uplo+      transPtr <- Call.char trans+      mPtr <- Call.cint m+      nPtr <- Call.cint n+      apPtr <- Call.array ap+      tauPtr <- Call.array tau+      cPtr <- Call.ioarray c+      ldcPtr <- Call.cint ldc+      workPtr <- Call.ioarray work+      infoPtr <- Call.alloca+      liftIO $ FFI.opmtr sidePtr uploPtr transPtr mPtr nPtr apPtr tauPtr cPtr ldcPtr workPtr infoPtr+      liftIO $ fmap fromIntegral (peek infoPtr)
+ src/Numeric/LAPACK/ComfortArray/Generic.hs view
@@ -0,0 +1,947 @@+-- Do not edit! Automatically generated by create-lapack-ffi.+module Numeric.LAPACK.ComfortArray.Generic (+   gbsv,+   gbtf2,+   gbtrf,+   gbtrs,+   gehd2,+   gehrd,+   gelq2,+   gelqf,+   gels,+   geql2,+   geqlf,+   geqp3,+   geqr2,+   geqr2p,+   geqrf,+   geqrfp,+   gerq2,+   gerqf,+   gesv,+   getc2,+   getf2,+   getrf,+   getri,+   getrs,+   ggglm,+   gghrd,+   gglse,+   ggqrf,+   ggrqf,+   gtsv,+   gttrf,+   gttrs,+   gtts2,+   hbgst,+   hpgst,+   hpsv,+   hptrf,+   hptri,+   hptrs,+   ilalc,+   ilalr,+   lacpy,+   lahr2,+   lapmr,+   lapmt,+   larf,+   larfb,+   larfg,+   larfgp,+   larft,+   larfx,+   larnv,+   larz,+   larzb,+   larzt,+   laset,+   laswp,+   lasyf,+   latrz,+   lauu2,+   lauum,+   pbstf,+   pbsv,+   pbtf2,+   pbtrf,+   pbtrs,+   pftrf,+   pftri,+   pftrs,+   posv,+   potf2,+   potrf,+   potri,+   potrs,+   ppsv,+   pptrf,+   pptri,+   pptrs,+   spsv,+   sptrf,+   sptri,+   sptrs,+   syconv,+   sysv,+   syswapr,+   sytf2,+   sytrf,+   sytri,+   sytri2,+   sytri2x,+   sytrs,+   sytrs2,+   tbtrs,+   tfsm,+   tftri,+   tfttp,+   tfttr,+   tgevc,+   tptri,+   tptrs,+   tpttf,+   tpttr,+   trti2,+   trtri,+   trtrs,+   trttp,+   tzrzf,+   ung2l,+   ung2r,+   ungbr,+   unghr,+   ungl2,+   unglq,+   ungql,+   ungqr,+   ungr2,+   ungrq,+   ungtr,+   unm2l,+   unm2r,+   unmbr,+   unmhr,+   unml2,+   unmlq,+   unmql,+   unmqr,+   unmr2,+   unmr3,+   unmrq,+   unmrz,+   unmtr,+   upgtr,+   upmtr,+   ) where++import qualified Numeric.LAPACK.ComfortArray.ComplexDouble as Z+import qualified Numeric.LAPACK.ComfortArray.ComplexFloat as C+import qualified Numeric.LAPACK.ComfortArray.Double as D+import qualified Numeric.LAPACK.ComfortArray.Float as S+import qualified Numeric.Netlib.Class as Class+import Numeric.Netlib.ComfortArray.Utility (ZeroInt)++import Data.Array.Comfort.Storable.Mutable (IOArray)+import Data.Array.Comfort.Storable (Array)++import Foreign.C.Types (CInt)++++newtype GBSV a = GBSV {getGBSV :: Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt CInt, Int)}++gbsv :: Class.Floating a => Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt CInt, Int)+gbsv = getGBSV $ Class.switchFloating (GBSV S.gbsv) (GBSV D.gbsv) (GBSV C.gbsv) (GBSV Z.gbsv)+++newtype GBTF2 a = GBTF2 {getGBTF2 :: Int -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt CInt, Int)}++gbtf2 :: Class.Floating a => Int -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt CInt, Int)+gbtf2 = getGBTF2 $ Class.switchFloating (GBTF2 S.gbtf2) (GBTF2 D.gbtf2) (GBTF2 C.gbtf2) (GBTF2 Z.gbtf2)+++newtype GBTRF a = GBTRF {getGBTRF :: Int -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt CInt, Int)}++gbtrf :: Class.Floating a => Int -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt CInt, Int)+gbtrf = getGBTRF $ Class.switchFloating (GBTRF S.gbtrf) (GBTRF D.gbtrf) (GBTRF C.gbtrf) (GBTRF Z.gbtrf)+++newtype GBTRS a = GBTRS {getGBTRS :: Char -> Int -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++gbtrs :: Class.Floating a => Char -> Int -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+gbtrs = getGBTRS $ Class.switchFloating (GBTRS S.gbtrs) (GBTRS D.gbtrs) (GBTRS C.gbtrs) (GBTRS Z.gbtrs)+++newtype GEHD2 a = GEHD2 {getGEHD2 :: Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Int)}++gehd2 :: Class.Floating a => Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Int)+gehd2 = getGEHD2 $ Class.switchFloating (GEHD2 S.gehd2) (GEHD2 D.gehd2) (GEHD2 C.gehd2) (GEHD2 Z.gehd2)+++newtype GEHRD a = GEHRD {getGEHRD :: Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Int)}++gehrd :: Class.Floating a => Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Int)+gehrd = getGEHRD $ Class.switchFloating (GEHRD S.gehrd) (GEHRD D.gehrd) (GEHRD C.gehrd) (GEHRD Z.gehrd)+++newtype GELQ2 a = GELQ2 {getGELQ2 :: Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Int)}++gelq2 :: Class.Floating a => Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Int)+gelq2 = getGELQ2 $ Class.switchFloating (GELQ2 S.gelq2) (GELQ2 D.gelq2) (GELQ2 C.gelq2) (GELQ2 Z.gelq2)+++newtype GELQF a = GELQF {getGELQF :: Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Int)}++gelqf :: Class.Floating a => Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Int)+gelqf = getGELQF $ Class.switchFloating (GELQF S.gelqf) (GELQF D.gelqf) (GELQF C.gelqf) (GELQF Z.gelqf)+++newtype GELS a = GELS {getGELS :: Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)}++gels :: Class.Floating a => Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)+gels = getGELS $ Class.switchFloating (GELS S.gels) (GELS D.gels) (GELS C.gels) (GELS Z.gels)+++newtype GEQL2 a = GEQL2 {getGEQL2 :: Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Int)}++geql2 :: Class.Floating a => Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Int)+geql2 = getGEQL2 $ Class.switchFloating (GEQL2 S.geql2) (GEQL2 D.geql2) (GEQL2 C.geql2) (GEQL2 Z.geql2)+++newtype GEQLF a = GEQLF {getGEQLF :: Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Int)}++geqlf :: Class.Floating a => Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Int)+geqlf = getGEQLF $ Class.switchFloating (GEQLF S.geqlf) (GEQLF D.geqlf) (GEQLF C.geqlf) (GEQLF Z.geqlf)+++newtype GEQP3 a = GEQP3 {getGEQP3 :: Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray ZeroInt CInt -> Int -> IO (Array ZeroInt a, Int)}++geqp3 :: Class.Floating a => Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray ZeroInt CInt -> Int -> IO (Array ZeroInt a, Int)+geqp3 = getGEQP3 $ Class.switchFloating (GEQP3 S.geqp3) (GEQP3 D.geqp3) (GEQP3 C.geqp3) (GEQP3 Z.geqp3)+++newtype GEQR2 a = GEQR2 {getGEQR2 :: Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Int)}++geqr2 :: Class.Floating a => Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Int)+geqr2 = getGEQR2 $ Class.switchFloating (GEQR2 S.geqr2) (GEQR2 D.geqr2) (GEQR2 C.geqr2) (GEQR2 Z.geqr2)+++newtype GEQR2P a = GEQR2P {getGEQR2P :: Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Int)}++geqr2p :: Class.Floating a => Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Int)+geqr2p = getGEQR2P $ Class.switchFloating (GEQR2P S.geqr2p) (GEQR2P D.geqr2p) (GEQR2P C.geqr2p) (GEQR2P Z.geqr2p)+++newtype GEQRF a = GEQRF {getGEQRF :: Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Int)}++geqrf :: Class.Floating a => Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Int)+geqrf = getGEQRF $ Class.switchFloating (GEQRF S.geqrf) (GEQRF D.geqrf) (GEQRF C.geqrf) (GEQRF Z.geqrf)+++newtype GEQRFP a = GEQRFP {getGEQRFP :: Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Int)}++geqrfp :: Class.Floating a => Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Int)+geqrfp = getGEQRFP $ Class.switchFloating (GEQRFP S.geqrfp) (GEQRFP D.geqrfp) (GEQRFP C.geqrfp) (GEQRFP Z.geqrfp)+++newtype GERQ2 a = GERQ2 {getGERQ2 :: Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Int)}++gerq2 :: Class.Floating a => Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Int)+gerq2 = getGERQ2 $ Class.switchFloating (GERQ2 S.gerq2) (GERQ2 D.gerq2) (GERQ2 C.gerq2) (GERQ2 Z.gerq2)+++newtype GERQF a = GERQF {getGERQF :: Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Int)}++gerqf :: Class.Floating a => Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Int)+gerqf = getGERQF $ Class.switchFloating (GERQF S.gerqf) (GERQF D.gerqf) (GERQF C.gerqf) (GERQF Z.gerqf)+++newtype GESV a = GESV {getGESV :: IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt CInt, Int)}++gesv :: Class.Floating a => IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt CInt, Int)+gesv = getGESV $ Class.switchFloating (GESV S.gesv) (GESV D.gesv) (GESV C.gesv) (GESV Z.gesv)+++newtype GETC2 a = GETC2 {getGETC2 :: IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt CInt, Array ZeroInt CInt, Int)}++getc2 :: Class.Floating a => IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt CInt, Array ZeroInt CInt, Int)+getc2 = getGETC2 $ Class.switchFloating (GETC2 S.getc2) (GETC2 D.getc2) (GETC2 C.getc2) (GETC2 Z.getc2)+++newtype GETF2 a = GETF2 {getGETF2 :: Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt CInt, Int)}++getf2 :: Class.Floating a => Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt CInt, Int)+getf2 = getGETF2 $ Class.switchFloating (GETF2 S.getf2) (GETF2 D.getf2) (GETF2 C.getf2) (GETF2 Z.getf2)+++newtype GETRF a = GETRF {getGETRF :: Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt CInt, Int)}++getrf :: Class.Floating a => Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt CInt, Int)+getrf = getGETRF $ Class.switchFloating (GETRF S.getrf) (GETRF D.getrf) (GETRF C.getrf) (GETRF Z.getrf)+++newtype GETRI a = GETRI {getGETRI :: IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> Int -> IO (Int)}++getri :: Class.Floating a => IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> Int -> IO (Int)+getri = getGETRI $ Class.switchFloating (GETRI S.getri) (GETRI D.getri) (GETRI C.getri) (GETRI Z.getri)+++newtype GETRS a = GETRS {getGETRS :: Char -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++getrs :: Class.Floating a => Char -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+getrs = getGETRS $ Class.switchFloating (GETRS S.getrs) (GETRS D.getrs) (GETRS C.getrs) (GETRS Z.getrs)+++newtype GGGLM a = GGGLM {getGGGLM :: IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray ZeroInt a -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Int)}++ggglm :: Class.Floating a => IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray ZeroInt a -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Int)+ggglm = getGGGLM $ Class.switchFloating (GGGLM S.ggglm) (GGGLM D.ggglm) (GGGLM C.ggglm) (GGGLM Z.ggglm)+++newtype GGHRD a = GGHRD {getGGHRD :: Char -> Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++gghrd :: Class.Floating a => Char -> Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+gghrd = getGGHRD $ Class.switchFloating (GGHRD S.gghrd) (GGHRD D.gghrd) (GGHRD C.gghrd) (GGHRD Z.gghrd)+++newtype GGLSE a = GGLSE {getGGLSE :: IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray ZeroInt a -> IOArray ZeroInt a -> Int -> IO (Array ZeroInt a, Int)}++gglse :: Class.Floating a => IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray ZeroInt a -> IOArray ZeroInt a -> Int -> IO (Array ZeroInt a, Int)+gglse = getGGLSE $ Class.switchFloating (GGLSE S.gglse) (GGLSE D.gglse) (GGLSE C.gglse) (GGLSE Z.gglse)+++newtype GGQRF a = GGQRF {getGGQRF :: Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Int)}++ggqrf :: Class.Floating a => Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Int)+ggqrf = getGGQRF $ Class.switchFloating (GGQRF S.ggqrf) (GGQRF D.ggqrf) (GGQRF C.ggqrf) (GGQRF Z.ggqrf)+++newtype GGRQF a = GGRQF {getGGRQF :: Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Int)}++ggrqf :: Class.Floating a => Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Int)+ggrqf = getGGRQF $ Class.switchFloating (GGRQF S.ggrqf) (GGRQF D.ggrqf) (GGRQF C.ggrqf) (GGRQF Z.ggrqf)+++newtype GTSV a = GTSV {getGTSV :: IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++gtsv :: Class.Floating a => IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+gtsv = getGTSV $ Class.switchFloating (GTSV S.gtsv) (GTSV D.gtsv) (GTSV C.gtsv) (GTSV Z.gtsv)+++newtype GTTRF a = GTTRF {getGTTRF :: IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray ZeroInt a -> IO (Array ZeroInt a, Array ZeroInt CInt, Int)}++gttrf :: Class.Floating a => IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray ZeroInt a -> IO (Array ZeroInt a, Array ZeroInt CInt, Int)+gttrf = getGTTRF $ Class.switchFloating (GTTRF S.gttrf) (GTTRF D.gttrf) (GTTRF C.gttrf) (GTTRF Z.gttrf)+++newtype GTTRS a = GTTRS {getGTTRS :: Char -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt CInt -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++gttrs :: Class.Floating a => Char -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt CInt -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+gttrs = getGTTRS $ Class.switchFloating (GTTRS S.gttrs) (GTTRS D.gttrs) (GTTRS C.gttrs) (GTTRS Z.gttrs)+++newtype GTTS2 a = GTTS2 {getGTTS2 :: Int -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt CInt -> IOArray (ZeroInt,ZeroInt) a -> IO ()}++gtts2 :: Class.Floating a => Int -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt CInt -> IOArray (ZeroInt,ZeroInt) a -> IO ()+gtts2 = getGTTS2 $ Class.switchFloating (GTTS2 S.gtts2) (GTTS2 D.gtts2) (GTTS2 C.gtts2) (GTTS2 Z.gtts2)+++newtype HBGST a = HBGST {getHBGST :: Char -> Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Int -> IO (Array (ZeroInt,ZeroInt) a, Int)}++hbgst :: Class.Floating a => Char -> Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Int -> IO (Array (ZeroInt,ZeroInt) a, Int)+hbgst = getHBGST $ Class.switchFloating (HBGST S.sbgst) (HBGST D.sbgst) (HBGST C.hbgst) (HBGST Z.hbgst)+++newtype HPGST a = HPGST {getHPGST :: Int -> Char -> Int -> IOArray ZeroInt a -> Array ZeroInt a -> IO (Int)}++hpgst :: Class.Floating a => Int -> Char -> Int -> IOArray ZeroInt a -> Array ZeroInt a -> IO (Int)+hpgst = getHPGST $ Class.switchFloating (HPGST S.spgst) (HPGST D.spgst) (HPGST C.hpgst) (HPGST Z.hpgst)+++newtype HPSV a = HPSV {getHPSV :: Char -> Int -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt CInt, Int)}++hpsv :: Class.Floating a => Char -> Int -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt CInt, Int)+hpsv = getHPSV $ Class.switchFloating (HPSV S.spsv) (HPSV D.spsv) (HPSV C.hpsv) (HPSV Z.hpsv)+++newtype HPTRF a = HPTRF {getHPTRF :: Char -> Int -> IOArray ZeroInt a -> IO (Array ZeroInt CInt, Int)}++hptrf :: Class.Floating a => Char -> Int -> IOArray ZeroInt a -> IO (Array ZeroInt CInt, Int)+hptrf = getHPTRF $ Class.switchFloating (HPTRF S.sptrf) (HPTRF D.sptrf) (HPTRF C.hptrf) (HPTRF Z.hptrf)+++newtype HPTRI a = HPTRI {getHPTRI :: Char -> IOArray ZeroInt a -> Array ZeroInt CInt -> IO (Int)}++hptri :: Class.Floating a => Char -> IOArray ZeroInt a -> Array ZeroInt CInt -> IO (Int)+hptri = getHPTRI $ Class.switchFloating (HPTRI S.sptri) (HPTRI D.sptri) (HPTRI C.hptri) (HPTRI Z.hptri)+++newtype HPTRS a = HPTRS {getHPTRS :: Char -> Array ZeroInt a -> Array ZeroInt CInt -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++hptrs :: Class.Floating a => Char -> Array ZeroInt a -> Array ZeroInt CInt -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+hptrs = getHPTRS $ Class.switchFloating (HPTRS S.sptrs) (HPTRS D.sptrs) (HPTRS C.hptrs) (HPTRS Z.hptrs)+++newtype ILALC a = ILALC {getILALC :: Int -> Array (ZeroInt,ZeroInt) a -> IO CInt}++ilalc :: Class.Floating a => Int -> Array (ZeroInt,ZeroInt) a -> IO CInt+ilalc = getILALC $ Class.switchFloating (ILALC S.ilalc) (ILALC D.ilalc) (ILALC C.ilalc) (ILALC Z.ilalc)+++newtype ILALR a = ILALR {getILALR :: Int -> Array (ZeroInt,ZeroInt) a -> IO CInt}++ilalr :: Class.Floating a => Int -> Array (ZeroInt,ZeroInt) a -> IO CInt+ilalr = getILALR $ Class.switchFloating (ILALR S.ilalr) (ILALR D.ilalr) (ILALR C.ilalr) (ILALR Z.ilalr)+++newtype LACPY a = LACPY {getLACPY :: Char -> Int -> Array (ZeroInt,ZeroInt) a -> Int -> IO (Array (ZeroInt,ZeroInt) a)}++lacpy :: Class.Floating a => Char -> Int -> Array (ZeroInt,ZeroInt) a -> Int -> IO (Array (ZeroInt,ZeroInt) a)+lacpy = getLACPY $ Class.switchFloating (LACPY S.lacpy) (LACPY D.lacpy) (LACPY C.lacpy) (LACPY Z.lacpy)+++newtype LAHR2 a = LAHR2 {getLAHR2 :: Int -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a)}++lahr2 :: Class.Floating a => Int -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a)+lahr2 = getLAHR2 $ Class.switchFloating (LAHR2 S.lahr2) (LAHR2 D.lahr2) (LAHR2 C.lahr2) (LAHR2 Z.lahr2)+++newtype LAPMR a = LAPMR {getLAPMR :: Bool -> IOArray (ZeroInt,ZeroInt) a -> IOArray ZeroInt CInt -> IO ()}++lapmr :: Class.Floating a => Bool -> IOArray (ZeroInt,ZeroInt) a -> IOArray ZeroInt CInt -> IO ()+lapmr = getLAPMR $ Class.switchFloating (LAPMR S.lapmr) (LAPMR D.lapmr) (LAPMR C.lapmr) (LAPMR Z.lapmr)+++newtype LAPMT a = LAPMT {getLAPMT :: Bool -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray ZeroInt CInt -> IO ()}++lapmt :: Class.Floating a => Bool -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray ZeroInt CInt -> IO ()+lapmt = getLAPMT $ Class.switchFloating (LAPMT S.lapmt) (LAPMT D.lapmt) (LAPMT C.lapmt) (LAPMT Z.lapmt)+++newtype LARF a = LARF {getLARF :: Char -> Int -> Array ZeroInt a -> Int -> a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO ()}++larf :: Class.Floating a => Char -> Int -> Array ZeroInt a -> Int -> a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO ()+larf = getLARF $ Class.switchFloating (LARF S.larf) (LARF D.larf) (LARF C.larf) (LARF Z.larf)+++newtype LARFB a = LARFB {getLARFB :: Char -> Char -> Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO ()}++larfb :: Class.Floating a => Char -> Char -> Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO ()+larfb = getLARFB $ Class.switchFloating (LARFB S.larfb) (LARFB D.larfb) (LARFB C.larfb) (LARFB Z.larfb)+++newtype LARFG a = LARFG {getLARFG :: Int -> a -> IOArray ZeroInt a -> Int -> IO (a, a)}++larfg :: Class.Floating a => Int -> a -> IOArray ZeroInt a -> Int -> IO (a, a)+larfg = getLARFG $ Class.switchFloating (LARFG S.larfg) (LARFG D.larfg) (LARFG C.larfg) (LARFG Z.larfg)+++newtype LARFGP a = LARFGP {getLARFGP :: Int -> a -> IOArray ZeroInt a -> Int -> IO (a, a)}++larfgp :: Class.Floating a => Int -> a -> IOArray ZeroInt a -> Int -> IO (a, a)+larfgp = getLARFGP $ Class.switchFloating (LARFGP S.larfgp) (LARFGP D.larfgp) (LARFGP C.larfgp) (LARFGP Z.larfgp)+++newtype LARFT a = LARFT {getLARFT :: Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> Int -> IO (Array (ZeroInt,ZeroInt) a)}++larft :: Class.Floating a => Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> Int -> IO (Array (ZeroInt,ZeroInt) a)+larft = getLARFT $ Class.switchFloating (LARFT S.larft) (LARFT D.larft) (LARFT C.larft) (LARFT Z.larft)+++newtype LARFX a = LARFX {getLARFX :: Char -> Int -> Array ZeroInt a -> a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO ()}++larfx :: Class.Floating a => Char -> Int -> Array ZeroInt a -> a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO ()+larfx = getLARFX $ Class.switchFloating (LARFX S.larfx) (LARFX D.larfx) (LARFX C.larfx) (LARFX Z.larfx)+++newtype LARNV a = LARNV {getLARNV :: Int -> IOArray ZeroInt CInt -> Int -> IO (Array ZeroInt a)}++larnv :: Class.Floating a => Int -> IOArray ZeroInt CInt -> Int -> IO (Array ZeroInt a)+larnv = getLARNV $ Class.switchFloating (LARNV S.larnv) (LARNV D.larnv) (LARNV C.larnv) (LARNV Z.larnv)+++newtype LARZ a = LARZ {getLARZ :: Char -> Int -> Int -> Array ZeroInt a -> Int -> a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO ()}++larz :: Class.Floating a => Char -> Int -> Int -> Array ZeroInt a -> Int -> a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO ()+larz = getLARZ $ Class.switchFloating (LARZ S.larz) (LARZ D.larz) (LARZ C.larz) (LARZ Z.larz)+++newtype LARZB a = LARZB {getLARZB :: Char -> Char -> Char -> Char -> Int -> Int -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO ()}++larzb :: Class.Floating a => Char -> Char -> Char -> Char -> Int -> Int -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO ()+larzb = getLARZB $ Class.switchFloating (LARZB S.larzb) (LARZB D.larzb) (LARZB C.larzb) (LARZB Z.larzb)+++newtype LARZT a = LARZT {getLARZT :: Char -> Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> Int -> IO (Array (ZeroInt,ZeroInt) a)}++larzt :: Class.Floating a => Char -> Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> Int -> IO (Array (ZeroInt,ZeroInt) a)+larzt = getLARZT $ Class.switchFloating (LARZT S.larzt) (LARZT D.larzt) (LARZT C.larzt) (LARZT Z.larzt)+++newtype LASET a = LASET {getLASET :: Char -> Int -> Int -> a -> a -> Int -> IO (Array (ZeroInt,ZeroInt) a)}++laset :: Class.Floating a => Char -> Int -> Int -> a -> a -> Int -> IO (Array (ZeroInt,ZeroInt) a)+laset = getLASET $ Class.switchFloating (LASET S.laset) (LASET D.laset) (LASET C.laset) (LASET Z.laset)+++newtype LASWP a = LASWP {getLASWP :: IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> Array ZeroInt CInt -> Int -> IO ()}++laswp :: Class.Floating a => IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> Array ZeroInt CInt -> Int -> IO ()+laswp = getLASWP $ Class.switchFloating (LASWP S.laswp) (LASWP D.laswp) (LASWP C.laswp) (LASWP Z.laswp)+++newtype LASYF a = LASYF {getLASYF :: Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int, Array ZeroInt CInt, Array (ZeroInt,ZeroInt) a, Int)}++lasyf :: Class.Floating a => Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int, Array ZeroInt CInt, Array (ZeroInt,ZeroInt) a, Int)+lasyf = getLASYF $ Class.switchFloating (LASYF S.lasyf) (LASYF D.lasyf) (LASYF C.lasyf) (LASYF Z.lasyf)+++newtype LATRZ a = LATRZ {getLATRZ :: Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a)}++latrz :: Class.Floating a => Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a)+latrz = getLATRZ $ Class.switchFloating (LATRZ S.latrz) (LATRZ D.latrz) (LATRZ C.latrz) (LATRZ Z.latrz)+++newtype LAUU2 a = LAUU2 {getLAUU2 :: Char -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++lauu2 :: Class.Floating a => Char -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+lauu2 = getLAUU2 $ Class.switchFloating (LAUU2 S.lauu2) (LAUU2 D.lauu2) (LAUU2 C.lauu2) (LAUU2 Z.lauu2)+++newtype LAUUM a = LAUUM {getLAUUM :: Char -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++lauum :: Class.Floating a => Char -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+lauum = getLAUUM $ Class.switchFloating (LAUUM S.lauum) (LAUUM D.lauum) (LAUUM C.lauum) (LAUUM Z.lauum)+++newtype PBSTF a = PBSTF {getPBSTF :: Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++pbstf :: Class.Floating a => Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+pbstf = getPBSTF $ Class.switchFloating (PBSTF S.pbstf) (PBSTF D.pbstf) (PBSTF C.pbstf) (PBSTF Z.pbstf)+++newtype PBSV a = PBSV {getPBSV :: Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++pbsv :: Class.Floating a => Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+pbsv = getPBSV $ Class.switchFloating (PBSV S.pbsv) (PBSV D.pbsv) (PBSV C.pbsv) (PBSV Z.pbsv)+++newtype PBTF2 a = PBTF2 {getPBTF2 :: Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++pbtf2 :: Class.Floating a => Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+pbtf2 = getPBTF2 $ Class.switchFloating (PBTF2 S.pbtf2) (PBTF2 D.pbtf2) (PBTF2 C.pbtf2) (PBTF2 Z.pbtf2)+++newtype PBTRF a = PBTRF {getPBTRF :: Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++pbtrf :: Class.Floating a => Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+pbtrf = getPBTRF $ Class.switchFloating (PBTRF S.pbtrf) (PBTRF D.pbtrf) (PBTRF C.pbtrf) (PBTRF Z.pbtrf)+++newtype PBTRS a = PBTRS {getPBTRS :: Char -> Int -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++pbtrs :: Class.Floating a => Char -> Int -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+pbtrs = getPBTRS $ Class.switchFloating (PBTRS S.pbtrs) (PBTRS D.pbtrs) (PBTRS C.pbtrs) (PBTRS Z.pbtrs)+++newtype PFTRF a = PFTRF {getPFTRF :: Char -> Char -> Int -> IOArray ZeroInt a -> IO (Int)}++pftrf :: Class.Floating a => Char -> Char -> Int -> IOArray ZeroInt a -> IO (Int)+pftrf = getPFTRF $ Class.switchFloating (PFTRF S.pftrf) (PFTRF D.pftrf) (PFTRF C.pftrf) (PFTRF Z.pftrf)+++newtype PFTRI a = PFTRI {getPFTRI :: Char -> Char -> Int -> IOArray ZeroInt a -> IO (Int)}++pftri :: Class.Floating a => Char -> Char -> Int -> IOArray ZeroInt a -> IO (Int)+pftri = getPFTRI $ Class.switchFloating (PFTRI S.pftri) (PFTRI D.pftri) (PFTRI C.pftri) (PFTRI Z.pftri)+++newtype PFTRS a = PFTRS {getPFTRS :: Char -> Char -> Int -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++pftrs :: Class.Floating a => Char -> Char -> Int -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+pftrs = getPFTRS $ Class.switchFloating (PFTRS S.pftrs) (PFTRS D.pftrs) (PFTRS C.pftrs) (PFTRS Z.pftrs)+++newtype POSV a = POSV {getPOSV :: Char -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++posv :: Class.Floating a => Char -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+posv = getPOSV $ Class.switchFloating (POSV S.posv) (POSV D.posv) (POSV C.posv) (POSV Z.posv)+++newtype POTF2 a = POTF2 {getPOTF2 :: Char -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++potf2 :: Class.Floating a => Char -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+potf2 = getPOTF2 $ Class.switchFloating (POTF2 S.potf2) (POTF2 D.potf2) (POTF2 C.potf2) (POTF2 Z.potf2)+++newtype POTRF a = POTRF {getPOTRF :: Char -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++potrf :: Class.Floating a => Char -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+potrf = getPOTRF $ Class.switchFloating (POTRF S.potrf) (POTRF D.potrf) (POTRF C.potrf) (POTRF Z.potrf)+++newtype POTRI a = POTRI {getPOTRI :: Char -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++potri :: Class.Floating a => Char -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+potri = getPOTRI $ Class.switchFloating (POTRI S.potri) (POTRI D.potri) (POTRI C.potri) (POTRI Z.potri)+++newtype POTRS a = POTRS {getPOTRS :: Char -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++potrs :: Class.Floating a => Char -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+potrs = getPOTRS $ Class.switchFloating (POTRS S.potrs) (POTRS D.potrs) (POTRS C.potrs) (POTRS Z.potrs)+++newtype PPSV a = PPSV {getPPSV :: Char -> Int -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++ppsv :: Class.Floating a => Char -> Int -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+ppsv = getPPSV $ Class.switchFloating (PPSV S.ppsv) (PPSV D.ppsv) (PPSV C.ppsv) (PPSV Z.ppsv)+++newtype PPTRF a = PPTRF {getPPTRF :: Char -> Int -> IOArray ZeroInt a -> IO (Int)}++pptrf :: Class.Floating a => Char -> Int -> IOArray ZeroInt a -> IO (Int)+pptrf = getPPTRF $ Class.switchFloating (PPTRF S.pptrf) (PPTRF D.pptrf) (PPTRF C.pptrf) (PPTRF Z.pptrf)+++newtype PPTRI a = PPTRI {getPPTRI :: Char -> Int -> IOArray ZeroInt a -> IO (Int)}++pptri :: Class.Floating a => Char -> Int -> IOArray ZeroInt a -> IO (Int)+pptri = getPPTRI $ Class.switchFloating (PPTRI S.pptri) (PPTRI D.pptri) (PPTRI C.pptri) (PPTRI Z.pptri)+++newtype PPTRS a = PPTRS {getPPTRS :: Char -> Int -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++pptrs :: Class.Floating a => Char -> Int -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+pptrs = getPPTRS $ Class.switchFloating (PPTRS S.pptrs) (PPTRS D.pptrs) (PPTRS C.pptrs) (PPTRS Z.pptrs)+++newtype SPSV a = SPSV {getSPSV :: Char -> Int -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt CInt, Int)}++spsv :: Class.Floating a => Char -> Int -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt CInt, Int)+spsv = getSPSV $ Class.switchFloating (SPSV S.spsv) (SPSV D.spsv) (SPSV C.spsv) (SPSV Z.spsv)+++newtype SPTRF a = SPTRF {getSPTRF :: Char -> Int -> IOArray ZeroInt a -> IO (Array ZeroInt CInt, Int)}++sptrf :: Class.Floating a => Char -> Int -> IOArray ZeroInt a -> IO (Array ZeroInt CInt, Int)+sptrf = getSPTRF $ Class.switchFloating (SPTRF S.sptrf) (SPTRF D.sptrf) (SPTRF C.sptrf) (SPTRF Z.sptrf)+++newtype SPTRI a = SPTRI {getSPTRI :: Char -> IOArray ZeroInt a -> Array ZeroInt CInt -> IO (Int)}++sptri :: Class.Floating a => Char -> IOArray ZeroInt a -> Array ZeroInt CInt -> IO (Int)+sptri = getSPTRI $ Class.switchFloating (SPTRI S.sptri) (SPTRI D.sptri) (SPTRI C.sptri) (SPTRI Z.sptri)+++newtype SPTRS a = SPTRS {getSPTRS :: Char -> Array ZeroInt a -> Array ZeroInt CInt -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++sptrs :: Class.Floating a => Char -> Array ZeroInt a -> Array ZeroInt CInt -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+sptrs = getSPTRS $ Class.switchFloating (SPTRS S.sptrs) (SPTRS D.sptrs) (SPTRS C.sptrs) (SPTRS Z.sptrs)+++newtype SYCONV a = SYCONV {getSYCONV :: Char -> Char -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> IO (Array ZeroInt a, Int)}++syconv :: Class.Floating a => Char -> Char -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> IO (Array ZeroInt a, Int)+syconv = getSYCONV $ Class.switchFloating (SYCONV S.syconv) (SYCONV D.syconv) (SYCONV C.syconv) (SYCONV Z.syconv)+++newtype SYSV a = SYSV {getSYSV :: Char -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt CInt, Int)}++sysv :: Class.Floating a => Char -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt CInt, Int)+sysv = getSYSV $ Class.switchFloating (SYSV S.sysv) (SYSV D.sysv) (SYSV C.sysv) (SYSV Z.sysv)+++newtype SYSWAPR a = SYSWAPR {getSYSWAPR :: Char -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> IO ()}++syswapr :: Class.Floating a => Char -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> IO ()+syswapr = getSYSWAPR $ Class.switchFloating (SYSWAPR S.syswapr) (SYSWAPR D.syswapr) (SYSWAPR C.syswapr) (SYSWAPR Z.syswapr)+++newtype SYTF2 a = SYTF2 {getSYTF2 :: Char -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt CInt, Int)}++sytf2 :: Class.Floating a => Char -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt CInt, Int)+sytf2 = getSYTF2 $ Class.switchFloating (SYTF2 S.sytf2) (SYTF2 D.sytf2) (SYTF2 C.sytf2) (SYTF2 Z.sytf2)+++newtype SYTRF a = SYTRF {getSYTRF :: Char -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt CInt, Int)}++sytrf :: Class.Floating a => Char -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt CInt, Int)+sytrf = getSYTRF $ Class.switchFloating (SYTRF S.sytrf) (SYTRF D.sytrf) (SYTRF C.sytrf) (SYTRF Z.sytrf)+++newtype SYTRI a = SYTRI {getSYTRI :: Char -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> IO (Int)}++sytri :: Class.Floating a => Char -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> IO (Int)+sytri = getSYTRI $ Class.switchFloating (SYTRI S.sytri) (SYTRI D.sytri) (SYTRI C.sytri) (SYTRI Z.sytri)+++newtype SYTRI2 a = SYTRI2 {getSYTRI2 :: Char -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> Int -> Int -> IO (Int)}++sytri2 :: Class.Floating a => Char -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> Int -> Int -> IO (Int)+sytri2 = getSYTRI2 $ Class.switchFloating (SYTRI2 S.sytri2) (SYTRI2 D.sytri2) (SYTRI2 C.sytri2) (SYTRI2 Z.sytri2)+++newtype SYTRI2X a = SYTRI2X {getSYTRI2X :: Char -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> Int -> IO (Int)}++sytri2x :: Class.Floating a => Char -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> Int -> IO (Int)+sytri2x = getSYTRI2X $ Class.switchFloating (SYTRI2X S.sytri2x) (SYTRI2X D.sytri2x) (SYTRI2X C.sytri2x) (SYTRI2X Z.sytri2x)+++newtype SYTRS a = SYTRS {getSYTRS :: Char -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++sytrs :: Class.Floating a => Char -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+sytrs = getSYTRS $ Class.switchFloating (SYTRS S.sytrs) (SYTRS D.sytrs) (SYTRS C.sytrs) (SYTRS Z.sytrs)+++newtype SYTRS2 a = SYTRS2 {getSYTRS2 :: Char -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++sytrs2 :: Class.Floating a => Char -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+sytrs2 = getSYTRS2 $ Class.switchFloating (SYTRS2 S.sytrs2) (SYTRS2 D.sytrs2) (SYTRS2 C.sytrs2) (SYTRS2 Z.sytrs2)+++newtype TBTRS a = TBTRS {getTBTRS :: Char -> Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++tbtrs :: Class.Floating a => Char -> Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+tbtrs = getTBTRS $ Class.switchFloating (TBTRS S.tbtrs) (TBTRS D.tbtrs) (TBTRS C.tbtrs) (TBTRS Z.tbtrs)+++newtype TFSM a = TFSM {getTFSM :: Char -> Char -> Char -> Char -> Char -> Int -> a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IO ()}++tfsm :: Class.Floating a => Char -> Char -> Char -> Char -> Char -> Int -> a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IO ()+tfsm = getTFSM $ Class.switchFloating (TFSM S.tfsm) (TFSM D.tfsm) (TFSM C.tfsm) (TFSM Z.tfsm)+++newtype TFTRI a = TFTRI {getTFTRI :: Char -> Char -> Char -> Int -> IOArray ZeroInt a -> IO (Int)}++tftri :: Class.Floating a => Char -> Char -> Char -> Int -> IOArray ZeroInt a -> IO (Int)+tftri = getTFTRI $ Class.switchFloating (TFTRI S.tftri) (TFTRI D.tftri) (TFTRI C.tftri) (TFTRI Z.tftri)+++newtype TFTTP a = TFTTP {getTFTTP :: Char -> Char -> Int -> Array ZeroInt a -> IO (Array ZeroInt a, Int)}++tfttp :: Class.Floating a => Char -> Char -> Int -> Array ZeroInt a -> IO (Array ZeroInt a, Int)+tfttp = getTFTTP $ Class.switchFloating (TFTTP S.tfttp) (TFTTP D.tfttp) (TFTTP C.tfttp) (TFTTP Z.tfttp)+++newtype TFTTR a = TFTTR {getTFTTR :: Char -> Char -> Int -> Array ZeroInt a -> Int -> IO (Array (ZeroInt,ZeroInt) a, Int)}++tfttr :: Class.Floating a => Char -> Char -> Int -> Array ZeroInt a -> Int -> IO (Array (ZeroInt,ZeroInt) a, Int)+tfttr = getTFTTR $ Class.switchFloating (TFTTR S.tfttr) (TFTTR D.tfttr) (TFTTR C.tfttr) (TFTTR Z.tfttr)+++newtype TGEVC a = TGEVC {getTGEVC :: Char -> Char -> Array ZeroInt Bool -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int, Int)}++tgevc :: Class.Floating a => Char -> Char -> Array ZeroInt Bool -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int, Int)+tgevc = getTGEVC $ Class.switchFloating (TGEVC S.tgevc) (TGEVC D.tgevc) (TGEVC C.tgevc) (TGEVC Z.tgevc)+++newtype TPTRI a = TPTRI {getTPTRI :: Char -> Char -> Int -> IOArray ZeroInt a -> IO (Int)}++tptri :: Class.Floating a => Char -> Char -> Int -> IOArray ZeroInt a -> IO (Int)+tptri = getTPTRI $ Class.switchFloating (TPTRI S.tptri) (TPTRI D.tptri) (TPTRI C.tptri) (TPTRI Z.tptri)+++newtype TPTRS a = TPTRS {getTPTRS :: Char -> Char -> Char -> Int -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++tptrs :: Class.Floating a => Char -> Char -> Char -> Int -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+tptrs = getTPTRS $ Class.switchFloating (TPTRS S.tptrs) (TPTRS D.tptrs) (TPTRS C.tptrs) (TPTRS Z.tptrs)+++newtype TPTTF a = TPTTF {getTPTTF :: Char -> Char -> Int -> Array ZeroInt a -> IO (Array ZeroInt a, Int)}++tpttf :: Class.Floating a => Char -> Char -> Int -> Array ZeroInt a -> IO (Array ZeroInt a, Int)+tpttf = getTPTTF $ Class.switchFloating (TPTTF S.tpttf) (TPTTF D.tpttf) (TPTTF C.tpttf) (TPTTF Z.tpttf)+++newtype TPTTR a = TPTTR {getTPTTR :: Char -> Int -> Array ZeroInt a -> Int -> IO (Array (ZeroInt,ZeroInt) a, Int)}++tpttr :: Class.Floating a => Char -> Int -> Array ZeroInt a -> Int -> IO (Array (ZeroInt,ZeroInt) a, Int)+tpttr = getTPTTR $ Class.switchFloating (TPTTR S.tpttr) (TPTTR D.tpttr) (TPTTR C.tpttr) (TPTTR Z.tpttr)+++newtype TRTI2 a = TRTI2 {getTRTI2 :: Char -> Char -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++trti2 :: Class.Floating a => Char -> Char -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+trti2 = getTRTI2 $ Class.switchFloating (TRTI2 S.trti2) (TRTI2 D.trti2) (TRTI2 C.trti2) (TRTI2 Z.trti2)+++newtype TRTRI a = TRTRI {getTRTRI :: Char -> Char -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++trtri :: Class.Floating a => Char -> Char -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+trtri = getTRTRI $ Class.switchFloating (TRTRI S.trtri) (TRTRI D.trtri) (TRTRI C.trtri) (TRTRI Z.trtri)+++newtype TRTRS a = TRTRS {getTRTRS :: Char -> Char -> Char -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++trtrs :: Class.Floating a => Char -> Char -> Char -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+trtrs = getTRTRS $ Class.switchFloating (TRTRS S.trtrs) (TRTRS D.trtrs) (TRTRS C.trtrs) (TRTRS Z.trtrs)+++newtype TRTTP a = TRTTP {getTRTTP :: Char -> Array (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Int)}++trttp :: Class.Floating a => Char -> Array (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Int)+trttp = getTRTTP $ Class.switchFloating (TRTTP S.trttp) (TRTTP D.trttp) (TRTTP C.trttp) (TRTTP Z.trttp)+++newtype TZRZF a = TZRZF {getTZRZF :: Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Int)}++tzrzf :: Class.Floating a => Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Int)+tzrzf = getTZRZF $ Class.switchFloating (TZRZF S.tzrzf) (TZRZF D.tzrzf) (TZRZF C.tzrzf) (TZRZF Z.tzrzf)+++newtype UNG2L a = UNG2L {getUNG2L :: Int -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IO (Int)}++ung2l :: Class.Floating a => Int -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IO (Int)+ung2l = getUNG2L $ Class.switchFloating (UNG2L S.org2l) (UNG2L D.org2l) (UNG2L C.ung2l) (UNG2L Z.ung2l)+++newtype UNG2R a = UNG2R {getUNG2R :: Int -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IO (Int)}++ung2r :: Class.Floating a => Int -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IO (Int)+ung2r = getUNG2R $ Class.switchFloating (UNG2R S.org2r) (UNG2R D.org2r) (UNG2R C.ung2r) (UNG2R Z.ung2r)+++newtype UNGBR a = UNGBR {getUNGBR :: Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> Int -> IO (Int)}++ungbr :: Class.Floating a => Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> Int -> IO (Int)+ungbr = getUNGBR $ Class.switchFloating (UNGBR S.orgbr) (UNGBR D.orgbr) (UNGBR C.ungbr) (UNGBR Z.ungbr)+++newtype UNGHR a = UNGHR {getUNGHR :: Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> Int -> IO (Int)}++unghr :: Class.Floating a => Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> Int -> IO (Int)+unghr = getUNGHR $ Class.switchFloating (UNGHR S.orghr) (UNGHR D.orghr) (UNGHR C.unghr) (UNGHR Z.unghr)+++newtype UNGL2 a = UNGL2 {getUNGL2 :: Int -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IO (Int)}++ungl2 :: Class.Floating a => Int -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IO (Int)+ungl2 = getUNGL2 $ Class.switchFloating (UNGL2 S.orgl2) (UNGL2 D.orgl2) (UNGL2 C.ungl2) (UNGL2 Z.ungl2)+++newtype UNGLQ a = UNGLQ {getUNGLQ :: Int -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> Int -> IO (Int)}++unglq :: Class.Floating a => Int -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> Int -> IO (Int)+unglq = getUNGLQ $ Class.switchFloating (UNGLQ S.orglq) (UNGLQ D.orglq) (UNGLQ C.unglq) (UNGLQ Z.unglq)+++newtype UNGQL a = UNGQL {getUNGQL :: Int -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> Int -> IO (Int)}++ungql :: Class.Floating a => Int -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> Int -> IO (Int)+ungql = getUNGQL $ Class.switchFloating (UNGQL S.orgql) (UNGQL D.orgql) (UNGQL C.ungql) (UNGQL Z.ungql)+++newtype UNGQR a = UNGQR {getUNGQR :: Int -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> Int -> IO (Int)}++ungqr :: Class.Floating a => Int -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> Int -> IO (Int)+ungqr = getUNGQR $ Class.switchFloating (UNGQR S.orgqr) (UNGQR D.orgqr) (UNGQR C.ungqr) (UNGQR Z.ungqr)+++newtype UNGR2 a = UNGR2 {getUNGR2 :: Int -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IO (Int)}++ungr2 :: Class.Floating a => Int -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IO (Int)+ungr2 = getUNGR2 $ Class.switchFloating (UNGR2 S.orgr2) (UNGR2 D.orgr2) (UNGR2 C.ungr2) (UNGR2 Z.ungr2)+++newtype UNGRQ a = UNGRQ {getUNGRQ :: Int -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> Int -> IO (Int)}++ungrq :: Class.Floating a => Int -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> Int -> IO (Int)+ungrq = getUNGRQ $ Class.switchFloating (UNGRQ S.orgrq) (UNGRQ D.orgrq) (UNGRQ C.ungrq) (UNGRQ Z.ungrq)+++newtype UNGTR a = UNGTR {getUNGTR :: Char -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> Int -> IO (Int)}++ungtr :: Class.Floating a => Char -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> Int -> IO (Int)+ungtr = getUNGTR $ Class.switchFloating (UNGTR S.orgtr) (UNGTR D.orgtr) (UNGTR C.ungtr) (UNGTR Z.ungtr)+++newtype UNM2L a = UNM2L {getUNM2L :: Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)}++unm2l :: Class.Floating a => Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)+unm2l = getUNM2L $ Class.switchFloating (UNM2L S.orm2l) (UNM2L D.orm2l) (UNM2L C.unm2l) (UNM2L Z.unm2l)+++newtype UNM2R a = UNM2R {getUNM2R :: Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)}++unm2r :: Class.Floating a => Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)+unm2r = getUNM2R $ Class.switchFloating (UNM2R S.orm2r) (UNM2R D.orm2r) (UNM2R C.unm2r) (UNM2R Z.unm2r)+++newtype UNMBR a = UNMBR {getUNMBR :: Char -> Char -> Char -> Int -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)}++unmbr :: Class.Floating a => Char -> Char -> Char -> Int -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)+unmbr = getUNMBR $ Class.switchFloating (UNMBR S.ormbr) (UNMBR D.ormbr) (UNMBR C.unmbr) (UNMBR Z.unmbr)+++newtype UNMHR a = UNMHR {getUNMHR :: Char -> Char -> Int -> Int -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)}++unmhr :: Class.Floating a => Char -> Char -> Int -> Int -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)+unmhr = getUNMHR $ Class.switchFloating (UNMHR S.ormhr) (UNMHR D.ormhr) (UNMHR C.unmhr) (UNMHR Z.unmhr)+++newtype UNML2 a = UNML2 {getUNML2 :: Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)}++unml2 :: Class.Floating a => Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)+unml2 = getUNML2 $ Class.switchFloating (UNML2 S.orml2) (UNML2 D.orml2) (UNML2 C.unml2) (UNML2 Z.unml2)+++newtype UNMLQ a = UNMLQ {getUNMLQ :: Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)}++unmlq :: Class.Floating a => Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)+unmlq = getUNMLQ $ Class.switchFloating (UNMLQ S.ormlq) (UNMLQ D.ormlq) (UNMLQ C.unmlq) (UNMLQ Z.unmlq)+++newtype UNMQL a = UNMQL {getUNMQL :: Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)}++unmql :: Class.Floating a => Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)+unmql = getUNMQL $ Class.switchFloating (UNMQL S.ormql) (UNMQL D.ormql) (UNMQL C.unmql) (UNMQL Z.unmql)+++newtype UNMQR a = UNMQR {getUNMQR :: Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)}++unmqr :: Class.Floating a => Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)+unmqr = getUNMQR $ Class.switchFloating (UNMQR S.ormqr) (UNMQR D.ormqr) (UNMQR C.unmqr) (UNMQR Z.unmqr)+++newtype UNMR2 a = UNMR2 {getUNMR2 :: Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)}++unmr2 :: Class.Floating a => Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)+unmr2 = getUNMR2 $ Class.switchFloating (UNMR2 S.ormr2) (UNMR2 D.ormr2) (UNMR2 C.unmr2) (UNMR2 Z.unmr2)+++newtype UNMR3 a = UNMR3 {getUNMR3 :: Char -> Char -> Int -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)}++unmr3 :: Class.Floating a => Char -> Char -> Int -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)+unmr3 = getUNMR3 $ Class.switchFloating (UNMR3 S.ormr3) (UNMR3 D.ormr3) (UNMR3 C.unmr3) (UNMR3 Z.unmr3)+++newtype UNMRQ a = UNMRQ {getUNMRQ :: Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)}++unmrq :: Class.Floating a => Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)+unmrq = getUNMRQ $ Class.switchFloating (UNMRQ S.ormrq) (UNMRQ D.ormrq) (UNMRQ C.unmrq) (UNMRQ Z.unmrq)+++newtype UNMRZ a = UNMRZ {getUNMRZ :: Char -> Char -> Int -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)}++unmrz :: Class.Floating a => Char -> Char -> Int -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)+unmrz = getUNMRZ $ Class.switchFloating (UNMRZ S.ormrz) (UNMRZ D.ormrz) (UNMRZ C.unmrz) (UNMRZ Z.unmrz)+++newtype UNMTR a = UNMTR {getUNMTR :: Char -> Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)}++unmtr :: Class.Floating a => Char -> Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)+unmtr = getUNMTR $ Class.switchFloating (UNMTR S.ormtr) (UNMTR D.ormtr) (UNMTR C.unmtr) (UNMTR Z.unmtr)+++newtype UPGTR a = UPGTR {getUPGTR :: Char -> Int -> Array ZeroInt a -> Array ZeroInt a -> Int -> IO (Array (ZeroInt,ZeroInt) a, Int)}++upgtr :: Class.Floating a => Char -> Int -> Array ZeroInt a -> Array ZeroInt a -> Int -> IO (Array (ZeroInt,ZeroInt) a, Int)+upgtr = getUPGTR $ Class.switchFloating (UPGTR S.opgtr) (UPGTR D.opgtr) (UPGTR C.upgtr) (UPGTR Z.upgtr)+++newtype UPMTR a = UPMTR {getUPMTR :: Char -> Char -> Char -> Int -> Array ZeroInt a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)}++upmtr :: Class.Floating a => Char -> Char -> Char -> Int -> Array ZeroInt a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)+upmtr = getUPMTR $ Class.switchFloating (UPMTR S.opmtr) (UPMTR D.opmtr) (UPMTR C.upmtr) (UPMTR Z.upmtr)
+ src/Numeric/LAPACK/ComfortArray/Miscellaneous.hs view
@@ -0,0 +1,69 @@+-- Do not edit! Automatically generated by create-lapack-ffi.+module Numeric.LAPACK.ComfortArray.Miscellaneous where++import qualified Numeric.LAPACK.FFI.Miscellaneous as FFI+import qualified Numeric.Netlib.ComfortArray.Utility as Call++import Foreign.C.Types (CInt, CChar)++import Control.Monad.Trans.Cont (evalContT)+import Control.Monad.IO.Class (liftIO)+++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chla_transtype.f>+chla_transtype ::+   Int {- ^ trans -} ->+   IO CChar+chla_transtype trans = do+   evalContT $ do+      transPtr <- Call.cint trans+      liftIO $ FFI.chla_transtype transPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ieeeck.f>+ieeeck ::+   Int {- ^ ispec -} ->+   Float {- ^ zero -} ->+   Float {- ^ one -} ->+   IO CInt+ieeeck ispec zero one = do+   evalContT $ do+      ispecPtr <- Call.cint ispec+      zeroPtr <- Call.float zero+      onePtr <- Call.float one+      liftIO $ FFI.ieeeck ispecPtr zeroPtr onePtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/iladiag.f>+ladiag ::+   Char {- ^ diag -} ->+   IO CInt+ladiag diag = do+   evalContT $ do+      diagPtr <- Call.char diag+      liftIO $ FFI.ladiag diagPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ilaprec.f>+laprec ::+   Char {- ^ prec -} ->+   IO CInt+laprec prec = do+   evalContT $ do+      precPtr <- Call.char prec+      liftIO $ FFI.laprec precPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ilatrans.f>+latrans ::+   Char {- ^ trans -} ->+   IO CInt+latrans trans = do+   evalContT $ do+      transPtr <- Call.char trans+      liftIO $ FFI.latrans transPtr++-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ilauplo.f>+lauplo ::+   Char {- ^ uplo -} ->+   IO CInt+lauplo uplo = do+   evalContT $ do+      uploPtr <- Call.char uplo+      liftIO $ FFI.lauplo uploPtr
+ src/Numeric/LAPACK/ComfortArray/Real.hs view
@@ -0,0 +1,2647 @@+-- Do not edit! Automatically generated by create-lapack-ffi.+module Numeric.LAPACK.ComfortArray.Real (+   bbcsd,+   bdsdc,+   bdsqr,+   disna,+   gbbrd,+   gbcon,+   gbequ,+   gbequb,+   gbrfs,+   gbsv,+   gbsvx,+   gbtf2,+   gbtrf,+   gbtrs,+   gebak,+   gebal,+   gebd2,+   gebrd,+   gecon,+   geequ,+   geequb,+   gees,+   geesx,+   geev,+   geevx,+   gehd2,+   gehrd,+   gejsv,+   gelq2,+   gelqf,+   gels,+   gelsd,+   gelss,+   gelsy,+   geql2,+   geqlf,+   geqp3,+   geqr2,+   geqr2p,+   geqrf,+   geqrfp,+   gerfs,+   gerq2,+   gerqf,+   gesc2,+   gesdd,+   gesv,+   gesvd,+   gesvj,+   gesvx,+   getc2,+   getf2,+   getrf,+   getri,+   getrs,+   ggbak,+   ggbal,+   gges,+   ggesx,+   ggev,+   ggevx,+   ggglm,+   gghrd,+   gglse,+   ggqrf,+   ggrqf,+   gsvj0,+   gsvj1,+   gtcon,+   gtrfs,+   gtsv,+   gtsvx,+   gttrf,+   gttrs,+   gtts2,+   sbev,+   sbevd,+   sbevx,+   sbgst,+   sbgv,+   sbgvd,+   sbgvx,+   sbtrd,+   syev,+   syevd,+   syevr,+   syevx,+   sygs2,+   sygst,+   sygv,+   sygvd,+   sygvx,+   sfrk,+   hgeqz,+   spev,+   spevd,+   spevx,+   spgst,+   spgv,+   spgvd,+   spgvx,+   sptrd,+   hsein,+   hseqr,+   ilalc,+   ilalr,+   isnan,+   labad,+   labrd,+   lacn2,+   lacon,+   lacpy,+   ladiv,+   lae2,+   laebz,+   laed0,+   laed1,+   laed2,+   laed3,+   laed4,+   laed5,+   laed6,+   laed7,+   laed8,+   laed9,+   laeda,+   laein,+   laev2,+   laexc,+   lag2,+   lags2,+   lagtf,+   lagtm,+   lagts,+   lagv2,+   lahqr,+   lahr2,+   laic1,+   laisnan,+   laln2,+   lals0,+   lalsa,+   lalsd,+   lamrg,+   laneg,+   langb,+   lange,+   langt,+   lanhs,+   lansb,+   lansf,+   lansp,+   lanst,+   lansy,+   lantb,+   lantp,+   lantr,+   lanv2,+   lapll,+   lapmr,+   lapmt,+   lapy2,+   lapy3,+   laqgb,+   laqge,+   laqp2,+   laqps,+   laqr0,+   laqr1,+   laqr2,+   laqr3,+   laqr4,+   laqr5,+   laqsb,+   laqsp,+   laqsy,+   laqtr,+   lar1v,+   lar2v,+   larf,+   larfb,+   larfg,+   larfgp,+   larft,+   larfx,+   largv,+   larnv,+   larra,+   larrb,+   larrc,+   larrd,+   larre,+   larrf,+   larrj,+   larrk,+   larrr,+   larrv,+   lartg,+   lartgp,+   lartgs,+   lartv,+   laruv,+   larz,+   larzb,+   larzt,+   las2,+   lascl,+   lasd0,+   lasd1,+   lasd2,+   lasd3,+   lasd4,+   lasd5,+   lasd6,+   lasd7,+   lasd8,+   lasda,+   lasdq,+   laset,+   lasq1,+   lasq2,+   lasq4,+   lasq5,+   lasq6,+   lasr,+   lasrt,+   lassq,+   lasv2,+   laswp,+   lasy2,+   lasyf,+   latbs,+   latdf,+   latps,+   latrd,+   latrs,+   latrz,+   lauu2,+   lauum,+   orbdb,+   orcsd,+   pbcon,+   pbequ,+   pbrfs,+   pbstf,+   pbsv,+   pbsvx,+   pbtf2,+   pbtrf,+   pbtrs,+   pftrf,+   pftri,+   pftrs,+   pocon,+   poequ,+   poequb,+   porfs,+   posv,+   posvx,+   potf2,+   potrf,+   potri,+   potrs,+   ppcon,+   ppequ,+   pprfs,+   ppsv,+   ppsvx,+   pptrf,+   pptri,+   pptrs,+   pstf2,+   pstrf,+   ptcon,+   pteqr,+   ptrfs,+   ptsv,+   ptsvx,+   pttrf,+   pttrs,+   ptts2,+   rscl,+   spcon,+   sprfs,+   spsv,+   spsvx,+   sptrf,+   sptri,+   sptrs,+   stebz,+   stedc,+   stegr,+   stein,+   stemr,+   steqr,+   sterf,+   stev,+   stevd,+   stevr,+   stevx,+   sycon,+   syconv,+   syequb,+   syrfs,+   sysv,+   sysvx,+   syswapr,+   sytd2,+   sytf2,+   sytrd,+   sytrf,+   sytri,+   sytri2,+   sytri2x,+   sytrs,+   sytrs2,+   tbcon,+   tbrfs,+   tbtrs,+   tfsm,+   tftri,+   tfttp,+   tfttr,+   tgevc,+   tgex2,+   tgexc,+   tgsen,+   tgsja,+   tgsna,+   tgsy2,+   tgsyl,+   tpcon,+   tprfs,+   tptri,+   tptrs,+   tpttf,+   tpttr,+   trcon,+   trevc,+   trexc,+   trrfs,+   trsen,+   trsna,+   trsyl,+   trti2,+   trtri,+   trtrs,+   trttf,+   trttp,+   tzrzf,+   org2l,+   org2r,+   orgbr,+   orghr,+   orgl2,+   orglq,+   orgql,+   orgqr,+   orgr2,+   orgrq,+   orgtr,+   orm2l,+   orm2r,+   ormbr,+   ormhr,+   orml2,+   ormlq,+   ormql,+   ormqr,+   ormr2,+   ormr3,+   ormrq,+   ormrz,+   ormtr,+   opgtr,+   opmtr,+   ) where++import qualified Numeric.LAPACK.ComfortArray.Double as D+import qualified Numeric.LAPACK.ComfortArray.Float as S+import qualified Numeric.Netlib.Class as Class+import Numeric.Netlib.ComfortArray.Utility (ZeroInt)++import Data.Array.Comfort.Storable.Mutable (IOArray)+import Data.Array.Comfort.Storable (Array)++import Foreign.Ptr (Ptr, FunPtr)+import Foreign.C.Types (CInt)++++newtype BBCSD a = BBCSD {getBBCSD :: Char -> Char -> Char -> Char -> Char -> Int -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Int)}++bbcsd :: Class.Real a => Char -> Char -> Char -> Char -> Char -> Int -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Int)+bbcsd = getBBCSD $ Class.switchReal (BBCSD S.bbcsd) (BBCSD D.bbcsd)+++newtype BDSDC a = BDSDC {getBDSDC :: Char -> Char -> IOArray ZeroInt a -> IOArray ZeroInt a -> Int -> Int -> Int -> Int -> Int -> IO (Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Array ZeroInt a, Array ZeroInt CInt, Int)}++bdsdc :: Class.Real a => Char -> Char -> IOArray ZeroInt a -> IOArray ZeroInt a -> Int -> Int -> Int -> Int -> Int -> IO (Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Array ZeroInt a, Array ZeroInt CInt, Int)+bdsdc = getBDSDC $ Class.switchReal (BDSDC S.bdsdc) (BDSDC D.bdsdc)+++newtype BDSQR a = BDSQR {getBDSQR :: Char -> Int -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++bdsqr :: Class.Real a => Char -> Int -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+bdsqr = getBDSQR $ Class.switchReal (BDSQR S.bdsqr) (BDSQR D.bdsqr)+++newtype DISNA a = DISNA {getDISNA :: Char -> Int -> Int -> Array ZeroInt a -> Int -> IO (Array ZeroInt a, Int)}++disna :: Class.Real a => Char -> Int -> Int -> Array ZeroInt a -> Int -> IO (Array ZeroInt a, Int)+disna = getDISNA $ Class.switchReal (DISNA S.disna) (DISNA D.disna)+++newtype GBBRD a = GBBRD {getGBBRD :: Char -> Int -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Int)}++gbbrd :: Class.Real a => Char -> Int -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Int)+gbbrd = getGBBRD $ Class.switchReal (GBBRD S.gbbrd) (GBBRD D.gbbrd)+++newtype GBCON a = GBCON {getGBCON :: Char -> Int -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> a -> IO (a, Int)}++gbcon :: Class.Real a => Char -> Int -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> a -> IO (a, Int)+gbcon = getGBCON $ Class.switchReal (GBCON S.gbcon) (GBCON D.gbcon)+++newtype GBEQU a = GBEQU {getGBEQU :: Int -> Int -> Int -> Array (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Array ZeroInt a, a, a, a, Int)}++gbequ :: Class.Real a => Int -> Int -> Int -> Array (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Array ZeroInt a, a, a, a, Int)+gbequ = getGBEQU $ Class.switchReal (GBEQU S.gbequ) (GBEQU D.gbequ)+++newtype GBEQUB a = GBEQUB {getGBEQUB :: Int -> Int -> Int -> Array (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Array ZeroInt a, a, a, a, Int)}++gbequb :: Class.Real a => Int -> Int -> Int -> Array (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Array ZeroInt a, a, a, a, Int)+gbequb = getGBEQUB $ Class.switchReal (GBEQUB S.gbequb) (GBEQUB D.gbequb)+++newtype GBRFS a = GBRFS {getGBRFS :: Char -> Int -> Int -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Array ZeroInt a, Int)}++gbrfs :: Class.Real a => Char -> Int -> Int -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Array ZeroInt a, Int)+gbrfs = getGBRFS $ Class.switchReal (GBRFS S.gbrfs) (GBRFS D.gbrfs)+++newtype GBSV a = GBSV {getGBSV :: Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt CInt, Int)}++gbsv :: Class.Real a => Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt CInt, Int)+gbsv = getGBSV $ Class.switchReal (GBSV S.gbsv) (GBSV D.gbsv)+++newtype GBSVX a = GBSVX {getGBSVX :: Char -> Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray ZeroInt CInt -> Char -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Char, Array (ZeroInt,ZeroInt) a, a, Array ZeroInt a, Array ZeroInt a, Int)}++gbsvx :: Class.Real a => Char -> Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray ZeroInt CInt -> Char -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Char, Array (ZeroInt,ZeroInt) a, a, Array ZeroInt a, Array ZeroInt a, Int)+gbsvx = getGBSVX $ Class.switchReal (GBSVX S.gbsvx) (GBSVX D.gbsvx)+++newtype GBTF2 a = GBTF2 {getGBTF2 :: Int -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt CInt, Int)}++gbtf2 :: Class.Real a => Int -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt CInt, Int)+gbtf2 = getGBTF2 $ Class.switchReal (GBTF2 S.gbtf2) (GBTF2 D.gbtf2)+++newtype GBTRF a = GBTRF {getGBTRF :: Int -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt CInt, Int)}++gbtrf :: Class.Real a => Int -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt CInt, Int)+gbtrf = getGBTRF $ Class.switchReal (GBTRF S.gbtrf) (GBTRF D.gbtrf)+++newtype GBTRS a = GBTRS {getGBTRS :: Char -> Int -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++gbtrs :: Class.Real a => Char -> Int -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+gbtrs = getGBTRS $ Class.switchReal (GBTRS S.gbtrs) (GBTRS D.gbtrs)+++newtype GEBAK a = GEBAK {getGEBAK :: Char -> Char -> Int -> Int -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++gebak :: Class.Real a => Char -> Char -> Int -> Int -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+gebak = getGEBAK $ Class.switchReal (GEBAK S.gebak) (GEBAK D.gebak)+++newtype GEBAL a = GEBAL {getGEBAL :: Char -> IOArray (ZeroInt,ZeroInt) a -> IO (Int, Int, Array ZeroInt a, Int)}++gebal :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) a -> IO (Int, Int, Array ZeroInt a, Int)+gebal = getGEBAL $ Class.switchReal (GEBAL S.gebal) (GEBAL D.gebal)+++newtype GEBD2 a = GEBD2 {getGEBD2 :: Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Int)}++gebd2 :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Int)+gebd2 = getGEBD2 $ Class.switchReal (GEBD2 S.gebd2) (GEBD2 D.gebd2)+++newtype GEBRD a = GEBRD {getGEBRD :: Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Int)}++gebrd :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Int)+gebrd = getGEBRD $ Class.switchReal (GEBRD S.gebrd) (GEBRD D.gebrd)+++newtype GECON a = GECON {getGECON :: Char -> Array (ZeroInt,ZeroInt) a -> a -> IO (a, Int)}++gecon :: Class.Real a => Char -> Array (ZeroInt,ZeroInt) a -> a -> IO (a, Int)+gecon = getGECON $ Class.switchReal (GECON S.gecon) (GECON D.gecon)+++newtype GEEQU a = GEEQU {getGEEQU :: Int -> Array (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Array ZeroInt a, a, a, a, Int)}++geequ :: Class.Real a => Int -> Array (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Array ZeroInt a, a, a, a, Int)+geequ = getGEEQU $ Class.switchReal (GEEQU S.geequ) (GEEQU D.geequ)+++newtype GEEQUB a = GEEQUB {getGEEQUB :: Int -> Array (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Array ZeroInt a, a, a, a, Int)}++geequb :: Class.Real a => Int -> Array (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Array ZeroInt a, a, a, a, Int)+geequb = getGEEQUB $ Class.switchReal (GEEQUB S.geequb) (GEEQUB D.geequb)+++newtype GEES a = GEES {getGEES :: Char -> Char -> FunPtr (Ptr a -> Ptr a -> IO Bool) -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> IO (Int, Array ZeroInt a, Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Int)}++gees :: Class.Real a => Char -> Char -> FunPtr (Ptr a -> Ptr a -> IO Bool) -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> IO (Int, Array ZeroInt a, Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Int)+gees = getGEES $ Class.switchReal (GEES S.gees) (GEES D.gees)+++newtype GEESX a = GEESX {getGEESX :: Char -> Char -> FunPtr (Ptr a -> Ptr a -> IO Bool) -> Char -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> Int -> IO (Int, Array ZeroInt a, Array ZeroInt a, Array (ZeroInt,ZeroInt) a, a, a, Int)}++geesx :: Class.Real a => Char -> Char -> FunPtr (Ptr a -> Ptr a -> IO Bool) -> Char -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> Int -> IO (Int, Array ZeroInt a, Array ZeroInt a, Array (ZeroInt,ZeroInt) a, a, a, Int)+geesx = getGEESX $ Class.switchReal (GEESX S.geesx) (GEESX D.geesx)+++newtype GEEV a = GEEV {getGEEV :: Char -> Char -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Int)}++geev :: Class.Real a => Char -> Char -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Int)+geev = getGEEV $ Class.switchReal (GEEV S.geev) (GEEV D.geev)+++newtype GEEVX a = GEEVX {getGEEVX :: Char -> Char -> Char -> Char -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Int, Int, Array ZeroInt a, a, Array ZeroInt a, Array ZeroInt a, Int)}++geevx :: Class.Real a => Char -> Char -> Char -> Char -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Int, Int, Array ZeroInt a, a, Array ZeroInt a, Array ZeroInt a, Int)+geevx = getGEEVX $ Class.switchReal (GEEVX S.geevx) (GEEVX D.geevx)+++newtype GEHD2 a = GEHD2 {getGEHD2 :: Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Int)}++gehd2 :: Class.Real a => Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Int)+gehd2 = getGEHD2 $ Class.switchReal (GEHD2 S.gehd2) (GEHD2 D.gehd2)+++newtype GEHRD a = GEHRD {getGEHRD :: Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Int)}++gehrd :: Class.Real a => Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Int)+gehrd = getGEHRD $ Class.switchReal (GEHRD S.gehrd) (GEHRD D.gehrd)+++newtype GEJSV a = GEJSV {getGEJSV :: Char -> Char -> Char -> Char -> Char -> Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> Int -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Int)}++gejsv :: Class.Real a => Char -> Char -> Char -> Char -> Char -> Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> Int -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Int)+gejsv = getGEJSV $ Class.switchReal (GEJSV S.gejsv) (GEJSV D.gejsv)+++newtype GELQ2 a = GELQ2 {getGELQ2 :: Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Int)}++gelq2 :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Int)+gelq2 = getGELQ2 $ Class.switchReal (GELQ2 S.gelq2) (GELQ2 D.gelq2)+++newtype GELQF a = GELQF {getGELQF :: Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Int)}++gelqf :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Int)+gelqf = getGELQF $ Class.switchReal (GELQF S.gelqf) (GELQF D.gelqf)+++newtype GELS a = GELS {getGELS :: Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)}++gels :: Class.Real a => Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)+gels = getGELS $ Class.switchReal (GELS S.gels) (GELS D.gels)+++newtype GELSD a = GELSD {getGELSD :: Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> a -> Int -> Int -> IO (Array ZeroInt a, Int, Int)}++gelsd :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> a -> Int -> Int -> IO (Array ZeroInt a, Int, Int)+gelsd = getGELSD $ Class.switchReal (GELSD S.gelsd) (GELSD D.gelsd)+++newtype GELSS a = GELSS {getGELSS :: Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> a -> Int -> IO (Array ZeroInt a, Int, Int)}++gelss :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> a -> Int -> IO (Array ZeroInt a, Int, Int)+gelss = getGELSS $ Class.switchReal (GELSS S.gelss) (GELSS D.gelss)+++newtype GELSY a = GELSY {getGELSY :: Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray ZeroInt CInt -> a -> Int -> IO (Int, Int)}++gelsy :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray ZeroInt CInt -> a -> Int -> IO (Int, Int)+gelsy = getGELSY $ Class.switchReal (GELSY S.gelsy) (GELSY D.gelsy)+++newtype GEQL2 a = GEQL2 {getGEQL2 :: Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Int)}++geql2 :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Int)+geql2 = getGEQL2 $ Class.switchReal (GEQL2 S.geql2) (GEQL2 D.geql2)+++newtype GEQLF a = GEQLF {getGEQLF :: Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Int)}++geqlf :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Int)+geqlf = getGEQLF $ Class.switchReal (GEQLF S.geqlf) (GEQLF D.geqlf)+++newtype GEQP3 a = GEQP3 {getGEQP3 :: Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray ZeroInt CInt -> Int -> IO (Array ZeroInt a, Int)}++geqp3 :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray ZeroInt CInt -> Int -> IO (Array ZeroInt a, Int)+geqp3 = getGEQP3 $ Class.switchReal (GEQP3 S.geqp3) (GEQP3 D.geqp3)+++newtype GEQR2 a = GEQR2 {getGEQR2 :: Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Int)}++geqr2 :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Int)+geqr2 = getGEQR2 $ Class.switchReal (GEQR2 S.geqr2) (GEQR2 D.geqr2)+++newtype GEQR2P a = GEQR2P {getGEQR2P :: Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Int)}++geqr2p :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Int)+geqr2p = getGEQR2P $ Class.switchReal (GEQR2P S.geqr2p) (GEQR2P D.geqr2p)+++newtype GEQRF a = GEQRF {getGEQRF :: Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Int)}++geqrf :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Int)+geqrf = getGEQRF $ Class.switchReal (GEQRF S.geqrf) (GEQRF D.geqrf)+++newtype GEQRFP a = GEQRFP {getGEQRFP :: Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Int)}++geqrfp :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Int)+geqrfp = getGEQRFP $ Class.switchReal (GEQRFP S.geqrfp) (GEQRFP D.geqrfp)+++newtype GERFS a = GERFS {getGERFS :: Char -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Array ZeroInt a, Int)}++gerfs :: Class.Real a => Char -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Array ZeroInt a, Int)+gerfs = getGERFS $ Class.switchReal (GERFS S.gerfs) (GERFS D.gerfs)+++newtype GERQ2 a = GERQ2 {getGERQ2 :: Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Int)}++gerq2 :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Int)+gerq2 = getGERQ2 $ Class.switchReal (GERQ2 S.gerq2) (GERQ2 D.gerq2)+++newtype GERQF a = GERQF {getGERQF :: Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Int)}++gerqf :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Int)+gerqf = getGERQF $ Class.switchReal (GERQF S.gerqf) (GERQF D.gerqf)+++newtype GESC2 a = GESC2 {getGESC2 :: Array (ZeroInt,ZeroInt) a -> IOArray ZeroInt a -> Array ZeroInt CInt -> Array ZeroInt CInt -> IO (a)}++gesc2 :: Class.Real a => Array (ZeroInt,ZeroInt) a -> IOArray ZeroInt a -> Array ZeroInt CInt -> Array ZeroInt CInt -> IO (a)+gesc2 = getGESC2 $ Class.switchReal (GESC2 S.gesc2) (GESC2 D.gesc2)+++newtype GESDD a = GESDD {getGESDD :: Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> Int -> Int -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Int)}++gesdd :: Class.Real a => Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> Int -> Int -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Int)+gesdd = getGESDD $ Class.switchReal (GESDD S.gesdd) (GESDD D.gesdd)+++newtype GESV a = GESV {getGESV :: IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt CInt, Int)}++gesv :: Class.Real a => IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt CInt, Int)+gesv = getGESV $ Class.switchReal (GESV S.gesv) (GESV D.gesv)+++newtype GESVD a = GESVD {getGESVD :: Char -> Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> Int -> Int -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Int)}++gesvd :: Class.Real a => Char -> Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> Int -> Int -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Int)+gesvd = getGESVD $ Class.switchReal (GESVD S.gesvd) (GESVD D.gesvd)+++newtype GESVJ a = GESVJ {getGESVJ :: Char -> Char -> Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray ZeroInt a -> IO (Array ZeroInt a, Int)}++gesvj :: Class.Real a => Char -> Char -> Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray ZeroInt a -> IO (Array ZeroInt a, Int)+gesvj = getGESVJ $ Class.switchReal (GESVJ S.gesvj) (GESVJ D.gesvj)+++newtype GESVX a = GESVX {getGESVX :: Char -> Char -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray ZeroInt CInt -> Char -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Char, Array (ZeroInt,ZeroInt) a, a, Array ZeroInt a, Array ZeroInt a, Int)}++gesvx :: Class.Real a => Char -> Char -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray ZeroInt CInt -> Char -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Char, Array (ZeroInt,ZeroInt) a, a, Array ZeroInt a, Array ZeroInt a, Int)+gesvx = getGESVX $ Class.switchReal (GESVX S.gesvx) (GESVX D.gesvx)+++newtype GETC2 a = GETC2 {getGETC2 :: IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt CInt, Array ZeroInt CInt, Int)}++getc2 :: Class.Real a => IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt CInt, Array ZeroInt CInt, Int)+getc2 = getGETC2 $ Class.switchReal (GETC2 S.getc2) (GETC2 D.getc2)+++newtype GETF2 a = GETF2 {getGETF2 :: Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt CInt, Int)}++getf2 :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt CInt, Int)+getf2 = getGETF2 $ Class.switchReal (GETF2 S.getf2) (GETF2 D.getf2)+++newtype GETRF a = GETRF {getGETRF :: Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt CInt, Int)}++getrf :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt CInt, Int)+getrf = getGETRF $ Class.switchReal (GETRF S.getrf) (GETRF D.getrf)+++newtype GETRI a = GETRI {getGETRI :: IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> Int -> IO (Int)}++getri :: Class.Real a => IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> Int -> IO (Int)+getri = getGETRI $ Class.switchReal (GETRI S.getri) (GETRI D.getri)+++newtype GETRS a = GETRS {getGETRS :: Char -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++getrs :: Class.Real a => Char -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+getrs = getGETRS $ Class.switchReal (GETRS S.getrs) (GETRS D.getrs)+++newtype GGBAK a = GGBAK {getGGBAK :: Char -> Char -> Int -> Int -> Array ZeroInt a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++ggbak :: Class.Real a => Char -> Char -> Int -> Int -> Array ZeroInt a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+ggbak = getGGBAK $ Class.switchReal (GGBAK S.ggbak) (GGBAK D.ggbak)+++newtype GGBAL a = GGBAL {getGGBAL :: Char -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int, Int, Array ZeroInt a, Array ZeroInt a, Int)}++ggbal :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int, Int, Array ZeroInt a, Array ZeroInt a, Int)+ggbal = getGGBAL $ Class.switchReal (GGBAL S.ggbal) (GGBAL D.ggbal)+++newtype GGES a = GGES {getGGES :: Char -> Char -> Char -> FunPtr (Ptr a -> Ptr a -> Ptr a -> IO Bool) -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> Int -> IO (Int, Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Int)}++gges :: Class.Real a => Char -> Char -> Char -> FunPtr (Ptr a -> Ptr a -> Ptr a -> IO Bool) -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> Int -> IO (Int, Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Int)+gges = getGGES $ Class.switchReal (GGES S.gges) (GGES D.gges)+++newtype GGESX a = GGESX {getGGESX :: Char -> Char -> Char -> FunPtr (Ptr a -> Ptr a -> Ptr a -> IO Bool) -> Char -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> Int -> Int -> IO (Int, Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Array ZeroInt a, Array ZeroInt a, Int)}++ggesx :: Class.Real a => Char -> Char -> Char -> FunPtr (Ptr a -> Ptr a -> Ptr a -> IO Bool) -> Char -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> Int -> Int -> IO (Int, Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Array ZeroInt a, Array ZeroInt a, Int)+ggesx = getGGESX $ Class.switchReal (GGESX S.ggesx) (GGESX D.ggesx)+++newtype GGEV a = GGEV {getGGEV :: Char -> Char -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Int)}++ggev :: Class.Real a => Char -> Char -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Int)+ggev = getGGEV $ Class.switchReal (GGEV S.ggev) (GGEV D.ggev)+++newtype GGEVX a = GGEVX {getGGEVX :: Char -> Char -> Char -> Char -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Int, Int, Array ZeroInt a, Array ZeroInt a, a, a, Array ZeroInt a, Array ZeroInt a, Int)}++ggevx :: Class.Real a => Char -> Char -> Char -> Char -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Int, Int, Array ZeroInt a, Array ZeroInt a, a, a, Array ZeroInt a, Array ZeroInt a, Int)+ggevx = getGGEVX $ Class.switchReal (GGEVX S.ggevx) (GGEVX D.ggevx)+++newtype GGGLM a = GGGLM {getGGGLM :: IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray ZeroInt a -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Int)}++ggglm :: Class.Real a => IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray ZeroInt a -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Int)+ggglm = getGGGLM $ Class.switchReal (GGGLM S.ggglm) (GGGLM D.ggglm)+++newtype GGHRD a = GGHRD {getGGHRD :: Char -> Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++gghrd :: Class.Real a => Char -> Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+gghrd = getGGHRD $ Class.switchReal (GGHRD S.gghrd) (GGHRD D.gghrd)+++newtype GGLSE a = GGLSE {getGGLSE :: IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray ZeroInt a -> IOArray ZeroInt a -> Int -> IO (Array ZeroInt a, Int)}++gglse :: Class.Real a => IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray ZeroInt a -> IOArray ZeroInt a -> Int -> IO (Array ZeroInt a, Int)+gglse = getGGLSE $ Class.switchReal (GGLSE S.gglse) (GGLSE D.gglse)+++newtype GGQRF a = GGQRF {getGGQRF :: Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Int)}++ggqrf :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Int)+ggqrf = getGGQRF $ Class.switchReal (GGQRF S.ggqrf) (GGQRF D.ggqrf)+++newtype GGRQF a = GGRQF {getGGRQF :: Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Int)}++ggrqf :: Class.Real a => Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Int)+ggrqf = getGGRQF $ Class.switchReal (GGRQF S.ggrqf) (GGRQF D.ggrqf)+++newtype GSVJ0 a = GSVJ0 {getGSVJ0 :: Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray ZeroInt a -> IOArray ZeroInt a -> Int -> IOArray (ZeroInt,ZeroInt) a -> a -> a -> a -> Int -> Int -> IO (Int)}++gsvj0 :: Class.Real a => Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray ZeroInt a -> IOArray ZeroInt a -> Int -> IOArray (ZeroInt,ZeroInt) a -> a -> a -> a -> Int -> Int -> IO (Int)+gsvj0 = getGSVJ0 $ Class.switchReal (GSVJ0 S.gsvj0) (GSVJ0 D.gsvj0)+++newtype GSVJ1 a = GSVJ1 {getGSVJ1 :: Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray ZeroInt a -> IOArray ZeroInt a -> Int -> IOArray (ZeroInt,ZeroInt) a -> a -> a -> a -> Int -> Int -> IO (Int)}++gsvj1 :: Class.Real a => Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray ZeroInt a -> IOArray ZeroInt a -> Int -> IOArray (ZeroInt,ZeroInt) a -> a -> a -> a -> Int -> Int -> IO (Int)+gsvj1 = getGSVJ1 $ Class.switchReal (GSVJ1 S.gsvj1) (GSVJ1 D.gsvj1)+++newtype GTCON a = GTCON {getGTCON :: Char -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt CInt -> a -> IO (a, Int)}++gtcon :: Class.Real a => Char -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt CInt -> a -> IO (a, Int)+gtcon = getGTCON $ Class.switchReal (GTCON S.gtcon) (GTCON D.gtcon)+++newtype GTRFS a = GTRFS {getGTRFS :: Char -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt CInt -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Array ZeroInt a, Int)}++gtrfs :: Class.Real a => Char -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt CInt -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Array ZeroInt a, Int)+gtrfs = getGTRFS $ Class.switchReal (GTRFS S.gtrfs) (GTRFS D.gtrfs)+++newtype GTSV a = GTSV {getGTSV :: IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++gtsv :: Class.Real a => IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+gtsv = getGTSV $ Class.switchReal (GTSV S.gtsv) (GTSV D.gtsv)+++newtype GTSVX a = GTSVX {getGTSVX :: Char -> Char -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray ZeroInt CInt -> Array (ZeroInt,ZeroInt) a -> Int -> IO (Array (ZeroInt,ZeroInt) a, a, Array ZeroInt a, Array ZeroInt a, Int)}++gtsvx :: Class.Real a => Char -> Char -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray ZeroInt CInt -> Array (ZeroInt,ZeroInt) a -> Int -> IO (Array (ZeroInt,ZeroInt) a, a, Array ZeroInt a, Array ZeroInt a, Int)+gtsvx = getGTSVX $ Class.switchReal (GTSVX S.gtsvx) (GTSVX D.gtsvx)+++newtype GTTRF a = GTTRF {getGTTRF :: IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray ZeroInt a -> IO (Array ZeroInt a, Array ZeroInt CInt, Int)}++gttrf :: Class.Real a => IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray ZeroInt a -> IO (Array ZeroInt a, Array ZeroInt CInt, Int)+gttrf = getGTTRF $ Class.switchReal (GTTRF S.gttrf) (GTTRF D.gttrf)+++newtype GTTRS a = GTTRS {getGTTRS :: Char -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt CInt -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++gttrs :: Class.Real a => Char -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt CInt -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+gttrs = getGTTRS $ Class.switchReal (GTTRS S.gttrs) (GTTRS D.gttrs)+++newtype GTTS2 a = GTTS2 {getGTTS2 :: Int -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt CInt -> IOArray (ZeroInt,ZeroInt) a -> IO ()}++gtts2 :: Class.Real a => Int -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt CInt -> IOArray (ZeroInt,ZeroInt) a -> IO ()+gtts2 = getGTTS2 $ Class.switchReal (GTTS2 S.gtts2) (GTTS2 D.gtts2)+++newtype SBEV a = SBEV {getSBEV :: Char -> Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Int)}++sbev :: Class.Real a => Char -> Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Int)+sbev = getSBEV $ Class.switchReal (SBEV S.sbev) (SBEV D.sbev)+++newtype SBEVD a = SBEVD {getSBEVD :: Char -> Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> Int -> Int -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Int)}++sbevd :: Class.Real a => Char -> Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> Int -> Int -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Int)+sbevd = getSBEVD $ Class.switchReal (SBEVD S.sbevd) (SBEVD D.sbevd)+++newtype SBEVX a = SBEVX {getSBEVX :: Char -> Char -> Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> a -> a -> Int -> Int -> a -> Int -> Int -> IO (Array (ZeroInt,ZeroInt) a, Int, Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array ZeroInt CInt, Int)}++sbevx :: Class.Real a => Char -> Char -> Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> a -> a -> Int -> Int -> a -> Int -> Int -> IO (Array (ZeroInt,ZeroInt) a, Int, Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array ZeroInt CInt, Int)+sbevx = getSBEVX $ Class.switchReal (SBEVX S.sbevx) (SBEVX D.sbevx)+++newtype SBGST a = SBGST {getSBGST :: Char -> Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Int -> IO (Array (ZeroInt,ZeroInt) a, Int)}++sbgst :: Class.Real a => Char -> Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Int -> IO (Array (ZeroInt,ZeroInt) a, Int)+sbgst = getSBGST $ Class.switchReal (SBGST S.sbgst) (SBGST D.sbgst)+++newtype SBGV a = SBGV {getSBGV :: Char -> Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Int)}++sbgv :: Class.Real a => Char -> Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Int)+sbgv = getSBGV $ Class.switchReal (SBGV S.sbgv) (SBGV D.sbgv)+++newtype SBGVD a = SBGVD {getSBGVD :: Char -> Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> Int -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Int)}++sbgvd :: Class.Real a => Char -> Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> Int -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Int)+sbgvd = getSBGVD $ Class.switchReal (SBGVD S.sbgvd) (SBGVD D.sbgvd)+++newtype SBGVX a = SBGVX {getSBGVX :: Char -> Char -> Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> a -> a -> Int -> Int -> a -> Int -> Int -> IO (Array (ZeroInt,ZeroInt) a, Int, Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array ZeroInt CInt, Int)}++sbgvx :: Class.Real a => Char -> Char -> Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> a -> a -> Int -> Int -> a -> Int -> Int -> IO (Array (ZeroInt,ZeroInt) a, Int, Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array ZeroInt CInt, Int)+sbgvx = getSBGVX $ Class.switchReal (SBGVX S.sbgvx) (SBGVX D.sbgvx)+++newtype SBTRD a = SBTRD {getSBTRD :: Char -> Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Array ZeroInt a, Int)}++sbtrd :: Class.Real a => Char -> Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Array ZeroInt a, Int)+sbtrd = getSBTRD $ Class.switchReal (SBTRD S.sbtrd) (SBTRD D.sbtrd)+++newtype SYEV a = SYEV {getSYEV :: Char -> Char -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Int)}++syev :: Class.Real a => Char -> Char -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Int)+syev = getSYEV $ Class.switchReal (SYEV S.syev) (SYEV D.syev)+++newtype SYEVD a = SYEVD {getSYEVD :: Char -> Char -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> Int -> IO (Array ZeroInt a, Int)}++syevd :: Class.Real a => Char -> Char -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> Int -> IO (Array ZeroInt a, Int)+syevd = getSYEVD $ Class.switchReal (SYEVD S.syevd) (SYEVD D.syevd)+++newtype SYEVR a = SYEVR {getSYEVR :: Char -> Char -> Char -> IOArray (ZeroInt,ZeroInt) a -> a -> a -> Int -> Int -> a -> Int -> Int -> Int -> Int -> IO (Int, Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array ZeroInt CInt, Int)}++syevr :: Class.Real a => Char -> Char -> Char -> IOArray (ZeroInt,ZeroInt) a -> a -> a -> Int -> Int -> a -> Int -> Int -> Int -> Int -> IO (Int, Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array ZeroInt CInt, Int)+syevr = getSYEVR $ Class.switchReal (SYEVR S.syevr) (SYEVR D.syevr)+++newtype SYEVX a = SYEVX {getSYEVX :: Char -> Char -> Char -> IOArray (ZeroInt,ZeroInt) a -> a -> a -> Int -> Int -> a -> Int -> Int -> Int -> IO (Int, Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array ZeroInt CInt, Int)}++syevx :: Class.Real a => Char -> Char -> Char -> IOArray (ZeroInt,ZeroInt) a -> a -> a -> Int -> Int -> a -> Int -> Int -> Int -> IO (Int, Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array ZeroInt CInt, Int)+syevx = getSYEVX $ Class.switchReal (SYEVX S.syevx) (SYEVX D.syevx)+++newtype SYGS2 a = SYGS2 {getSYGS2 :: Int -> Char -> IOArray (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> IO (Int)}++sygs2 :: Class.Real a => Int -> Char -> IOArray (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> IO (Int)+sygs2 = getSYGS2 $ Class.switchReal (SYGS2 S.sygs2) (SYGS2 D.sygs2)+++newtype SYGST a = SYGST {getSYGST :: Int -> Char -> IOArray (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> IO (Int)}++sygst :: Class.Real a => Int -> Char -> IOArray (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> IO (Int)+sygst = getSYGST $ Class.switchReal (SYGST S.sygst) (SYGST D.sygst)+++newtype SYGV a = SYGV {getSYGV :: Int -> Char -> Char -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Int)}++sygv :: Class.Real a => Int -> Char -> Char -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Int)+sygv = getSYGV $ Class.switchReal (SYGV S.sygv) (SYGV D.sygv)+++newtype SYGVD a = SYGVD {getSYGVD :: Int -> Char -> Char -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> IO (Array ZeroInt a, Int)}++sygvd :: Class.Real a => Int -> Char -> Char -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> IO (Array ZeroInt a, Int)+sygvd = getSYGVD $ Class.switchReal (SYGVD S.sygvd) (SYGVD D.sygvd)+++newtype SYGVX a = SYGVX {getSYGVX :: Int -> Char -> Char -> Char -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> a -> a -> Int -> Int -> a -> Int -> Int -> Int -> IO (Int, Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array ZeroInt CInt, Int)}++sygvx :: Class.Real a => Int -> Char -> Char -> Char -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> a -> a -> Int -> Int -> a -> Int -> Int -> Int -> IO (Int, Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array ZeroInt CInt, Int)+sygvx = getSYGVX $ Class.switchReal (SYGVX S.sygvx) (SYGVX D.sygvx)+++newtype SFRK a = SFRK {getSFRK :: Char -> Char -> Char -> Int -> Int -> a -> Array (ZeroInt,ZeroInt) a -> a -> IOArray ZeroInt a -> IO ()}++sfrk :: Class.Real a => Char -> Char -> Char -> Int -> Int -> a -> Array (ZeroInt,ZeroInt) a -> a -> IOArray ZeroInt a -> IO ()+sfrk = getSFRK $ Class.switchReal (SFRK S.sfrk) (SFRK D.sfrk)+++newtype HGEQZ a = HGEQZ {getHGEQZ :: Char -> Char -> Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Int)}++hgeqz :: Class.Real a => Char -> Char -> Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Int)+hgeqz = getHGEQZ $ Class.switchReal (HGEQZ S.hgeqz) (HGEQZ D.hgeqz)+++newtype SPEV a = SPEV {getSPEV :: Char -> Char -> Int -> IOArray ZeroInt a -> Int -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Int)}++spev :: Class.Real a => Char -> Char -> Int -> IOArray ZeroInt a -> Int -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Int)+spev = getSPEV $ Class.switchReal (SPEV S.spev) (SPEV D.spev)+++newtype SPEVD a = SPEVD {getSPEVD :: Char -> Char -> Int -> IOArray ZeroInt a -> Int -> Int -> Int -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Int)}++spevd :: Class.Real a => Char -> Char -> Int -> IOArray ZeroInt a -> Int -> Int -> Int -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Int)+spevd = getSPEVD $ Class.switchReal (SPEVD S.spevd) (SPEVD D.spevd)+++newtype SPEVX a = SPEVX {getSPEVX :: Char -> Char -> Char -> Int -> IOArray ZeroInt a -> a -> a -> Int -> Int -> a -> Int -> Int -> IO (Int, Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array ZeroInt CInt, Int)}++spevx :: Class.Real a => Char -> Char -> Char -> Int -> IOArray ZeroInt a -> a -> a -> Int -> Int -> a -> Int -> Int -> IO (Int, Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array ZeroInt CInt, Int)+spevx = getSPEVX $ Class.switchReal (SPEVX S.spevx) (SPEVX D.spevx)+++newtype SPGST a = SPGST {getSPGST :: Int -> Char -> Int -> IOArray ZeroInt a -> Array ZeroInt a -> IO (Int)}++spgst :: Class.Real a => Int -> Char -> Int -> IOArray ZeroInt a -> Array ZeroInt a -> IO (Int)+spgst = getSPGST $ Class.switchReal (SPGST S.spgst) (SPGST D.spgst)+++newtype SPGV a = SPGV {getSPGV :: Int -> Char -> Char -> Int -> IOArray ZeroInt a -> IOArray ZeroInt a -> Int -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Int)}++spgv :: Class.Real a => Int -> Char -> Char -> Int -> IOArray ZeroInt a -> IOArray ZeroInt a -> Int -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Int)+spgv = getSPGV $ Class.switchReal (SPGV S.spgv) (SPGV D.spgv)+++newtype SPGVD a = SPGVD {getSPGVD :: Int -> Char -> Char -> Int -> IOArray ZeroInt a -> IOArray ZeroInt a -> Int -> Int -> Int -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Int)}++spgvd :: Class.Real a => Int -> Char -> Char -> Int -> IOArray ZeroInt a -> IOArray ZeroInt a -> Int -> Int -> Int -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Int)+spgvd = getSPGVD $ Class.switchReal (SPGVD S.spgvd) (SPGVD D.spgvd)+++newtype SPGVX a = SPGVX {getSPGVX :: Int -> Char -> Char -> Char -> Int -> IOArray ZeroInt a -> IOArray ZeroInt a -> a -> a -> Int -> Int -> a -> Int -> Int -> IO (Int, Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array ZeroInt CInt, Int)}++spgvx :: Class.Real a => Int -> Char -> Char -> Char -> Int -> IOArray ZeroInt a -> IOArray ZeroInt a -> a -> a -> Int -> Int -> a -> Int -> Int -> IO (Int, Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array ZeroInt CInt, Int)+spgvx = getSPGVX $ Class.switchReal (SPGVX S.spgvx) (SPGVX D.spgvx)+++newtype SPTRD a = SPTRD {getSPTRD :: Char -> Int -> IOArray ZeroInt a -> IO (Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Int)}++sptrd :: Class.Real a => Char -> Int -> IOArray ZeroInt a -> IO (Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Int)+sptrd = getSPTRD $ Class.switchReal (SPTRD S.sptrd) (SPTRD D.sptrd)+++newtype HSEIN a = HSEIN {getHSEIN :: Char -> Char -> Char -> IOArray ZeroInt Bool -> Array (ZeroInt,ZeroInt) a -> IOArray ZeroInt a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)}++hsein :: Class.Real a => Char -> Char -> Char -> IOArray ZeroInt Bool -> Array (ZeroInt,ZeroInt) a -> IOArray ZeroInt a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)+hsein = getHSEIN $ Class.switchReal (HSEIN S.hsein) (HSEIN D.hsein)+++newtype HSEQR a = HSEQR {getHSEQR :: Char -> Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Int)}++hseqr :: Class.Real a => Char -> Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Int)+hseqr = getHSEQR $ Class.switchReal (HSEQR S.hseqr) (HSEQR D.hseqr)+++newtype ILALC a = ILALC {getILALC :: Int -> Array (ZeroInt,ZeroInt) a -> IO CInt}++ilalc :: Class.Real a => Int -> Array (ZeroInt,ZeroInt) a -> IO CInt+ilalc = getILALC $ Class.switchReal (ILALC S.ilalc) (ILALC D.ilalc)+++newtype ILALR a = ILALR {getILALR :: Int -> Array (ZeroInt,ZeroInt) a -> IO CInt}++ilalr :: Class.Real a => Int -> Array (ZeroInt,ZeroInt) a -> IO CInt+ilalr = getILALR $ Class.switchReal (ILALR S.ilalr) (ILALR D.ilalr)+++newtype ISNAN a = ISNAN {getISNAN :: a -> IO Bool}++isnan :: Class.Real a => a -> IO Bool+isnan = getISNAN $ Class.switchReal (ISNAN S.isnan) (ISNAN D.isnan)+++newtype LABAD a = LABAD {getLABAD :: a -> a -> IO (a, a)}++labad :: Class.Real a => a -> a -> IO (a, a)+labad = getLABAD $ Class.switchReal (LABAD S.labad) (LABAD D.labad)+++newtype LABRD a = LABRD {getLABRD :: Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a)}++labrd :: Class.Real a => Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a)+labrd = getLABRD $ Class.switchReal (LABRD S.labrd) (LABRD D.labrd)+++newtype LACN2 a = LACN2 {getLACN2 :: IOArray ZeroInt a -> a -> Int -> IOArray ZeroInt CInt -> IO (Array ZeroInt a, Array ZeroInt CInt, a, Int)}++lacn2 :: Class.Real a => IOArray ZeroInt a -> a -> Int -> IOArray ZeroInt CInt -> IO (Array ZeroInt a, Array ZeroInt CInt, a, Int)+lacn2 = getLACN2 $ Class.switchReal (LACN2 S.lacn2) (LACN2 D.lacn2)+++newtype LACON a = LACON {getLACON :: IOArray ZeroInt a -> a -> Int -> IO (Array ZeroInt a, Array ZeroInt CInt, a, Int)}++lacon :: Class.Real a => IOArray ZeroInt a -> a -> Int -> IO (Array ZeroInt a, Array ZeroInt CInt, a, Int)+lacon = getLACON $ Class.switchReal (LACON S.lacon) (LACON D.lacon)+++newtype LACPY a = LACPY {getLACPY :: Char -> Int -> Array (ZeroInt,ZeroInt) a -> Int -> IO (Array (ZeroInt,ZeroInt) a)}++lacpy :: Class.Real a => Char -> Int -> Array (ZeroInt,ZeroInt) a -> Int -> IO (Array (ZeroInt,ZeroInt) a)+lacpy = getLACPY $ Class.switchReal (LACPY S.lacpy) (LACPY D.lacpy)+++newtype LADIV a = LADIV {getLADIV :: a -> a -> a -> a -> IO (a, a)}++ladiv :: Class.Real a => a -> a -> a -> a -> IO (a, a)+ladiv = getLADIV $ Class.switchReal (LADIV S.ladiv) (LADIV D.ladiv)+++newtype LAE2 a = LAE2 {getLAE2 :: a -> a -> a -> IO (a, a)}++lae2 :: Class.Real a => a -> a -> a -> IO (a, a)+lae2 = getLAE2 $ Class.switchReal (LAE2 S.lae2) (LAE2 D.lae2)+++newtype LAEBZ a = LAEBZ {getLAEBZ :: Int -> Int -> Int -> a -> a -> a -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> IOArray ZeroInt CInt -> IOArray (ZeroInt,ZeroInt) a -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) CInt -> IO (Int, Int)}++laebz :: Class.Real a => Int -> Int -> Int -> a -> a -> a -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> IOArray ZeroInt CInt -> IOArray (ZeroInt,ZeroInt) a -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) CInt -> IO (Int, Int)+laebz = getLAEBZ $ Class.switchReal (LAEBZ S.laebz) (LAEBZ D.laebz)+++newtype LAED0 a = LAED0 {getLAED0 :: Int -> Int -> IOArray ZeroInt a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> Int -> IO (Array (ZeroInt,ZeroInt) a, Int)}++laed0 :: Class.Real a => Int -> Int -> IOArray ZeroInt a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> Int -> IO (Array (ZeroInt,ZeroInt) a, Int)+laed0 = getLAED0 $ Class.switchReal (LAED0 S.laed0) (LAED0 D.laed0)+++newtype LAED1 a = LAED1 {getLAED1 :: IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IOArray ZeroInt CInt -> a -> Int -> IO (Int)}++laed1 :: Class.Real a => IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IOArray ZeroInt CInt -> a -> Int -> IO (Int)+laed1 = getLAED1 $ Class.switchReal (LAED1 S.laed1) (LAED1 D.laed1)+++newtype LAED2 a = LAED2 {getLAED2 :: Int -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IOArray ZeroInt CInt -> a -> Array ZeroInt a -> IO (Int, a, Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int)}++laed2 :: Class.Real a => Int -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IOArray ZeroInt CInt -> a -> Array ZeroInt a -> IO (Int, a, Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int)+laed2 = getLAED2 $ Class.switchReal (LAED2 S.laed2) (LAED2 D.laed2)+++newtype LAED3 a = LAED3 {getLAED3 :: Int -> Int -> a -> IOArray ZeroInt a -> Array ZeroInt a -> Array ZeroInt CInt -> Array ZeroInt CInt -> IOArray ZeroInt a -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array ZeroInt a, Int)}++laed3 :: Class.Real a => Int -> Int -> a -> IOArray ZeroInt a -> Array ZeroInt a -> Array ZeroInt CInt -> Array ZeroInt CInt -> IOArray ZeroInt a -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array ZeroInt a, Int)+laed3 = getLAED3 $ Class.switchReal (LAED3 S.laed3) (LAED3 D.laed3)+++newtype LAED4 a = LAED4 {getLAED4 :: Int -> Array ZeroInt a -> Array ZeroInt a -> a -> IO (Array ZeroInt a, a, Int)}++laed4 :: Class.Real a => Int -> Array ZeroInt a -> Array ZeroInt a -> a -> IO (Array ZeroInt a, a, Int)+laed4 = getLAED4 $ Class.switchReal (LAED4 S.laed4) (LAED4 D.laed4)+++newtype LAED5 a = LAED5 {getLAED5 :: Int -> Array ZeroInt a -> Array ZeroInt a -> a -> IO (Array ZeroInt a, a)}++laed5 :: Class.Real a => Int -> Array ZeroInt a -> Array ZeroInt a -> a -> IO (Array ZeroInt a, a)+laed5 = getLAED5 $ Class.switchReal (LAED5 S.laed5) (LAED5 D.laed5)+++newtype LAED6 a = LAED6 {getLAED6 :: Int -> Bool -> a -> Array ZeroInt a -> Array ZeroInt a -> a -> IO (a, Int)}++laed6 :: Class.Real a => Int -> Bool -> a -> Array ZeroInt a -> Array ZeroInt a -> a -> IO (a, Int)+laed6 = getLAED6 $ Class.switchReal (LAED6 S.laed6) (LAED6 D.laed6)+++newtype LAED7 a = LAED7 {getLAED7 :: Int -> Int -> Int -> Int -> Int -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> a -> Int -> IOArray ZeroInt a -> IOArray ZeroInt CInt -> Array ZeroInt CInt -> Array ZeroInt CInt -> Array ZeroInt CInt -> Array (ZeroInt,ZeroInt) CInt -> Array (ZeroInt,ZeroInt) a -> IO (Array ZeroInt CInt, Int)}++laed7 :: Class.Real a => Int -> Int -> Int -> Int -> Int -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> a -> Int -> IOArray ZeroInt a -> IOArray ZeroInt CInt -> Array ZeroInt CInt -> Array ZeroInt CInt -> Array ZeroInt CInt -> Array (ZeroInt,ZeroInt) CInt -> Array (ZeroInt,ZeroInt) a -> IO (Array ZeroInt CInt, Int)+laed7 = getLAED7 $ Class.switchReal (LAED7 S.laed7) (LAED7 D.laed7)+++newtype LAED8 a = LAED8 {getLAED8 :: Int -> Int -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> a -> Int -> Array ZeroInt a -> Int -> IO (Int, a, Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array ZeroInt a, Array ZeroInt CInt, Int, Array (ZeroInt,ZeroInt) CInt, Array (ZeroInt,ZeroInt) a, Array ZeroInt CInt, Array ZeroInt CInt, Int)}++laed8 :: Class.Real a => Int -> Int -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> a -> Int -> Array ZeroInt a -> Int -> IO (Int, a, Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array ZeroInt a, Array ZeroInt CInt, Int, Array (ZeroInt,ZeroInt) CInt, Array (ZeroInt,ZeroInt) a, Array ZeroInt CInt, Array ZeroInt CInt, Int)+laed8 = getLAED8 $ Class.switchReal (LAED8 S.laed8) (LAED8 D.laed8)+++newtype LAED9 a = LAED9 {getLAED9 :: Int -> Int -> Int -> Int -> a -> Array ZeroInt a -> Array ZeroInt a -> Int -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Int)}++laed9 :: Class.Real a => Int -> Int -> Int -> Int -> a -> Array ZeroInt a -> Array ZeroInt a -> Int -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Int)+laed9 = getLAED9 $ Class.switchReal (LAED9 S.laed9) (LAED9 D.laed9)+++newtype LAEDA a = LAEDA {getLAEDA :: Int -> Int -> Int -> Int -> Array ZeroInt CInt -> Array ZeroInt CInt -> Array ZeroInt CInt -> Array (ZeroInt,ZeroInt) CInt -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> Array ZeroInt CInt -> IO (Array ZeroInt a, Array ZeroInt a, Int)}++laeda :: Class.Real a => Int -> Int -> Int -> Int -> Array ZeroInt CInt -> Array ZeroInt CInt -> Array ZeroInt CInt -> Array (ZeroInt,ZeroInt) CInt -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> Array ZeroInt CInt -> IO (Array ZeroInt a, Array ZeroInt a, Int)+laeda = getLAEDA $ Class.switchReal (LAEDA S.laeda) (LAEDA D.laeda)+++newtype LAEIN a = LAEIN {getLAEIN :: Bool -> Bool -> Array (ZeroInt,ZeroInt) a -> a -> a -> IOArray ZeroInt a -> IOArray ZeroInt a -> Int -> a -> a -> a -> IO (Array (ZeroInt,ZeroInt) a, Int)}++laein :: Class.Real a => Bool -> Bool -> Array (ZeroInt,ZeroInt) a -> a -> a -> IOArray ZeroInt a -> IOArray ZeroInt a -> Int -> a -> a -> a -> IO (Array (ZeroInt,ZeroInt) a, Int)+laein = getLAEIN $ Class.switchReal (LAEIN S.laein) (LAEIN D.laein)+++newtype LAEV2 a = LAEV2 {getLAEV2 :: a -> a -> a -> IO (a, a, a, a)}++laev2 :: Class.Real a => a -> a -> a -> IO (a, a, a, a)+laev2 = getLAEV2 $ Class.switchReal (LAEV2 S.laev2) (LAEV2 D.laev2)+++newtype LAEXC a = LAEXC {getLAEXC :: Bool -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> Int -> IO (Int)}++laexc :: Class.Real a => Bool -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> Int -> IO (Int)+laexc = getLAEXC $ Class.switchReal (LAEXC S.laexc) (LAEXC D.laexc)+++newtype LAG2 a = LAG2 {getLAG2 :: Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> a -> IO (a, a, a, a, a)}++lag2 :: Class.Real a => Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> a -> IO (a, a, a, a, a)+lag2 = getLAG2 $ Class.switchReal (LAG2 S.lag2) (LAG2 D.lag2)+++newtype LAGS2 a = LAGS2 {getLAGS2 :: Bool -> a -> a -> a -> a -> a -> a -> IO (a, a, a, a, a, a)}++lags2 :: Class.Real a => Bool -> a -> a -> a -> a -> a -> a -> IO (a, a, a, a, a, a)+lags2 = getLAGS2 $ Class.switchReal (LAGS2 S.lags2) (LAGS2 D.lags2)+++newtype LAGTF a = LAGTF {getLAGTF :: IOArray ZeroInt a -> a -> IOArray ZeroInt a -> IOArray ZeroInt a -> a -> IO (Array ZeroInt a, Array ZeroInt CInt, Int)}++lagtf :: Class.Real a => IOArray ZeroInt a -> a -> IOArray ZeroInt a -> IOArray ZeroInt a -> a -> IO (Array ZeroInt a, Array ZeroInt CInt, Int)+lagtf = getLAGTF $ Class.switchReal (LAGTF S.lagtf) (LAGTF D.lagtf)+++newtype LAGTM a = LAGTM {getLAGTM :: Char -> a -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> Array (ZeroInt,ZeroInt) a -> a -> IOArray (ZeroInt,ZeroInt) a -> IO ()}++lagtm :: Class.Real a => Char -> a -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> Array (ZeroInt,ZeroInt) a -> a -> IOArray (ZeroInt,ZeroInt) a -> IO ()+lagtm = getLAGTM $ Class.switchReal (LAGTM S.lagtm) (LAGTM D.lagtm)+++newtype LAGTS a = LAGTS {getLAGTS :: Int -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt CInt -> IOArray ZeroInt a -> a -> IO (a, Int)}++lagts :: Class.Real a => Int -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt CInt -> IOArray ZeroInt a -> a -> IO (a, Int)+lagts = getLAGTS $ Class.switchReal (LAGTS S.lagts) (LAGTS D.lagts)+++newtype LAGV2 a = LAGV2 {getLAGV2 :: IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, a, a, a, a)}++lagv2 :: Class.Real a => IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, a, a, a, a)+lagv2 = getLAGV2 $ Class.switchReal (LAGV2 S.lagv2) (LAGV2 D.lagv2)+++newtype LAHQR a = LAHQR {getLAHQR :: Bool -> Bool -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Array ZeroInt a, Int)}++lahqr :: Class.Real a => Bool -> Bool -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Array ZeroInt a, Int)+lahqr = getLAHQR $ Class.switchReal (LAHQR S.lahqr) (LAHQR D.lahqr)+++newtype LAHR2 a = LAHR2 {getLAHR2 :: Int -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a)}++lahr2 :: Class.Real a => Int -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a)+lahr2 = getLAHR2 $ Class.switchReal (LAHR2 S.lahr2) (LAHR2 D.lahr2)+++newtype LAIC1 a = LAIC1 {getLAIC1 :: Int -> Array ZeroInt a -> a -> Array ZeroInt a -> a -> IO (a, a, a)}++laic1 :: Class.Real a => Int -> Array ZeroInt a -> a -> Array ZeroInt a -> a -> IO (a, a, a)+laic1 = getLAIC1 $ Class.switchReal (LAIC1 S.laic1) (LAIC1 D.laic1)+++newtype LAISNAN a = LAISNAN {getLAISNAN :: a -> a -> IO Bool}++laisnan :: Class.Real a => a -> a -> IO Bool+laisnan = getLAISNAN $ Class.switchReal (LAISNAN S.laisnan) (LAISNAN D.laisnan)+++newtype LALN2 a = LALN2 {getLALN2 :: Bool -> a -> a -> Array (ZeroInt,ZeroInt) a -> a -> a -> Array (ZeroInt,ZeroInt) a -> a -> a -> Int -> IO (Array (ZeroInt,ZeroInt) a, a, a, Int)}++laln2 :: Class.Real a => Bool -> a -> a -> Array (ZeroInt,ZeroInt) a -> a -> a -> Array (ZeroInt,ZeroInt) a -> a -> a -> Int -> IO (Array (ZeroInt,ZeroInt) a, a, a, Int)+laln2 = getLALN2 $ Class.switchReal (LALN2 S.laln2) (LALN2 D.laln2)+++newtype LALS0 a = LALS0 {getLALS0 :: Int -> Int -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> Array ZeroInt CInt -> Int -> Array (ZeroInt,ZeroInt) CInt -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> a -> a -> IO (Array (ZeroInt,ZeroInt) a, Int)}++lals0 :: Class.Real a => Int -> Int -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> Array ZeroInt CInt -> Int -> Array (ZeroInt,ZeroInt) CInt -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> a -> a -> IO (Array (ZeroInt,ZeroInt) a, Int)+lals0 = getLALS0 $ Class.switchReal (LALS0 S.lals0) (LALS0 D.lals0)+++newtype LALSA a = LALSA {getLALSA :: Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> Array (ZeroInt,ZeroInt) CInt -> Array (ZeroInt,ZeroInt) CInt -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> Array ZeroInt a -> IO (Array (ZeroInt,ZeroInt) a, Int)}++lalsa :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> Array (ZeroInt,ZeroInt) CInt -> Array (ZeroInt,ZeroInt) CInt -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> Array ZeroInt a -> IO (Array (ZeroInt,ZeroInt) a, Int)+lalsa = getLALSA $ Class.switchReal (LALSA S.lalsa) (LALSA D.lalsa)+++newtype LALSD a = LALSD {getLALSD :: Char -> Int -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> a -> Int -> Int -> IO (Int, Int)}++lalsd :: Class.Real a => Char -> Int -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> a -> Int -> Int -> IO (Int, Int)+lalsd = getLALSD $ Class.switchReal (LALSD S.lalsd) (LALSD D.lalsd)+++newtype LAMRG a = LAMRG {getLAMRG :: Int -> Int -> Array ZeroInt a -> Int -> Int -> IO (Array ZeroInt CInt)}++lamrg :: Class.Real a => Int -> Int -> Array ZeroInt a -> Int -> Int -> IO (Array ZeroInt CInt)+lamrg = getLAMRG $ Class.switchReal (LAMRG S.lamrg) (LAMRG D.lamrg)+++newtype LANEG a = LANEG {getLANEG :: Array ZeroInt a -> Array ZeroInt a -> a -> a -> Int -> IO CInt}++laneg :: Class.Real a => Array ZeroInt a -> Array ZeroInt a -> a -> a -> Int -> IO CInt+laneg = getLANEG $ Class.switchReal (LANEG S.laneg) (LANEG D.laneg)+++newtype LANGB a = LANGB {getLANGB :: Char -> Int -> Int -> Array (ZeroInt,ZeroInt) a -> Int -> IO a}++langb :: Class.Real a => Char -> Int -> Int -> Array (ZeroInt,ZeroInt) a -> Int -> IO a+langb = getLANGB $ Class.switchReal (LANGB S.langb) (LANGB D.langb)+++newtype LANGE a = LANGE {getLANGE :: Char -> Int -> Array (ZeroInt,ZeroInt) a -> Int -> IO a}++lange :: Class.Real a => Char -> Int -> Array (ZeroInt,ZeroInt) a -> Int -> IO a+lange = getLANGE $ Class.switchReal (LANGE S.lange) (LANGE D.lange)+++newtype LANGT a = LANGT {getLANGT :: Char -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> IO a}++langt :: Class.Real a => Char -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> IO a+langt = getLANGT $ Class.switchReal (LANGT S.langt) (LANGT D.langt)+++newtype LANHS a = LANHS {getLANHS :: Char -> Array (ZeroInt,ZeroInt) a -> Int -> IO a}++lanhs :: Class.Real a => Char -> Array (ZeroInt,ZeroInt) a -> Int -> IO a+lanhs = getLANHS $ Class.switchReal (LANHS S.lanhs) (LANHS D.lanhs)+++newtype LANSB a = LANSB {getLANSB :: Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Int -> IO a}++lansb :: Class.Real a => Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Int -> IO a+lansb = getLANSB $ Class.switchReal (LANSB S.lansb) (LANSB D.lansb)+++newtype LANSF a = LANSF {getLANSF :: Char -> Char -> Char -> Int -> Array ZeroInt a -> Int -> IO a}++lansf :: Class.Real a => Char -> Char -> Char -> Int -> Array ZeroInt a -> Int -> IO a+lansf = getLANSF $ Class.switchReal (LANSF S.lansf) (LANSF D.lansf)+++newtype LANSP a = LANSP {getLANSP :: Char -> Char -> Int -> Array ZeroInt a -> Int -> IO a}++lansp :: Class.Real a => Char -> Char -> Int -> Array ZeroInt a -> Int -> IO a+lansp = getLANSP $ Class.switchReal (LANSP S.lansp) (LANSP D.lansp)+++newtype LANST a = LANST {getLANST :: Char -> Array ZeroInt a -> Array ZeroInt a -> IO a}++lanst :: Class.Real a => Char -> Array ZeroInt a -> Array ZeroInt a -> IO a+lanst = getLANST $ Class.switchReal (LANST S.lanst) (LANST D.lanst)+++newtype LANSY a = LANSY {getLANSY :: Char -> Char -> Array (ZeroInt,ZeroInt) a -> Int -> IO a}++lansy :: Class.Real a => Char -> Char -> Array (ZeroInt,ZeroInt) a -> Int -> IO a+lansy = getLANSY $ Class.switchReal (LANSY S.lansy) (LANSY D.lansy)+++newtype LANTB a = LANTB {getLANTB :: Char -> Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Int -> IO a}++lantb :: Class.Real a => Char -> Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Int -> IO a+lantb = getLANTB $ Class.switchReal (LANTB S.lantb) (LANTB D.lantb)+++newtype LANTP a = LANTP {getLANTP :: Char -> Char -> Char -> Int -> Array ZeroInt a -> Int -> IO a}++lantp :: Class.Real a => Char -> Char -> Char -> Int -> Array ZeroInt a -> Int -> IO a+lantp = getLANTP $ Class.switchReal (LANTP S.lantp) (LANTP D.lantp)+++newtype LANTR a = LANTR {getLANTR :: Char -> Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Int -> IO a}++lantr :: Class.Real a => Char -> Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Int -> IO a+lantr = getLANTR $ Class.switchReal (LANTR S.lantr) (LANTR D.lantr)+++newtype LANV2 a = LANV2 {getLANV2 :: a -> a -> a -> a -> IO (a, a, a, a, a, a, a, a, a, a)}++lanv2 :: Class.Real a => a -> a -> a -> a -> IO (a, a, a, a, a, a, a, a, a, a)+lanv2 = getLANV2 $ Class.switchReal (LANV2 S.lanv2) (LANV2 D.lanv2)+++newtype LAPLL a = LAPLL {getLAPLL :: Int -> IOArray ZeroInt a -> Int -> IOArray ZeroInt a -> Int -> IO (a)}++lapll :: Class.Real a => Int -> IOArray ZeroInt a -> Int -> IOArray ZeroInt a -> Int -> IO (a)+lapll = getLAPLL $ Class.switchReal (LAPLL S.lapll) (LAPLL D.lapll)+++newtype LAPMR a = LAPMR {getLAPMR :: Bool -> IOArray (ZeroInt,ZeroInt) a -> IOArray ZeroInt CInt -> IO ()}++lapmr :: Class.Real a => Bool -> IOArray (ZeroInt,ZeroInt) a -> IOArray ZeroInt CInt -> IO ()+lapmr = getLAPMR $ Class.switchReal (LAPMR S.lapmr) (LAPMR D.lapmr)+++newtype LAPMT a = LAPMT {getLAPMT :: Bool -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray ZeroInt CInt -> IO ()}++lapmt :: Class.Real a => Bool -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray ZeroInt CInt -> IO ()+lapmt = getLAPMT $ Class.switchReal (LAPMT S.lapmt) (LAPMT D.lapmt)+++newtype LAPY2 a = LAPY2 {getLAPY2 :: a -> a -> IO a}++lapy2 :: Class.Real a => a -> a -> IO a+lapy2 = getLAPY2 $ Class.switchReal (LAPY2 S.lapy2) (LAPY2 D.lapy2)+++newtype LAPY3 a = LAPY3 {getLAPY3 :: a -> a -> a -> IO a}++lapy3 :: Class.Real a => a -> a -> a -> IO a+lapy3 = getLAPY3 $ Class.switchReal (LAPY3 S.lapy3) (LAPY3 D.lapy3)+++newtype LAQGB a = LAQGB {getLAQGB :: Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> Array ZeroInt a -> a -> a -> a -> IO (Char)}++laqgb :: Class.Real a => Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> Array ZeroInt a -> a -> a -> a -> IO (Char)+laqgb = getLAQGB $ Class.switchReal (LAQGB S.laqgb) (LAQGB D.laqgb)+++newtype LAQGE a = LAQGE {getLAQGE :: IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> Array ZeroInt a -> a -> a -> a -> IO (Char)}++laqge :: Class.Real a => IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> Array ZeroInt a -> a -> a -> a -> IO (Char)+laqge = getLAQGE $ Class.switchReal (LAQGE S.laqge) (LAQGE D.laqge)+++newtype LAQP2 a = LAQP2 {getLAQP2 :: Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray ZeroInt CInt -> IOArray ZeroInt a -> IOArray ZeroInt a -> IO (Array ZeroInt a)}++laqp2 :: Class.Real a => Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray ZeroInt CInt -> IOArray ZeroInt a -> IOArray ZeroInt a -> IO (Array ZeroInt a)+laqp2 = getLAQP2 $ Class.switchReal (LAQP2 S.laqp2) (LAQP2 D.laqp2)+++newtype LAQPS a = LAQPS {getLAQPS :: Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray ZeroInt CInt -> Int -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int, Array ZeroInt a)}++laqps :: Class.Real a => Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray ZeroInt CInt -> Int -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int, Array ZeroInt a)+laqps = getLAQPS $ Class.switchReal (LAQPS S.laqps) (LAQPS D.laqps)+++newtype LAQR0 a = LAQR0 {getLAQR0 :: Bool -> Bool -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Int)}++laqr0 :: Class.Real a => Bool -> Bool -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Int)+laqr0 = getLAQR0 $ Class.switchReal (LAQR0 S.laqr0) (LAQR0 D.laqr0)+++newtype LAQR1 a = LAQR1 {getLAQR1 :: Array (ZeroInt,ZeroInt) a -> a -> a -> a -> a -> IO (Array ZeroInt a)}++laqr1 :: Class.Real a => Array (ZeroInt,ZeroInt) a -> a -> a -> a -> a -> IO (Array ZeroInt a)+laqr1 = getLAQR1 $ Class.switchReal (LAQR1 S.laqr1) (LAQR1 D.laqr1)+++newtype LAQR2 a = LAQR2 {getLAQR2 :: Bool -> Bool -> Int -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> Int -> Int -> Int -> Int -> IO (Int, Int, Array ZeroInt a, Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a)}++laqr2 :: Class.Real a => Bool -> Bool -> Int -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> Int -> Int -> Int -> Int -> IO (Int, Int, Array ZeroInt a, Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a)+laqr2 = getLAQR2 $ Class.switchReal (LAQR2 S.laqr2) (LAQR2 D.laqr2)+++newtype LAQR3 a = LAQR3 {getLAQR3 :: Bool -> Bool -> Int -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> Int -> Int -> Int -> Int -> IO (Int, Int, Array ZeroInt a, Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a)}++laqr3 :: Class.Real a => Bool -> Bool -> Int -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> Int -> Int -> Int -> Int -> IO (Int, Int, Array ZeroInt a, Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a)+laqr3 = getLAQR3 $ Class.switchReal (LAQR3 S.laqr3) (LAQR3 D.laqr3)+++newtype LAQR4 a = LAQR4 {getLAQR4 :: Bool -> Bool -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Int)}++laqr4 :: Class.Real a => Bool -> Bool -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Int)+laqr4 = getLAQR4 $ Class.switchReal (LAQR4 S.laqr4) (LAQR4 D.laqr4)+++newtype LAQR5 a = LAQR5 {getLAQR5 :: Bool -> Bool -> Int -> Int -> Int -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> Int -> Int -> Int -> Int -> IO (Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a)}++laqr5 :: Class.Real a => Bool -> Bool -> Int -> Int -> Int -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> Int -> Int -> Int -> Int -> IO (Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a)+laqr5 = getLAQR5 $ Class.switchReal (LAQR5 S.laqr5) (LAQR5 D.laqr5)+++newtype LAQSB a = LAQSB {getLAQSB :: Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> a -> a -> IO (Char)}++laqsb :: Class.Real a => Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> a -> a -> IO (Char)+laqsb = getLAQSB $ Class.switchReal (LAQSB S.laqsb) (LAQSB D.laqsb)+++newtype LAQSP a = LAQSP {getLAQSP :: Char -> IOArray ZeroInt a -> Array ZeroInt a -> a -> a -> IO (Char)}++laqsp :: Class.Real a => Char -> IOArray ZeroInt a -> Array ZeroInt a -> a -> a -> IO (Char)+laqsp = getLAQSP $ Class.switchReal (LAQSP S.laqsp) (LAQSP D.laqsp)+++newtype LAQSY a = LAQSY {getLAQSY :: Char -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> a -> a -> IO (Char)}++laqsy :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> a -> a -> IO (Char)+laqsy = getLAQSY $ Class.switchReal (LAQSY S.laqsy) (LAQSY D.laqsy)+++newtype LAQTR a = LAQTR {getLAQTR :: Bool -> Bool -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> a -> IOArray ZeroInt a -> IO (a, Int)}++laqtr :: Class.Real a => Bool -> Bool -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> a -> IOArray ZeroInt a -> IO (a, Int)+laqtr = getLAQTR $ Class.switchReal (LAQTR S.laqtr) (LAQTR D.laqtr)+++newtype LAR1V a = LAR1V {getLAR1V :: Int -> Int -> a -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> a -> a -> IOArray ZeroInt a -> Bool -> Int -> IO (Int, a, a, Int, Array ZeroInt CInt, a, a, a)}++lar1v :: Class.Real a => Int -> Int -> a -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> a -> a -> IOArray ZeroInt a -> Bool -> Int -> IO (Int, a, a, Int, Array ZeroInt CInt, a, a, a)+lar1v = getLAR1V $ Class.switchReal (LAR1V S.lar1v) (LAR1V D.lar1v)+++newtype LAR2V a = LAR2V {getLAR2V :: Int -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray ZeroInt a -> Int -> Array ZeroInt a -> Array ZeroInt a -> Int -> IO ()}++lar2v :: Class.Real a => Int -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray ZeroInt a -> Int -> Array ZeroInt a -> Array ZeroInt a -> Int -> IO ()+lar2v = getLAR2V $ Class.switchReal (LAR2V S.lar2v) (LAR2V D.lar2v)+++newtype LARF a = LARF {getLARF :: Char -> Int -> Array ZeroInt a -> Int -> a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO ()}++larf :: Class.Real a => Char -> Int -> Array ZeroInt a -> Int -> a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO ()+larf = getLARF $ Class.switchReal (LARF S.larf) (LARF D.larf)+++newtype LARFB a = LARFB {getLARFB :: Char -> Char -> Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO ()}++larfb :: Class.Real a => Char -> Char -> Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO ()+larfb = getLARFB $ Class.switchReal (LARFB S.larfb) (LARFB D.larfb)+++newtype LARFG a = LARFG {getLARFG :: Int -> a -> IOArray ZeroInt a -> Int -> IO (a, a)}++larfg :: Class.Real a => Int -> a -> IOArray ZeroInt a -> Int -> IO (a, a)+larfg = getLARFG $ Class.switchReal (LARFG S.larfg) (LARFG D.larfg)+++newtype LARFGP a = LARFGP {getLARFGP :: Int -> a -> IOArray ZeroInt a -> Int -> IO (a, a)}++larfgp :: Class.Real a => Int -> a -> IOArray ZeroInt a -> Int -> IO (a, a)+larfgp = getLARFGP $ Class.switchReal (LARFGP S.larfgp) (LARFGP D.larfgp)+++newtype LARFT a = LARFT {getLARFT :: Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> Int -> IO (Array (ZeroInt,ZeroInt) a)}++larft :: Class.Real a => Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> Int -> IO (Array (ZeroInt,ZeroInt) a)+larft = getLARFT $ Class.switchReal (LARFT S.larft) (LARFT D.larft)+++newtype LARFX a = LARFX {getLARFX :: Char -> Int -> Array ZeroInt a -> a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO ()}++larfx :: Class.Real a => Char -> Int -> Array ZeroInt a -> a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO ()+larfx = getLARFX $ Class.switchReal (LARFX S.larfx) (LARFX D.larfx)+++newtype LARGV a = LARGV {getLARGV :: Int -> IOArray ZeroInt a -> Int -> IOArray ZeroInt a -> Int -> Int -> IO (Array ZeroInt a)}++largv :: Class.Real a => Int -> IOArray ZeroInt a -> Int -> IOArray ZeroInt a -> Int -> Int -> IO (Array ZeroInt a)+largv = getLARGV $ Class.switchReal (LARGV S.largv) (LARGV D.largv)+++newtype LARNV a = LARNV {getLARNV :: Int -> IOArray ZeroInt CInt -> Int -> IO (Array ZeroInt a)}++larnv :: Class.Real a => Int -> IOArray ZeroInt CInt -> Int -> IO (Array ZeroInt a)+larnv = getLARNV $ Class.switchReal (LARNV S.larnv) (LARNV D.larnv)+++newtype LARRA a = LARRA {getLARRA :: Array ZeroInt a -> IOArray ZeroInt a -> IOArray ZeroInt a -> a -> a -> IO (Int, Array ZeroInt CInt, Int)}++larra :: Class.Real a => Array ZeroInt a -> IOArray ZeroInt a -> IOArray ZeroInt a -> a -> a -> IO (Int, Array ZeroInt CInt, Int)+larra = getLARRA $ Class.switchReal (LARRA S.larra) (LARRA D.larra)+++newtype LARRB a = LARRB {getLARRB :: Array ZeroInt a -> Array ZeroInt a -> Int -> Int -> a -> a -> Int -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray ZeroInt a -> a -> a -> Int -> IO (Int)}++larrb :: Class.Real a => Array ZeroInt a -> Array ZeroInt a -> Int -> Int -> a -> a -> Int -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray ZeroInt a -> a -> a -> Int -> IO (Int)+larrb = getLARRB $ Class.switchReal (LARRB S.larrb) (LARRB D.larrb)+++newtype LARRC a = LARRC {getLARRC :: Char -> a -> a -> Array ZeroInt a -> Array ZeroInt a -> a -> IO (Int, Int, Int, Int)}++larrc :: Class.Real a => Char -> a -> a -> Array ZeroInt a -> Array ZeroInt a -> a -> IO (Int, Int, Int, Int)+larrc = getLARRC $ Class.switchReal (LARRC S.larrc) (LARRC D.larrc)+++newtype LARRD a = LARRD {getLARRD :: Char -> Char -> a -> a -> Int -> Int -> Array ZeroInt a -> a -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> a -> Int -> Array ZeroInt CInt -> IO (Int, Array ZeroInt a, Array ZeroInt a, a, a, Array ZeroInt CInt, Array ZeroInt CInt, Int)}++larrd :: Class.Real a => Char -> Char -> a -> a -> Int -> Int -> Array ZeroInt a -> a -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> a -> Int -> Array ZeroInt CInt -> IO (Int, Array ZeroInt a, Array ZeroInt a, a, a, Array ZeroInt CInt, Array ZeroInt CInt, Int)+larrd = getLARRD $ Class.switchReal (LARRD S.larrd) (LARRD D.larrd)+++newtype LARRE a = LARRE {getLARRE :: Char -> a -> a -> Int -> Int -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray ZeroInt a -> a -> a -> a -> IO (a, a, Int, Array ZeroInt CInt, Int, Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt a, a, Int)}++larre :: Class.Real a => Char -> a -> a -> Int -> Int -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray ZeroInt a -> a -> a -> a -> IO (a, a, Int, Array ZeroInt CInt, Int, Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt a, a, Int)+larre = getLARRE $ Class.switchReal (LARRE S.larre) (LARRE D.larre)+++newtype LARRF a = LARRF {getLARRF :: Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> Int -> Int -> Array ZeroInt a -> IOArray ZeroInt a -> Array ZeroInt a -> a -> a -> a -> a -> IO (a, Array ZeroInt a, Array ZeroInt a, Int)}++larrf :: Class.Real a => Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> Int -> Int -> Array ZeroInt a -> IOArray ZeroInt a -> Array ZeroInt a -> a -> a -> a -> a -> IO (a, Array ZeroInt a, Array ZeroInt a, Int)+larrf = getLARRF $ Class.switchReal (LARRF S.larrf) (LARRF D.larrf)+++newtype LARRJ a = LARRJ {getLARRJ :: Array ZeroInt a -> Array ZeroInt a -> Int -> Int -> a -> Int -> IOArray ZeroInt a -> IOArray ZeroInt a -> a -> a -> IO (Int)}++larrj :: Class.Real a => Array ZeroInt a -> Array ZeroInt a -> Int -> Int -> a -> Int -> IOArray ZeroInt a -> IOArray ZeroInt a -> a -> a -> IO (Int)+larrj = getLARRJ $ Class.switchReal (LARRJ S.larrj) (LARRJ D.larrj)+++newtype LARRK a = LARRK {getLARRK :: Int -> a -> a -> Array ZeroInt a -> Array ZeroInt a -> a -> a -> IO (a, a, Int)}++larrk :: Class.Real a => Int -> a -> a -> Array ZeroInt a -> Array ZeroInt a -> a -> a -> IO (a, a, Int)+larrk = getLARRK $ Class.switchReal (LARRK S.larrk) (LARRK D.larrk)+++newtype LARRR a = LARRR {getLARRR :: Array ZeroInt a -> IOArray ZeroInt a -> IO (Int)}++larrr :: Class.Real a => Array ZeroInt a -> IOArray ZeroInt a -> IO (Int)+larrr = getLARRR $ Class.switchReal (LARRR S.larrr) (LARRR D.larrr)+++newtype LARRV a = LARRV {getLARRV :: a -> a -> IOArray ZeroInt a -> IOArray ZeroInt a -> a -> Array ZeroInt CInt -> Int -> Int -> Int -> a -> a -> a -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray ZeroInt a -> Array ZeroInt CInt -> Array ZeroInt CInt -> Array ZeroInt a -> Int -> IO (Array (ZeroInt,ZeroInt) a, Array ZeroInt CInt, Int)}++larrv :: Class.Real a => a -> a -> IOArray ZeroInt a -> IOArray ZeroInt a -> a -> Array ZeroInt CInt -> Int -> Int -> Int -> a -> a -> a -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray ZeroInt a -> Array ZeroInt CInt -> Array ZeroInt CInt -> Array ZeroInt a -> Int -> IO (Array (ZeroInt,ZeroInt) a, Array ZeroInt CInt, Int)+larrv = getLARRV $ Class.switchReal (LARRV S.larrv) (LARRV D.larrv)+++newtype LARTG a = LARTG {getLARTG :: a -> a -> IO (a, a, a)}++lartg :: Class.Real a => a -> a -> IO (a, a, a)+lartg = getLARTG $ Class.switchReal (LARTG S.lartg) (LARTG D.lartg)+++newtype LARTGP a = LARTGP {getLARTGP :: a -> a -> IO (a, a, a)}++lartgp :: Class.Real a => a -> a -> IO (a, a, a)+lartgp = getLARTGP $ Class.switchReal (LARTGP S.lartgp) (LARTGP D.lartgp)+++newtype LARTGS a = LARTGS {getLARTGS :: a -> a -> a -> IO (a, a)}++lartgs :: Class.Real a => a -> a -> a -> IO (a, a)+lartgs = getLARTGS $ Class.switchReal (LARTGS S.lartgs) (LARTGS D.lartgs)+++newtype LARTV a = LARTV {getLARTV :: Int -> IOArray ZeroInt a -> Int -> IOArray ZeroInt a -> Int -> Array ZeroInt a -> Array ZeroInt a -> Int -> IO ()}++lartv :: Class.Real a => Int -> IOArray ZeroInt a -> Int -> IOArray ZeroInt a -> Int -> Array ZeroInt a -> Array ZeroInt a -> Int -> IO ()+lartv = getLARTV $ Class.switchReal (LARTV S.lartv) (LARTV D.lartv)+++newtype LARUV a = LARUV {getLARUV :: IOArray ZeroInt CInt -> Int -> IO (Array ZeroInt a)}++laruv :: Class.Real a => IOArray ZeroInt CInt -> Int -> IO (Array ZeroInt a)+laruv = getLARUV $ Class.switchReal (LARUV S.laruv) (LARUV D.laruv)+++newtype LARZ a = LARZ {getLARZ :: Char -> Int -> Int -> Array ZeroInt a -> Int -> a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO ()}++larz :: Class.Real a => Char -> Int -> Int -> Array ZeroInt a -> Int -> a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO ()+larz = getLARZ $ Class.switchReal (LARZ S.larz) (LARZ D.larz)+++newtype LARZB a = LARZB {getLARZB :: Char -> Char -> Char -> Char -> Int -> Int -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO ()}++larzb :: Class.Real a => Char -> Char -> Char -> Char -> Int -> Int -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO ()+larzb = getLARZB $ Class.switchReal (LARZB S.larzb) (LARZB D.larzb)+++newtype LARZT a = LARZT {getLARZT :: Char -> Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> Int -> IO (Array (ZeroInt,ZeroInt) a)}++larzt :: Class.Real a => Char -> Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> Int -> IO (Array (ZeroInt,ZeroInt) a)+larzt = getLARZT $ Class.switchReal (LARZT S.larzt) (LARZT D.larzt)+++newtype LAS2 a = LAS2 {getLAS2 :: a -> a -> a -> IO (a, a)}++las2 :: Class.Real a => a -> a -> a -> IO (a, a)+las2 = getLAS2 $ Class.switchReal (LAS2 S.las2) (LAS2 D.las2)+++newtype LASCL a = LASCL {getLASCL :: Char -> Int -> Int -> a -> a -> Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++lascl :: Class.Real a => Char -> Int -> Int -> a -> a -> Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+lascl = getLASCL $ Class.switchReal (LASCL S.lascl) (LASCL D.lascl)+++newtype LASD0 a = LASD0 {getLASD0 :: Int -> IOArray ZeroInt a -> IOArray ZeroInt a -> Int -> Int -> Int -> Int -> IO (Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Int)}++lasd0 :: Class.Real a => Int -> IOArray ZeroInt a -> IOArray ZeroInt a -> Int -> Int -> Int -> Int -> IO (Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Int)+lasd0 = getLASD0 $ Class.switchReal (LASD0 S.lasd0) (LASD0 D.lasd0)+++newtype LASD1 a = LASD1 {getLASD1 :: Int -> Int -> Int -> IOArray ZeroInt a -> a -> a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray ZeroInt CInt -> IO (a, a, Int)}++lasd1 :: Class.Real a => Int -> Int -> Int -> IOArray ZeroInt a -> a -> a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray ZeroInt CInt -> IO (a, a, Int)+lasd1 = getLASD1 $ Class.switchReal (LASD1 S.lasd1) (LASD1 D.lasd1)+++newtype LASD2 a = LASD2 {getLASD2 :: Int -> Int -> Int -> IOArray ZeroInt a -> a -> a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> IOArray ZeroInt CInt -> IO (Int, Array ZeroInt a, Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int)}++lasd2 :: Class.Real a => Int -> Int -> Int -> IOArray ZeroInt a -> a -> a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> IOArray ZeroInt CInt -> IO (Int, Array ZeroInt a, Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int)+lasd2 = getLASD2 $ Class.switchReal (LASD2 S.lasd2) (LASD2 D.lasd2)+++newtype LASD3 a = LASD3 {getLASD3 :: Int -> Int -> Int -> Int -> IOArray ZeroInt a -> Int -> Array (ZeroInt,ZeroInt) a -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> Array ZeroInt CInt -> IOArray ZeroInt a -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Int)}++lasd3 :: Class.Real a => Int -> Int -> Int -> Int -> IOArray ZeroInt a -> Int -> Array (ZeroInt,ZeroInt) a -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> Array ZeroInt CInt -> IOArray ZeroInt a -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Int)+lasd3 = getLASD3 $ Class.switchReal (LASD3 S.lasd3) (LASD3 D.lasd3)+++newtype LASD4 a = LASD4 {getLASD4 :: Int -> Array ZeroInt a -> Array ZeroInt a -> a -> IO (Array ZeroInt a, a, Int)}++lasd4 :: Class.Real a => Int -> Array ZeroInt a -> Array ZeroInt a -> a -> IO (Array ZeroInt a, a, Int)+lasd4 = getLASD4 $ Class.switchReal (LASD4 S.lasd4) (LASD4 D.lasd4)+++newtype LASD5 a = LASD5 {getLASD5 :: Int -> Array ZeroInt a -> Array ZeroInt a -> a -> IO (Array ZeroInt a, a)}++lasd5 :: Class.Real a => Int -> Array ZeroInt a -> Array ZeroInt a -> a -> IO (Array ZeroInt a, a)+lasd5 = getLASD5 $ Class.switchReal (LASD5 S.lasd5) (LASD5 D.lasd5)+++newtype LASD6 a = LASD6 {getLASD6 :: Int -> Int -> Int -> Int -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray ZeroInt a -> a -> a -> IOArray ZeroInt CInt -> Int -> Int -> Int -> IO (a, a, Array ZeroInt CInt, Int, Array (ZeroInt,ZeroInt) CInt, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Int, a, a, Int)}++lasd6 :: Class.Real a => Int -> Int -> Int -> Int -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray ZeroInt a -> a -> a -> IOArray ZeroInt CInt -> Int -> Int -> Int -> IO (a, a, Array ZeroInt CInt, Int, Array (ZeroInt,ZeroInt) CInt, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Int, a, a, Int)+lasd6 = getLASD6 $ Class.switchReal (LASD6 S.lasd6) (LASD6 D.lasd6)+++newtype LASD7 a = LASD7 {getLASD7 :: Int -> Int -> Int -> Int -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray ZeroInt a -> a -> a -> Array ZeroInt CInt -> Int -> Int -> IO (Int, Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int, Array (ZeroInt,ZeroInt) CInt, Array (ZeroInt,ZeroInt) a, a, a, Int)}++lasd7 :: Class.Real a => Int -> Int -> Int -> Int -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray ZeroInt a -> a -> a -> Array ZeroInt CInt -> Int -> Int -> IO (Int, Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int, Array (ZeroInt,ZeroInt) CInt, Array (ZeroInt,ZeroInt) a, a, a, Int)+lasd7 = getLASD7 $ Class.switchReal (LASD7 S.lasd7) (LASD7 D.lasd7)+++newtype LASD8 a = LASD8 {getLASD8 :: Int -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray ZeroInt a -> Int -> Int -> IOArray ZeroInt a -> IO (Array ZeroInt a, Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Int)}++lasd8 :: Class.Real a => Int -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray ZeroInt a -> Int -> Int -> IOArray ZeroInt a -> IO (Array ZeroInt a, Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Int)+lasd8 = getLASD8 $ Class.switchReal (LASD8 S.lasd8) (LASD8 D.lasd8)+++newtype LASDA a = LASDA {getLASDA :: Int -> Int -> Int -> IOArray ZeroInt a -> Array ZeroInt a -> Int -> Int -> Int -> Int -> Int -> Int -> Int -> Int -> Int -> Int -> Int -> Int -> Int -> Int -> Int -> Int -> IO (Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Array ZeroInt CInt, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Array ZeroInt CInt, Array (ZeroInt,ZeroInt) CInt, Array (ZeroInt,ZeroInt) CInt, Array (ZeroInt,ZeroInt) a, Array ZeroInt a, Array ZeroInt a, Int)}++lasda :: Class.Real a => Int -> Int -> Int -> IOArray ZeroInt a -> Array ZeroInt a -> Int -> Int -> Int -> Int -> Int -> Int -> Int -> Int -> Int -> Int -> Int -> Int -> Int -> Int -> Int -> Int -> IO (Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Array ZeroInt CInt, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Array ZeroInt CInt, Array (ZeroInt,ZeroInt) CInt, Array (ZeroInt,ZeroInt) CInt, Array (ZeroInt,ZeroInt) a, Array ZeroInt a, Array ZeroInt a, Int)+lasda = getLASDA $ Class.switchReal (LASDA S.lasda) (LASDA D.lasda)+++newtype LASDQ a = LASDQ {getLASDQ :: Char -> Int -> Int -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++lasdq :: Class.Real a => Char -> Int -> Int -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+lasdq = getLASDQ $ Class.switchReal (LASDQ S.lasdq) (LASDQ D.lasdq)+++newtype LASET a = LASET {getLASET :: Char -> Int -> Int -> a -> a -> Int -> IO (Array (ZeroInt,ZeroInt) a)}++laset :: Class.Real a => Char -> Int -> Int -> a -> a -> Int -> IO (Array (ZeroInt,ZeroInt) a)+laset = getLASET $ Class.switchReal (LASET S.laset) (LASET D.laset)+++newtype LASQ1 a = LASQ1 {getLASQ1 :: IOArray ZeroInt a -> IOArray ZeroInt a -> IO (Int)}++lasq1 :: Class.Real a => IOArray ZeroInt a -> IOArray ZeroInt a -> IO (Int)+lasq1 = getLASQ1 $ Class.switchReal (LASQ1 S.lasq1) (LASQ1 D.lasq1)+++newtype LASQ2 a = LASQ2 {getLASQ2 :: Int -> IOArray ZeroInt a -> IO (Int)}++lasq2 :: Class.Real a => Int -> IOArray ZeroInt a -> IO (Int)+lasq2 = getLASQ2 $ Class.switchReal (LASQ2 S.lasq2) (LASQ2 D.lasq2)+++newtype LASQ4 a = LASQ4 {getLASQ4 :: Int -> Int -> Array ZeroInt a -> Int -> Int -> a -> a -> a -> a -> a -> a -> a -> IO (a, Int, a)}++lasq4 :: Class.Real a => Int -> Int -> Array ZeroInt a -> Int -> Int -> a -> a -> a -> a -> a -> a -> a -> IO (a, Int, a)+lasq4 = getLASQ4 $ Class.switchReal (LASQ4 S.lasq4) (LASQ4 D.lasq4)+++newtype LASQ5 a = LASQ5 {getLASQ5 :: Int -> Int -> Array ZeroInt a -> Int -> a -> a -> Bool -> a -> IO (a, a, a, a, a, a)}++lasq5 :: Class.Real a => Int -> Int -> Array ZeroInt a -> Int -> a -> a -> Bool -> a -> IO (a, a, a, a, a, a)+lasq5 = getLASQ5 $ Class.switchReal (LASQ5 S.lasq5) (LASQ5 D.lasq5)+++newtype LASQ6 a = LASQ6 {getLASQ6 :: Int -> Int -> Array ZeroInt a -> Int -> IO (a, a, a, a, a, a)}++lasq6 :: Class.Real a => Int -> Int -> Array ZeroInt a -> Int -> IO (a, a, a, a, a, a)+lasq6 = getLASQ6 $ Class.switchReal (LASQ6 S.lasq6) (LASQ6 D.lasq6)+++newtype LASR a = LASR {getLASR :: Char -> Char -> Char -> Int -> Array ZeroInt a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IO ()}++lasr :: Class.Real a => Char -> Char -> Char -> Int -> Array ZeroInt a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IO ()+lasr = getLASR $ Class.switchReal (LASR S.lasr) (LASR D.lasr)+++newtype LASRT a = LASRT {getLASRT :: Char -> IOArray ZeroInt a -> IO (Int)}++lasrt :: Class.Real a => Char -> IOArray ZeroInt a -> IO (Int)+lasrt = getLASRT $ Class.switchReal (LASRT S.lasrt) (LASRT D.lasrt)+++newtype LASSQ a = LASSQ {getLASSQ :: Array ZeroInt a -> Int -> a -> a -> IO (a, a)}++lassq :: Class.Real a => Array ZeroInt a -> Int -> a -> a -> IO (a, a)+lassq = getLASSQ $ Class.switchReal (LASSQ S.lassq) (LASSQ D.lassq)+++newtype LASV2 a = LASV2 {getLASV2 :: a -> a -> a -> IO (a, a, a, a, a, a)}++lasv2 :: Class.Real a => a -> a -> a -> IO (a, a, a, a, a, a)+lasv2 = getLASV2 $ Class.switchReal (LASV2 S.lasv2) (LASV2 D.lasv2)+++newtype LASWP a = LASWP {getLASWP :: IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> Array ZeroInt CInt -> Int -> IO ()}++laswp :: Class.Real a => IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> Array ZeroInt CInt -> Int -> IO ()+laswp = getLASWP $ Class.switchReal (LASWP S.laswp) (LASWP D.laswp)+++newtype LASY2 a = LASY2 {getLASY2 :: Bool -> Bool -> Int -> Int -> Int -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Int -> IO (a, Array (ZeroInt,ZeroInt) a, a, Int)}++lasy2 :: Class.Real a => Bool -> Bool -> Int -> Int -> Int -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Int -> IO (a, Array (ZeroInt,ZeroInt) a, a, Int)+lasy2 = getLASY2 $ Class.switchReal (LASY2 S.lasy2) (LASY2 D.lasy2)+++newtype LASYF a = LASYF {getLASYF :: Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int, Array ZeroInt CInt, Array (ZeroInt,ZeroInt) a, Int)}++lasyf :: Class.Real a => Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int, Array ZeroInt CInt, Array (ZeroInt,ZeroInt) a, Int)+lasyf = getLASYF $ Class.switchReal (LASYF S.lasyf) (LASYF D.lasyf)+++newtype LATBS a = LATBS {getLATBS :: Char -> Char -> Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> IOArray ZeroInt a -> IOArray ZeroInt a -> IO (a, Int)}++latbs :: Class.Real a => Char -> Char -> Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> IOArray ZeroInt a -> IOArray ZeroInt a -> IO (a, Int)+latbs = getLATBS $ Class.switchReal (LATBS S.latbs) (LATBS D.latbs)+++newtype LATDF a = LATDF {getLATDF :: Int -> Array (ZeroInt,ZeroInt) a -> IOArray ZeroInt a -> a -> a -> Array ZeroInt CInt -> Array ZeroInt CInt -> IO (a, a)}++latdf :: Class.Real a => Int -> Array (ZeroInt,ZeroInt) a -> IOArray ZeroInt a -> a -> a -> Array ZeroInt CInt -> Array ZeroInt CInt -> IO (a, a)+latdf = getLATDF $ Class.switchReal (LATDF S.latdf) (LATDF D.latdf)+++newtype LATPS a = LATPS {getLATPS :: Char -> Char -> Char -> Char -> Array ZeroInt a -> IOArray ZeroInt a -> IOArray ZeroInt a -> IO (a, Int)}++latps :: Class.Real a => Char -> Char -> Char -> Char -> Array ZeroInt a -> IOArray ZeroInt a -> IOArray ZeroInt a -> IO (a, Int)+latps = getLATPS $ Class.switchReal (LATPS S.latps) (LATPS D.latps)+++newtype LATRD a = LATRD {getLATRD :: Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Array (ZeroInt,ZeroInt) a)}++latrd :: Class.Real a => Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Array (ZeroInt,ZeroInt) a)+latrd = getLATRD $ Class.switchReal (LATRD S.latrd) (LATRD D.latrd)+++newtype LATRS a = LATRS {getLATRS :: Char -> Char -> Char -> Char -> Array (ZeroInt,ZeroInt) a -> IOArray ZeroInt a -> IOArray ZeroInt a -> IO (a, Int)}++latrs :: Class.Real a => Char -> Char -> Char -> Char -> Array (ZeroInt,ZeroInt) a -> IOArray ZeroInt a -> IOArray ZeroInt a -> IO (a, Int)+latrs = getLATRS $ Class.switchReal (LATRS S.latrs) (LATRS D.latrs)+++newtype LATRZ a = LATRZ {getLATRZ :: Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a)}++latrz :: Class.Real a => Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a)+latrz = getLATRZ $ Class.switchReal (LATRZ S.latrz) (LATRZ D.latrz)+++newtype LAUU2 a = LAUU2 {getLAUU2 :: Char -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++lauu2 :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+lauu2 = getLAUU2 $ Class.switchReal (LAUU2 S.lauu2) (LAUU2 D.lauu2)+++newtype LAUUM a = LAUUM {getLAUUM :: Char -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++lauum :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+lauum = getLAUUM $ Class.switchReal (LAUUM S.lauum) (LAUUM D.lauum)+++newtype ORBDB a = ORBDB {getORBDB :: Char -> Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Int)}++orbdb :: Class.Real a => Char -> Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Int)+orbdb = getORBDB $ Class.switchReal (ORBDB S.orbdb) (ORBDB D.orbdb)+++newtype ORCSD a = ORCSD {getORCSD :: Char -> Char -> Char -> Char -> Char -> Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> Int -> Int -> Int -> Int -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Int)}++orcsd :: Class.Real a => Char -> Char -> Char -> Char -> Char -> Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> Int -> Int -> Int -> Int -> IO (Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Array (ZeroInt,ZeroInt) a, Int)+orcsd = getORCSD $ Class.switchReal (ORCSD S.orcsd) (ORCSD D.orcsd)+++newtype PBCON a = PBCON {getPBCON :: Char -> Int -> Array (ZeroInt,ZeroInt) a -> a -> IO (a, Int)}++pbcon :: Class.Real a => Char -> Int -> Array (ZeroInt,ZeroInt) a -> a -> IO (a, Int)+pbcon = getPBCON $ Class.switchReal (PBCON S.pbcon) (PBCON D.pbcon)+++newtype PBEQU a = PBEQU {getPBEQU :: Char -> Int -> Array (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, a, a, Int)}++pbequ :: Class.Real a => Char -> Int -> Array (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, a, a, Int)+pbequ = getPBEQU $ Class.switchReal (PBEQU S.pbequ) (PBEQU D.pbequ)+++newtype PBRFS a = PBRFS {getPBRFS :: Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Array ZeroInt a, Int)}++pbrfs :: Class.Real a => Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Array ZeroInt a, Int)+pbrfs = getPBRFS $ Class.switchReal (PBRFS S.pbrfs) (PBRFS D.pbrfs)+++newtype PBSTF a = PBSTF {getPBSTF :: Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++pbstf :: Class.Real a => Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+pbstf = getPBSTF $ Class.switchReal (PBSTF S.pbstf) (PBSTF D.pbstf)+++newtype PBSV a = PBSV {getPBSV :: Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++pbsv :: Class.Real a => Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+pbsv = getPBSV $ Class.switchReal (PBSV S.pbsv) (PBSV D.pbsv)+++newtype PBSVX a = PBSVX {getPBSVX :: Char -> Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Char -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Char, Array (ZeroInt,ZeroInt) a, a, Array ZeroInt a, Array ZeroInt a, Int)}++pbsvx :: Class.Real a => Char -> Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Char -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Char, Array (ZeroInt,ZeroInt) a, a, Array ZeroInt a, Array ZeroInt a, Int)+pbsvx = getPBSVX $ Class.switchReal (PBSVX S.pbsvx) (PBSVX D.pbsvx)+++newtype PBTF2 a = PBTF2 {getPBTF2 :: Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++pbtf2 :: Class.Real a => Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+pbtf2 = getPBTF2 $ Class.switchReal (PBTF2 S.pbtf2) (PBTF2 D.pbtf2)+++newtype PBTRF a = PBTRF {getPBTRF :: Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++pbtrf :: Class.Real a => Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+pbtrf = getPBTRF $ Class.switchReal (PBTRF S.pbtrf) (PBTRF D.pbtrf)+++newtype PBTRS a = PBTRS {getPBTRS :: Char -> Int -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++pbtrs :: Class.Real a => Char -> Int -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+pbtrs = getPBTRS $ Class.switchReal (PBTRS S.pbtrs) (PBTRS D.pbtrs)+++newtype PFTRF a = PFTRF {getPFTRF :: Char -> Char -> Int -> IOArray ZeroInt a -> IO (Int)}++pftrf :: Class.Real a => Char -> Char -> Int -> IOArray ZeroInt a -> IO (Int)+pftrf = getPFTRF $ Class.switchReal (PFTRF S.pftrf) (PFTRF D.pftrf)+++newtype PFTRI a = PFTRI {getPFTRI :: Char -> Char -> Int -> IOArray ZeroInt a -> IO (Int)}++pftri :: Class.Real a => Char -> Char -> Int -> IOArray ZeroInt a -> IO (Int)+pftri = getPFTRI $ Class.switchReal (PFTRI S.pftri) (PFTRI D.pftri)+++newtype PFTRS a = PFTRS {getPFTRS :: Char -> Char -> Int -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++pftrs :: Class.Real a => Char -> Char -> Int -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+pftrs = getPFTRS $ Class.switchReal (PFTRS S.pftrs) (PFTRS D.pftrs)+++newtype POCON a = POCON {getPOCON :: Char -> Array (ZeroInt,ZeroInt) a -> a -> IO (a, Int)}++pocon :: Class.Real a => Char -> Array (ZeroInt,ZeroInt) a -> a -> IO (a, Int)+pocon = getPOCON $ Class.switchReal (POCON S.pocon) (POCON D.pocon)+++newtype POEQU a = POEQU {getPOEQU :: Array (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, a, a, Int)}++poequ :: Class.Real a => Array (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, a, a, Int)+poequ = getPOEQU $ Class.switchReal (POEQU S.poequ) (POEQU D.poequ)+++newtype POEQUB a = POEQUB {getPOEQUB :: Array (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, a, a, Int)}++poequb :: Class.Real a => Array (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, a, a, Int)+poequb = getPOEQUB $ Class.switchReal (POEQUB S.poequb) (POEQUB D.poequb)+++newtype PORFS a = PORFS {getPORFS :: Char -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Array ZeroInt a, Int)}++porfs :: Class.Real a => Char -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Array ZeroInt a, Int)+porfs = getPORFS $ Class.switchReal (PORFS S.porfs) (PORFS D.porfs)+++newtype POSV a = POSV {getPOSV :: Char -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++posv :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+posv = getPOSV $ Class.switchReal (POSV S.posv) (POSV D.posv)+++newtype POSVX a = POSVX {getPOSVX :: Char -> Char -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Char -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Char, Array (ZeroInt,ZeroInt) a, a, Array ZeroInt a, Array ZeroInt a, Int)}++posvx :: Class.Real a => Char -> Char -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Char -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Char, Array (ZeroInt,ZeroInt) a, a, Array ZeroInt a, Array ZeroInt a, Int)+posvx = getPOSVX $ Class.switchReal (POSVX S.posvx) (POSVX D.posvx)+++newtype POTF2 a = POTF2 {getPOTF2 :: Char -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++potf2 :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+potf2 = getPOTF2 $ Class.switchReal (POTF2 S.potf2) (POTF2 D.potf2)+++newtype POTRF a = POTRF {getPOTRF :: Char -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++potrf :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+potrf = getPOTRF $ Class.switchReal (POTRF S.potrf) (POTRF D.potrf)+++newtype POTRI a = POTRI {getPOTRI :: Char -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++potri :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+potri = getPOTRI $ Class.switchReal (POTRI S.potri) (POTRI D.potri)+++newtype POTRS a = POTRS {getPOTRS :: Char -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++potrs :: Class.Real a => Char -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+potrs = getPOTRS $ Class.switchReal (POTRS S.potrs) (POTRS D.potrs)+++newtype PPCON a = PPCON {getPPCON :: Char -> Int -> Array ZeroInt a -> a -> IO (a, Int)}++ppcon :: Class.Real a => Char -> Int -> Array ZeroInt a -> a -> IO (a, Int)+ppcon = getPPCON $ Class.switchReal (PPCON S.ppcon) (PPCON D.ppcon)+++newtype PPEQU a = PPEQU {getPPEQU :: Char -> Int -> Array ZeroInt a -> IO (Array ZeroInt a, a, a, Int)}++ppequ :: Class.Real a => Char -> Int -> Array ZeroInt a -> IO (Array ZeroInt a, a, a, Int)+ppequ = getPPEQU $ Class.switchReal (PPEQU S.ppequ) (PPEQU D.ppequ)+++newtype PPRFS a = PPRFS {getPPRFS :: Char -> Int -> Array ZeroInt a -> Array ZeroInt a -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Array ZeroInt a, Int)}++pprfs :: Class.Real a => Char -> Int -> Array ZeroInt a -> Array ZeroInt a -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Array ZeroInt a, Int)+pprfs = getPPRFS $ Class.switchReal (PPRFS S.pprfs) (PPRFS D.pprfs)+++newtype PPSV a = PPSV {getPPSV :: Char -> Int -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++ppsv :: Class.Real a => Char -> Int -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+ppsv = getPPSV $ Class.switchReal (PPSV S.ppsv) (PPSV D.ppsv)+++newtype PPSVX a = PPSVX {getPPSVX :: Char -> Char -> IOArray ZeroInt a -> IOArray ZeroInt a -> Char -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Char, Array (ZeroInt,ZeroInt) a, a, Array ZeroInt a, Array ZeroInt a, Int)}++ppsvx :: Class.Real a => Char -> Char -> IOArray ZeroInt a -> IOArray ZeroInt a -> Char -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Char, Array (ZeroInt,ZeroInt) a, a, Array ZeroInt a, Array ZeroInt a, Int)+ppsvx = getPPSVX $ Class.switchReal (PPSVX S.ppsvx) (PPSVX D.ppsvx)+++newtype PPTRF a = PPTRF {getPPTRF :: Char -> Int -> IOArray ZeroInt a -> IO (Int)}++pptrf :: Class.Real a => Char -> Int -> IOArray ZeroInt a -> IO (Int)+pptrf = getPPTRF $ Class.switchReal (PPTRF S.pptrf) (PPTRF D.pptrf)+++newtype PPTRI a = PPTRI {getPPTRI :: Char -> Int -> IOArray ZeroInt a -> IO (Int)}++pptri :: Class.Real a => Char -> Int -> IOArray ZeroInt a -> IO (Int)+pptri = getPPTRI $ Class.switchReal (PPTRI S.pptri) (PPTRI D.pptri)+++newtype PPTRS a = PPTRS {getPPTRS :: Char -> Int -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++pptrs :: Class.Real a => Char -> Int -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+pptrs = getPPTRS $ Class.switchReal (PPTRS S.pptrs) (PPTRS D.pptrs)+++newtype PSTF2 a = PSTF2 {getPSTF2 :: Char -> IOArray (ZeroInt,ZeroInt) a -> a -> IO (Array ZeroInt CInt, Int, Int)}++pstf2 :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) a -> a -> IO (Array ZeroInt CInt, Int, Int)+pstf2 = getPSTF2 $ Class.switchReal (PSTF2 S.pstf2) (PSTF2 D.pstf2)+++newtype PSTRF a = PSTRF {getPSTRF :: Char -> IOArray (ZeroInt,ZeroInt) a -> a -> IO (Array ZeroInt CInt, Int, Int)}++pstrf :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) a -> a -> IO (Array ZeroInt CInt, Int, Int)+pstrf = getPSTRF $ Class.switchReal (PSTRF S.pstrf) (PSTRF D.pstrf)+++newtype PTCON a = PTCON {getPTCON :: Array ZeroInt a -> Array ZeroInt a -> a -> IO (a, Int)}++ptcon :: Class.Real a => Array ZeroInt a -> Array ZeroInt a -> a -> IO (a, Int)+ptcon = getPTCON $ Class.switchReal (PTCON S.ptcon) (PTCON D.ptcon)+++newtype PTEQR a = PTEQR {getPTEQR :: Char -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++pteqr :: Class.Real a => Char -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+pteqr = getPTEQR $ Class.switchReal (PTEQR S.pteqr) (PTEQR D.pteqr)+++newtype PTRFS a = PTRFS {getPTRFS :: Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Array ZeroInt a, Int)}++ptrfs :: Class.Real a => Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt a -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Array ZeroInt a, Int)+ptrfs = getPTRFS $ Class.switchReal (PTRFS S.ptrfs) (PTRFS D.ptrfs)+++newtype PTSV a = PTSV {getPTSV :: IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++ptsv :: Class.Real a => IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+ptsv = getPTSV $ Class.switchReal (PTSV S.ptsv) (PTSV D.ptsv)+++newtype PTSVX a = PTSVX {getPTSVX :: Char -> Array ZeroInt a -> Array ZeroInt a -> IOArray ZeroInt a -> IOArray ZeroInt a -> Array (ZeroInt,ZeroInt) a -> Int -> IO (Array (ZeroInt,ZeroInt) a, a, Array ZeroInt a, Array ZeroInt a, Int)}++ptsvx :: Class.Real a => Char -> Array ZeroInt a -> Array ZeroInt a -> IOArray ZeroInt a -> IOArray ZeroInt a -> Array (ZeroInt,ZeroInt) a -> Int -> IO (Array (ZeroInt,ZeroInt) a, a, Array ZeroInt a, Array ZeroInt a, Int)+ptsvx = getPTSVX $ Class.switchReal (PTSVX S.ptsvx) (PTSVX D.ptsvx)+++newtype PTTRF a = PTTRF {getPTTRF :: IOArray ZeroInt a -> IOArray ZeroInt a -> IO (Int)}++pttrf :: Class.Real a => IOArray ZeroInt a -> IOArray ZeroInt a -> IO (Int)+pttrf = getPTTRF $ Class.switchReal (PTTRF S.pttrf) (PTTRF D.pttrf)+++newtype PTTRS a = PTTRS {getPTTRS :: Array ZeroInt a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++pttrs :: Class.Real a => Array ZeroInt a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+pttrs = getPTTRS $ Class.switchReal (PTTRS S.pttrs) (PTTRS D.pttrs)+++newtype PTTS2 a = PTTS2 {getPTTS2 :: Array ZeroInt a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IO ()}++ptts2 :: Class.Real a => Array ZeroInt a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IO ()+ptts2 = getPTTS2 $ Class.switchReal (PTTS2 S.ptts2) (PTTS2 D.ptts2)+++newtype RSCL a = RSCL {getRSCL :: Int -> a -> IOArray ZeroInt a -> Int -> IO ()}++rscl :: Class.Real a => Int -> a -> IOArray ZeroInt a -> Int -> IO ()+rscl = getRSCL $ Class.switchReal (RSCL S.rscl) (RSCL D.rscl)+++newtype SPCON a = SPCON {getSPCON :: Char -> Array ZeroInt a -> Array ZeroInt CInt -> a -> IO (a, Int)}++spcon :: Class.Real a => Char -> Array ZeroInt a -> Array ZeroInt CInt -> a -> IO (a, Int)+spcon = getSPCON $ Class.switchReal (SPCON S.spcon) (SPCON D.spcon)+++newtype SPRFS a = SPRFS {getSPRFS :: Char -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt CInt -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Array ZeroInt a, Int)}++sprfs :: Class.Real a => Char -> Array ZeroInt a -> Array ZeroInt a -> Array ZeroInt CInt -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Array ZeroInt a, Int)+sprfs = getSPRFS $ Class.switchReal (SPRFS S.sprfs) (SPRFS D.sprfs)+++newtype SPSV a = SPSV {getSPSV :: Char -> Int -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt CInt, Int)}++spsv :: Class.Real a => Char -> Int -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt CInt, Int)+spsv = getSPSV $ Class.switchReal (SPSV S.spsv) (SPSV D.spsv)+++newtype SPSVX a = SPSVX {getSPSVX :: Char -> Char -> Array ZeroInt a -> IOArray ZeroInt a -> IOArray ZeroInt CInt -> Array (ZeroInt,ZeroInt) a -> Int -> IO (Array (ZeroInt,ZeroInt) a, a, Array ZeroInt a, Array ZeroInt a, Int)}++spsvx :: Class.Real a => Char -> Char -> Array ZeroInt a -> IOArray ZeroInt a -> IOArray ZeroInt CInt -> Array (ZeroInt,ZeroInt) a -> Int -> IO (Array (ZeroInt,ZeroInt) a, a, Array ZeroInt a, Array ZeroInt a, Int)+spsvx = getSPSVX $ Class.switchReal (SPSVX S.spsvx) (SPSVX D.spsvx)+++newtype SPTRF a = SPTRF {getSPTRF :: Char -> Int -> IOArray ZeroInt a -> IO (Array ZeroInt CInt, Int)}++sptrf :: Class.Real a => Char -> Int -> IOArray ZeroInt a -> IO (Array ZeroInt CInt, Int)+sptrf = getSPTRF $ Class.switchReal (SPTRF S.sptrf) (SPTRF D.sptrf)+++newtype SPTRI a = SPTRI {getSPTRI :: Char -> IOArray ZeroInt a -> Array ZeroInt CInt -> IO (Int)}++sptri :: Class.Real a => Char -> IOArray ZeroInt a -> Array ZeroInt CInt -> IO (Int)+sptri = getSPTRI $ Class.switchReal (SPTRI S.sptri) (SPTRI D.sptri)+++newtype SPTRS a = SPTRS {getSPTRS :: Char -> Array ZeroInt a -> Array ZeroInt CInt -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++sptrs :: Class.Real a => Char -> Array ZeroInt a -> Array ZeroInt CInt -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+sptrs = getSPTRS $ Class.switchReal (SPTRS S.sptrs) (SPTRS D.sptrs)+++newtype STEBZ a = STEBZ {getSTEBZ :: Char -> Char -> a -> a -> Int -> Int -> a -> Array ZeroInt a -> Array ZeroInt a -> IO (Int, Int, Array ZeroInt a, Array ZeroInt CInt, Array ZeroInt CInt, Int)}++stebz :: Class.Real a => Char -> Char -> a -> a -> Int -> Int -> a -> Array ZeroInt a -> Array ZeroInt a -> IO (Int, Int, Array ZeroInt a, Array ZeroInt CInt, Array ZeroInt CInt, Int)+stebz = getSTEBZ $ Class.switchReal (STEBZ S.stebz) (STEBZ D.stebz)+++newtype STEDC a = STEDC {getSTEDC :: Char -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> IO (Int)}++stedc :: Class.Real a => Char -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> IO (Int)+stedc = getSTEDC $ Class.switchReal (STEDC S.stedc) (STEDC D.stedc)+++newtype STEGR a = STEGR {getSTEGR :: Char -> Char -> IOArray ZeroInt a -> IOArray ZeroInt a -> a -> a -> Int -> Int -> a -> Int -> Int -> Int -> Int -> IO (Int, Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array ZeroInt CInt, Int)}++stegr :: Class.Real a => Char -> Char -> IOArray ZeroInt a -> IOArray ZeroInt a -> a -> a -> Int -> Int -> a -> Int -> Int -> Int -> Int -> IO (Int, Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array ZeroInt CInt, Int)+stegr = getSTEGR $ Class.switchReal (STEGR S.stegr) (STEGR D.stegr)+++newtype STEIN a = STEIN {getSTEIN :: Array ZeroInt a -> Array ZeroInt a -> Int -> Array ZeroInt a -> Array ZeroInt CInt -> Array ZeroInt CInt -> Int -> IO (Array (ZeroInt,ZeroInt) a, Array ZeroInt CInt, Int)}++stein :: Class.Real a => Array ZeroInt a -> Array ZeroInt a -> Int -> Array ZeroInt a -> Array ZeroInt CInt -> Array ZeroInt CInt -> Int -> IO (Array (ZeroInt,ZeroInt) a, Array ZeroInt CInt, Int)+stein = getSTEIN $ Class.switchReal (STEIN S.stein) (STEIN D.stein)+++newtype STEMR a = STEMR {getSTEMR :: Char -> Char -> IOArray ZeroInt a -> IOArray ZeroInt a -> a -> a -> Int -> Int -> Int -> Int -> Int -> Bool -> Int -> Int -> IO (Int, Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array ZeroInt CInt, Bool, Int)}++stemr :: Class.Real a => Char -> Char -> IOArray ZeroInt a -> IOArray ZeroInt a -> a -> a -> Int -> Int -> Int -> Int -> Int -> Bool -> Int -> Int -> IO (Int, Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array ZeroInt CInt, Bool, Int)+stemr = getSTEMR $ Class.switchReal (STEMR S.stemr) (STEMR D.stemr)+++newtype STEQR a = STEQR {getSTEQR :: Char -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++steqr :: Class.Real a => Char -> IOArray ZeroInt a -> IOArray ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+steqr = getSTEQR $ Class.switchReal (STEQR S.steqr) (STEQR D.steqr)+++newtype STERF a = STERF {getSTERF :: IOArray ZeroInt a -> IOArray ZeroInt a -> IO (Int)}++sterf :: Class.Real a => IOArray ZeroInt a -> IOArray ZeroInt a -> IO (Int)+sterf = getSTERF $ Class.switchReal (STERF S.sterf) (STERF D.sterf)+++newtype STEV a = STEV {getSTEV :: Char -> IOArray ZeroInt a -> IOArray ZeroInt a -> Int -> IO (Array (ZeroInt,ZeroInt) a, Int)}++stev :: Class.Real a => Char -> IOArray ZeroInt a -> IOArray ZeroInt a -> Int -> IO (Array (ZeroInt,ZeroInt) a, Int)+stev = getSTEV $ Class.switchReal (STEV S.stev) (STEV D.stev)+++newtype STEVD a = STEVD {getSTEVD :: Char -> IOArray ZeroInt a -> IOArray ZeroInt a -> Int -> Int -> Int -> Int -> IO (Array (ZeroInt,ZeroInt) a, Int)}++stevd :: Class.Real a => Char -> IOArray ZeroInt a -> IOArray ZeroInt a -> Int -> Int -> Int -> Int -> IO (Array (ZeroInt,ZeroInt) a, Int)+stevd = getSTEVD $ Class.switchReal (STEVD S.stevd) (STEVD D.stevd)+++newtype STEVR a = STEVR {getSTEVR :: Char -> Char -> IOArray ZeroInt a -> IOArray ZeroInt a -> a -> a -> Int -> Int -> a -> Int -> Int -> Int -> Int -> IO (Int, Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array ZeroInt CInt, Int)}++stevr :: Class.Real a => Char -> Char -> IOArray ZeroInt a -> IOArray ZeroInt a -> a -> a -> Int -> Int -> a -> Int -> Int -> Int -> Int -> IO (Int, Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array ZeroInt CInt, Int)+stevr = getSTEVR $ Class.switchReal (STEVR S.stevr) (STEVR D.stevr)+++newtype STEVX a = STEVX {getSTEVX :: Char -> Char -> IOArray ZeroInt a -> IOArray ZeroInt a -> a -> a -> Int -> Int -> a -> Int -> Int -> IO (Int, Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array ZeroInt CInt, Int)}++stevx :: Class.Real a => Char -> Char -> IOArray ZeroInt a -> IOArray ZeroInt a -> a -> a -> Int -> Int -> a -> Int -> Int -> IO (Int, Array ZeroInt a, Array (ZeroInt,ZeroInt) a, Array ZeroInt CInt, Int)+stevx = getSTEVX $ Class.switchReal (STEVX S.stevx) (STEVX D.stevx)+++newtype SYCON a = SYCON {getSYCON :: Char -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> a -> IO (a, Int)}++sycon :: Class.Real a => Char -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> a -> IO (a, Int)+sycon = getSYCON $ Class.switchReal (SYCON S.sycon) (SYCON D.sycon)+++newtype SYCONV a = SYCONV {getSYCONV :: Char -> Char -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> IO (Array ZeroInt a, Int)}++syconv :: Class.Real a => Char -> Char -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> IO (Array ZeroInt a, Int)+syconv = getSYCONV $ Class.switchReal (SYCONV S.syconv) (SYCONV D.syconv)+++newtype SYEQUB a = SYEQUB {getSYEQUB :: Char -> Array (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, a, a, Int)}++syequb :: Class.Real a => Char -> Array (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, a, a, Int)+syequb = getSYEQUB $ Class.switchReal (SYEQUB S.syequb) (SYEQUB D.syequb)+++newtype SYRFS a = SYRFS {getSYRFS :: Char -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Array ZeroInt a, Int)}++syrfs :: Class.Real a => Char -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Array ZeroInt a, Int)+syrfs = getSYRFS $ Class.switchReal (SYRFS S.syrfs) (SYRFS D.syrfs)+++newtype SYSV a = SYSV {getSYSV :: Char -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt CInt, Int)}++sysv :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt CInt, Int)+sysv = getSYSV $ Class.switchReal (SYSV S.sysv) (SYSV D.sysv)+++newtype SYSVX a = SYSVX {getSYSVX :: Char -> Char -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray ZeroInt CInt -> Array (ZeroInt,ZeroInt) a -> Int -> Int -> IO (Array (ZeroInt,ZeroInt) a, a, Array ZeroInt a, Array ZeroInt a, Int)}++sysvx :: Class.Real a => Char -> Char -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray ZeroInt CInt -> Array (ZeroInt,ZeroInt) a -> Int -> Int -> IO (Array (ZeroInt,ZeroInt) a, a, Array ZeroInt a, Array ZeroInt a, Int)+sysvx = getSYSVX $ Class.switchReal (SYSVX S.sysvx) (SYSVX D.sysvx)+++newtype SYSWAPR a = SYSWAPR {getSYSWAPR :: Char -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> IO ()}++syswapr :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> IO ()+syswapr = getSYSWAPR $ Class.switchReal (SYSWAPR S.syswapr) (SYSWAPR D.syswapr)+++newtype SYTD2 a = SYTD2 {getSYTD2 :: Char -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Int)}++sytd2 :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Int)+sytd2 = getSYTD2 $ Class.switchReal (SYTD2 S.sytd2) (SYTD2 D.sytd2)+++newtype SYTF2 a = SYTF2 {getSYTF2 :: Char -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt CInt, Int)}++sytf2 :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt CInt, Int)+sytf2 = getSYTF2 $ Class.switchReal (SYTF2 S.sytf2) (SYTF2 D.sytf2)+++newtype SYTRD a = SYTRD {getSYTRD :: Char -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Int)}++sytrd :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Int)+sytrd = getSYTRD $ Class.switchReal (SYTRD S.sytrd) (SYTRD D.sytrd)+++newtype SYTRF a = SYTRF {getSYTRF :: Char -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt CInt, Int)}++sytrf :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt CInt, Int)+sytrf = getSYTRF $ Class.switchReal (SYTRF S.sytrf) (SYTRF D.sytrf)+++newtype SYTRI a = SYTRI {getSYTRI :: Char -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> IO (Int)}++sytri :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> IO (Int)+sytri = getSYTRI $ Class.switchReal (SYTRI S.sytri) (SYTRI D.sytri)+++newtype SYTRI2 a = SYTRI2 {getSYTRI2 :: Char -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> Int -> Int -> IO (Int)}++sytri2 :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> Int -> Int -> IO (Int)+sytri2 = getSYTRI2 $ Class.switchReal (SYTRI2 S.sytri2) (SYTRI2 D.sytri2)+++newtype SYTRI2X a = SYTRI2X {getSYTRI2X :: Char -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> Int -> IO (Int)}++sytri2x :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> Int -> IO (Int)+sytri2x = getSYTRI2X $ Class.switchReal (SYTRI2X S.sytri2x) (SYTRI2X D.sytri2x)+++newtype SYTRS a = SYTRS {getSYTRS :: Char -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++sytrs :: Class.Real a => Char -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+sytrs = getSYTRS $ Class.switchReal (SYTRS S.sytrs) (SYTRS D.sytrs)+++newtype SYTRS2 a = SYTRS2 {getSYTRS2 :: Char -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++sytrs2 :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt CInt -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+sytrs2 = getSYTRS2 $ Class.switchReal (SYTRS2 S.sytrs2) (SYTRS2 D.sytrs2)+++newtype TBCON a = TBCON {getTBCON :: Char -> Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> IO (a, Int)}++tbcon :: Class.Real a => Char -> Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> IO (a, Int)+tbcon = getTBCON $ Class.switchReal (TBCON S.tbcon) (TBCON D.tbcon)+++newtype TBRFS a = TBRFS {getTBRFS :: Char -> Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Array ZeroInt a, Int)}++tbrfs :: Class.Real a => Char -> Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Array ZeroInt a, Int)+tbrfs = getTBRFS $ Class.switchReal (TBRFS S.tbrfs) (TBRFS D.tbrfs)+++newtype TBTRS a = TBTRS {getTBTRS :: Char -> Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++tbtrs :: Class.Real a => Char -> Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+tbtrs = getTBTRS $ Class.switchReal (TBTRS S.tbtrs) (TBTRS D.tbtrs)+++newtype TFSM a = TFSM {getTFSM :: Char -> Char -> Char -> Char -> Char -> Int -> a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IO ()}++tfsm :: Class.Real a => Char -> Char -> Char -> Char -> Char -> Int -> a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IO ()+tfsm = getTFSM $ Class.switchReal (TFSM S.tfsm) (TFSM D.tfsm)+++newtype TFTRI a = TFTRI {getTFTRI :: Char -> Char -> Char -> Int -> IOArray ZeroInt a -> IO (Int)}++tftri :: Class.Real a => Char -> Char -> Char -> Int -> IOArray ZeroInt a -> IO (Int)+tftri = getTFTRI $ Class.switchReal (TFTRI S.tftri) (TFTRI D.tftri)+++newtype TFTTP a = TFTTP {getTFTTP :: Char -> Char -> Int -> Array ZeroInt a -> IO (Array ZeroInt a, Int)}++tfttp :: Class.Real a => Char -> Char -> Int -> Array ZeroInt a -> IO (Array ZeroInt a, Int)+tfttp = getTFTTP $ Class.switchReal (TFTTP S.tfttp) (TFTTP D.tfttp)+++newtype TFTTR a = TFTTR {getTFTTR :: Char -> Char -> Int -> Array ZeroInt a -> Int -> IO (Array (ZeroInt,ZeroInt) a, Int)}++tfttr :: Class.Real a => Char -> Char -> Int -> Array ZeroInt a -> Int -> IO (Array (ZeroInt,ZeroInt) a, Int)+tfttr = getTFTTR $ Class.switchReal (TFTTR S.tfttr) (TFTTR D.tfttr)+++newtype TGEVC a = TGEVC {getTGEVC :: Char -> Char -> Array ZeroInt Bool -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int, Int)}++tgevc :: Class.Real a => Char -> Char -> Array ZeroInt Bool -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int, Int)+tgevc = getTGEVC $ Class.switchReal (TGEVC S.tgevc) (TGEVC D.tgevc)+++newtype TGEX2 a = TGEX2 {getTGEX2 :: Bool -> Bool -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> Int -> Int -> IO (Int)}++tgex2 :: Class.Real a => Bool -> Bool -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> Int -> Int -> IO (Int)+tgex2 = getTGEX2 $ Class.switchReal (TGEX2 S.tgex2) (TGEX2 D.tgex2)+++newtype TGEXC a = TGEXC {getTGEXC :: Bool -> Bool -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> Int -> IO (Int, Int, Int)}++tgexc :: Class.Real a => Bool -> Bool -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> Int -> IO (Int, Int, Int)+tgexc = getTGEXC $ Class.switchReal (TGEXC S.tgexc) (TGEXC D.tgexc)+++newtype TGSEN a = TGSEN {getTGSEN :: Int -> Bool -> Bool -> Array ZeroInt Bool -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Int, a, a, Array ZeroInt a, Int)}++tgsen :: Class.Real a => Int -> Bool -> Bool -> Array ZeroInt Bool -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Array ZeroInt a, Int, a, a, Array ZeroInt a, Int)+tgsen = getTGSEN $ Class.switchReal (TGSEN S.tgsen) (TGSEN D.tgsen)+++newtype TGSJA a = TGSJA {getTGSJA :: Char -> Char -> Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> a -> a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Array ZeroInt a, Int, Int)}++tgsja :: Class.Real a => Char -> Char -> Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> a -> a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Array ZeroInt a, Int, Int)+tgsja = getTGSJA $ Class.switchReal (TGSJA S.tgsja) (TGSJA D.tgsja)+++newtype TGSNA a = TGSNA {getTGSNA :: Char -> Char -> Array ZeroInt Bool -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Int -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Int, Int)}++tgsna :: Class.Real a => Char -> Char -> Array ZeroInt Bool -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Int -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Int, Int)+tgsna = getTGSNA $ Class.switchReal (TGSNA S.tgsna) (TGSNA D.tgsna)+++newtype TGSY2 a = TGSY2 {getTGSY2 :: Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> a -> a -> IO (a, a, a, Int, Int)}++tgsy2 :: Class.Real a => Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> a -> a -> IO (a, a, a, Int, Int)+tgsy2 = getTGSY2 $ Class.switchReal (TGSY2 S.tgsy2) (TGSY2 D.tgsy2)+++newtype TGSYL a = TGSYL {getTGSYL :: Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (a, a, Int)}++tgsyl :: Class.Real a => Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (a, a, Int)+tgsyl = getTGSYL $ Class.switchReal (TGSYL S.tgsyl) (TGSYL D.tgsyl)+++newtype TPCON a = TPCON {getTPCON :: Char -> Char -> Char -> Int -> Array ZeroInt a -> IO (a, Int)}++tpcon :: Class.Real a => Char -> Char -> Char -> Int -> Array ZeroInt a -> IO (a, Int)+tpcon = getTPCON $ Class.switchReal (TPCON S.tpcon) (TPCON D.tpcon)+++newtype TPRFS a = TPRFS {getTPRFS :: Char -> Char -> Char -> Int -> Array ZeroInt a -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Array ZeroInt a, Int)}++tprfs :: Class.Real a => Char -> Char -> Char -> Int -> Array ZeroInt a -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Array ZeroInt a, Int)+tprfs = getTPRFS $ Class.switchReal (TPRFS S.tprfs) (TPRFS D.tprfs)+++newtype TPTRI a = TPTRI {getTPTRI :: Char -> Char -> Int -> IOArray ZeroInt a -> IO (Int)}++tptri :: Class.Real a => Char -> Char -> Int -> IOArray ZeroInt a -> IO (Int)+tptri = getTPTRI $ Class.switchReal (TPTRI S.tptri) (TPTRI D.tptri)+++newtype TPTRS a = TPTRS {getTPTRS :: Char -> Char -> Char -> Int -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++tptrs :: Class.Real a => Char -> Char -> Char -> Int -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+tptrs = getTPTRS $ Class.switchReal (TPTRS S.tptrs) (TPTRS D.tptrs)+++newtype TPTTF a = TPTTF {getTPTTF :: Char -> Char -> Int -> Array ZeroInt a -> IO (Array ZeroInt a, Int)}++tpttf :: Class.Real a => Char -> Char -> Int -> Array ZeroInt a -> IO (Array ZeroInt a, Int)+tpttf = getTPTTF $ Class.switchReal (TPTTF S.tpttf) (TPTTF D.tpttf)+++newtype TPTTR a = TPTTR {getTPTTR :: Char -> Int -> Array ZeroInt a -> Int -> IO (Array (ZeroInt,ZeroInt) a, Int)}++tpttr :: Class.Real a => Char -> Int -> Array ZeroInt a -> Int -> IO (Array (ZeroInt,ZeroInt) a, Int)+tpttr = getTPTTR $ Class.switchReal (TPTTR S.tpttr) (TPTTR D.tpttr)+++newtype TRCON a = TRCON {getTRCON :: Char -> Char -> Char -> Array (ZeroInt,ZeroInt) a -> IO (a, Int)}++trcon :: Class.Real a => Char -> Char -> Char -> Array (ZeroInt,ZeroInt) a -> IO (a, Int)+trcon = getTRCON $ Class.switchReal (TRCON S.trcon) (TRCON D.trcon)+++newtype TREVC a = TREVC {getTREVC :: Char -> Char -> IOArray ZeroInt Bool -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int, Int)}++trevc :: Class.Real a => Char -> Char -> IOArray ZeroInt Bool -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int, Int)+trevc = getTREVC $ Class.switchReal (TREVC S.trevc) (TREVC D.trevc)+++newtype TREXC a = TREXC {getTREXC :: Char -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> IO (Int, Int, Int)}++trexc :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> IO (Int, Int, Int)+trexc = getTREXC $ Class.switchReal (TREXC S.trexc) (TREXC D.trexc)+++newtype TRRFS a = TRRFS {getTRRFS :: Char -> Char -> Char -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Array ZeroInt a, Int)}++trrfs :: Class.Real a => Char -> Char -> Char -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Array ZeroInt a, Int)+trrfs = getTRRFS $ Class.switchReal (TRRFS S.trrfs) (TRRFS D.trrfs)+++newtype TRSEN a = TRSEN {getTRSEN :: Char -> Char -> Array ZeroInt Bool -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Int, a, a, Int)}++trsen :: Class.Real a => Char -> Char -> Array ZeroInt Bool -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Int, a, a, Int)+trsen = getTRSEN $ Class.switchReal (TRSEN S.trsen) (TRSEN D.trsen)+++newtype TRSNA a = TRSNA {getTRSNA :: Char -> Char -> Array ZeroInt Bool -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Int -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Int, Int)}++trsna :: Class.Real a => Char -> Char -> Array ZeroInt Bool -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> Int -> Int -> IO (Array ZeroInt a, Array ZeroInt a, Int, Int)+trsna = getTRSNA $ Class.switchReal (TRSNA S.trsna) (TRSNA D.trsna)+++newtype TRSYL a = TRSYL {getTRSYL :: Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (a, Int)}++trsyl :: Class.Real a => Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (a, Int)+trsyl = getTRSYL $ Class.switchReal (TRSYL S.trsyl) (TRSYL D.trsyl)+++newtype TRTI2 a = TRTI2 {getTRTI2 :: Char -> Char -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++trti2 :: Class.Real a => Char -> Char -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+trti2 = getTRTI2 $ Class.switchReal (TRTI2 S.trti2) (TRTI2 D.trti2)+++newtype TRTRI a = TRTRI {getTRTRI :: Char -> Char -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++trtri :: Class.Real a => Char -> Char -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+trtri = getTRTRI $ Class.switchReal (TRTRI S.trtri) (TRTRI D.trtri)+++newtype TRTRS a = TRTRS {getTRTRS :: Char -> Char -> Char -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)}++trtrs :: Class.Real a => Char -> Char -> Char -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO (Int)+trtrs = getTRTRS $ Class.switchReal (TRTRS S.trtrs) (TRTRS D.trtrs)+++newtype TRTTF a = TRTTF {getTRTTF :: Char -> Char -> Array (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Int)}++trttf :: Class.Real a => Char -> Char -> Array (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Int)+trttf = getTRTTF $ Class.switchReal (TRTTF S.trttf) (TRTTF D.trttf)+++newtype TRTTP a = TRTTP {getTRTTP :: Char -> Array (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Int)}++trttp :: Class.Real a => Char -> Array (ZeroInt,ZeroInt) a -> IO (Array ZeroInt a, Int)+trttp = getTRTTP $ Class.switchReal (TRTTP S.trttp) (TRTTP D.trttp)+++newtype TZRZF a = TZRZF {getTZRZF :: Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Int)}++tzrzf :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Array ZeroInt a, Int)+tzrzf = getTZRZF $ Class.switchReal (TZRZF S.tzrzf) (TZRZF D.tzrzf)+++newtype ORG2L a = ORG2L {getORG2L :: Int -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IO (Int)}++org2l :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IO (Int)+org2l = getORG2L $ Class.switchReal (ORG2L S.org2l) (ORG2L D.org2l)+++newtype ORG2R a = ORG2R {getORG2R :: Int -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IO (Int)}++org2r :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IO (Int)+org2r = getORG2R $ Class.switchReal (ORG2R S.org2r) (ORG2R D.org2r)+++newtype ORGBR a = ORGBR {getORGBR :: Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> Int -> IO (Int)}++orgbr :: Class.Real a => Char -> Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> Int -> IO (Int)+orgbr = getORGBR $ Class.switchReal (ORGBR S.orgbr) (ORGBR D.orgbr)+++newtype ORGHR a = ORGHR {getORGHR :: Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> Int -> IO (Int)}++orghr :: Class.Real a => Int -> Int -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> Int -> IO (Int)+orghr = getORGHR $ Class.switchReal (ORGHR S.orghr) (ORGHR D.orghr)+++newtype ORGL2 a = ORGL2 {getORGL2 :: Int -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IO (Int)}++orgl2 :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IO (Int)+orgl2 = getORGL2 $ Class.switchReal (ORGL2 S.orgl2) (ORGL2 D.orgl2)+++newtype ORGLQ a = ORGLQ {getORGLQ :: Int -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> Int -> IO (Int)}++orglq :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> Int -> IO (Int)+orglq = getORGLQ $ Class.switchReal (ORGLQ S.orglq) (ORGLQ D.orglq)+++newtype ORGQL a = ORGQL {getORGQL :: Int -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> Int -> IO (Int)}++orgql :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> Int -> IO (Int)+orgql = getORGQL $ Class.switchReal (ORGQL S.orgql) (ORGQL D.orgql)+++newtype ORGQR a = ORGQR {getORGQR :: Int -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> Int -> IO (Int)}++orgqr :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> Int -> IO (Int)+orgqr = getORGQR $ Class.switchReal (ORGQR S.orgqr) (ORGQR D.orgqr)+++newtype ORGR2 a = ORGR2 {getORGR2 :: Int -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IO (Int)}++orgr2 :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IO (Int)+orgr2 = getORGR2 $ Class.switchReal (ORGR2 S.orgr2) (ORGR2 D.orgr2)+++newtype ORGRQ a = ORGRQ {getORGRQ :: Int -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> Int -> IO (Int)}++orgrq :: Class.Real a => Int -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> Int -> IO (Int)+orgrq = getORGRQ $ Class.switchReal (ORGRQ S.orgrq) (ORGRQ D.orgrq)+++newtype ORGTR a = ORGTR {getORGTR :: Char -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> Int -> IO (Int)}++orgtr :: Class.Real a => Char -> IOArray (ZeroInt,ZeroInt) a -> Array ZeroInt a -> Int -> IO (Int)+orgtr = getORGTR $ Class.switchReal (ORGTR S.orgtr) (ORGTR D.orgtr)+++newtype ORM2L a = ORM2L {getORM2L :: Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)}++orm2l :: Class.Real a => Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)+orm2l = getORM2L $ Class.switchReal (ORM2L S.orm2l) (ORM2L D.orm2l)+++newtype ORM2R a = ORM2R {getORM2R :: Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)}++orm2r :: Class.Real a => Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)+orm2r = getORM2R $ Class.switchReal (ORM2R S.orm2r) (ORM2R D.orm2r)+++newtype ORMBR a = ORMBR {getORMBR :: Char -> Char -> Char -> Int -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)}++ormbr :: Class.Real a => Char -> Char -> Char -> Int -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)+ormbr = getORMBR $ Class.switchReal (ORMBR S.ormbr) (ORMBR D.ormbr)+++newtype ORMHR a = ORMHR {getORMHR :: Char -> Char -> Int -> Int -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)}++ormhr :: Class.Real a => Char -> Char -> Int -> Int -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)+ormhr = getORMHR $ Class.switchReal (ORMHR S.ormhr) (ORMHR D.ormhr)+++newtype ORML2 a = ORML2 {getORML2 :: Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)}++orml2 :: Class.Real a => Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)+orml2 = getORML2 $ Class.switchReal (ORML2 S.orml2) (ORML2 D.orml2)+++newtype ORMLQ a = ORMLQ {getORMLQ :: Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)}++ormlq :: Class.Real a => Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)+ormlq = getORMLQ $ Class.switchReal (ORMLQ S.ormlq) (ORMLQ D.ormlq)+++newtype ORMQL a = ORMQL {getORMQL :: Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)}++ormql :: Class.Real a => Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)+ormql = getORMQL $ Class.switchReal (ORMQL S.ormql) (ORMQL D.ormql)+++newtype ORMQR a = ORMQR {getORMQR :: Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)}++ormqr :: Class.Real a => Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)+ormqr = getORMQR $ Class.switchReal (ORMQR S.ormqr) (ORMQR D.ormqr)+++newtype ORMR2 a = ORMR2 {getORMR2 :: Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)}++ormr2 :: Class.Real a => Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)+ormr2 = getORMR2 $ Class.switchReal (ORMR2 S.ormr2) (ORMR2 D.ormr2)+++newtype ORMR3 a = ORMR3 {getORMR3 :: Char -> Char -> Int -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)}++ormr3 :: Class.Real a => Char -> Char -> Int -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)+ormr3 = getORMR3 $ Class.switchReal (ORMR3 S.ormr3) (ORMR3 D.ormr3)+++newtype ORMRQ a = ORMRQ {getORMRQ :: Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)}++ormrq :: Class.Real a => Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)+ormrq = getORMRQ $ Class.switchReal (ORMRQ S.ormrq) (ORMRQ D.ormrq)+++newtype ORMRZ a = ORMRZ {getORMRZ :: Char -> Char -> Int -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)}++ormrz :: Class.Real a => Char -> Char -> Int -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)+ormrz = getORMRZ $ Class.switchReal (ORMRZ S.ormrz) (ORMRZ D.ormrz)+++newtype ORMTR a = ORMTR {getORMTR :: Char -> Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)}++ormtr :: Class.Real a => Char -> Char -> Char -> Int -> Array (ZeroInt,ZeroInt) a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)+ormtr = getORMTR $ Class.switchReal (ORMTR S.ormtr) (ORMTR D.ormtr)+++newtype OPGTR a = OPGTR {getOPGTR :: Char -> Int -> Array ZeroInt a -> Array ZeroInt a -> Int -> IO (Array (ZeroInt,ZeroInt) a, Int)}++opgtr :: Class.Real a => Char -> Int -> Array ZeroInt a -> Array ZeroInt a -> Int -> IO (Array (ZeroInt,ZeroInt) a, Int)+opgtr = getOPGTR $ Class.switchReal (OPGTR S.opgtr) (OPGTR D.opgtr)+++newtype OPMTR a = OPMTR {getOPMTR :: Char -> Char -> Char -> Int -> Array ZeroInt a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)}++opmtr :: Class.Real a => Char -> Char -> Char -> Int -> Array ZeroInt a -> Array ZeroInt a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO (Int)+opmtr = getOPMTR $ Class.switchReal (OPMTR S.opmtr) (OPMTR D.opmtr)