diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,29 @@
+Copyright (c) <2009>, <Maurício C. Antunes>
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+    * Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+
+    * 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.
+
+    * Neither the name of the author nor the names of contributors
+    may be used to endorse or promote products derived from this
+    software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT
+OWNER 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.
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import Distribution.Simple
+main = defaultMain
diff --git a/bindings-gsl.cabal b/bindings-gsl.cabal
new file mode 100644
--- /dev/null
+++ b/bindings-gsl.cabal
@@ -0,0 +1,90 @@
+cabal-version: >= 1.8
+name: bindings-gsl
+synopsis:
+  Low level bindings to GNU GSL.
+description:
+  Low level bindings to GNU GSL, part
+  of the @bindings-*@ project. See:
+  .
+  <http://bitbucket.org/mauricio/bindings-dsl>
+  .
+  <http://www.gnu.org/software/gsl>
+version: 0.2.1
+license: BSD3
+license-file: LICENSE
+maintainer: Maurício C. Antunes <mauricio.antunes@gmail.com>
+author: Maurício C. Antunes
+build-type: Simple
+category: FFI
+bug-reports: http://bitbucket.org/mauricio/bindings-dsl/issues
+library
+  hs-source-dirs: src
+  extensions:
+    ForeignFunctionInterface
+  build-depends:
+    base >= 3 && < 5,
+    bindings-DSL >= 1.0.17 && < 1.1
+  exposed-modules:
+    Bindings.Gsl
+    Bindings.Gsl.BasisSplines
+    Bindings.Gsl.BlasSupport
+    Bindings.Gsl.Cblas
+    Bindings.Gsl.ChebyshevApproximations
+    Bindings.Gsl.Combinations
+    Bindings.Gsl.ComplexNumbers
+    Bindings.Gsl.DiscreteHankelTransforms
+    Bindings.Gsl.Eigensystems
+    Bindings.Gsl.ErrorHandling
+    Bindings.Gsl.FastFourierTransforms
+    Bindings.Gsl.Histograms
+    Bindings.Gsl.IeeeFloatingPointArithmetic
+    Bindings.Gsl.Interpolation
+    Bindings.Gsl.LeastSquaresFitting
+    Bindings.Gsl.LinearAlgebra
+    Bindings.Gsl.MathematicalFunctions
+    Bindings.Gsl.MonteCarloIntegration
+    Bindings.Gsl.MultidimensionalMinimization
+    Bindings.Gsl.MultidimensionalRootFinding
+    Bindings.Gsl.NTuples
+    Bindings.Gsl.NonlinearLeastSquaresFitting
+    Bindings.Gsl.NumericalDifferentiation
+    Bindings.Gsl.NumericalIntegration
+    Bindings.Gsl.OneDimensionalMinimization
+    Bindings.Gsl.OneDimensionalRootFinding
+    Bindings.Gsl.OrdinaryDifferentialEquations
+    Bindings.Gsl.Permutations
+    Bindings.Gsl.PhysicalConstants
+    Bindings.Gsl.Polynomials
+    Bindings.Gsl.QuasiRandomSequences
+    Bindings.Gsl.RandomNumberDistributions
+    Bindings.Gsl.RandomNumberGeneration
+    Bindings.Gsl.SeriesAcceleration
+    Bindings.Gsl.SimulatedAnnealing
+    Bindings.Gsl.Sorting
+    Bindings.Gsl.SpecialFunctions
+    Bindings.Gsl.Statistics
+    Bindings.Gsl.VectorsAndMatrices.Blocks
+    Bindings.Gsl.VectorsAndMatrices.DataTypes
+    Bindings.Gsl.VectorsAndMatrices.Matrices
+    Bindings.Gsl.VectorsAndMatrices.Vectors
+    Bindings.Gsl.Version
+    Bindings.Gsl.WaveletTransforms
+    Bindings.Gsl.Multisets
+  c-sources:
+    src/Bindings/Gsl/ErrorHandling.c
+    src/Bindings/Gsl/MathematicalFunctions.c
+    src/Bindings/Gsl/MonteCarloIntegration.c
+    src/Bindings/Gsl/MultidimensionalMinimization.c
+    src/Bindings/Gsl/MultidimensionalRootFinding.c
+    src/Bindings/Gsl/Multisets.c
+    src/Bindings/Gsl/NonlinearLeastSquaresFitting.c
+    src/Bindings/Gsl/OrdinaryDifferentialEquations.c
+    src/Bindings/Gsl/SpecialFunctions.c
+    src/Bindings/Gsl/VectorsAndMatrices/Vectors.c
+    src/Bindings/Gsl/Version.c
+  pkgconfig-depends: gsl >= 1.15
+source-repository head
+  type: git
+  location: https://bitbucket.org/mauricio/bindings-dsl
+  branch: master
+  subdir: bindings-gsl
diff --git a/src/Bindings/Gsl.hs b/src/Bindings/Gsl.hs
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl.hs
@@ -0,0 +1,90 @@
+module Bindings.Gsl (
+	module Bindings.Gsl.BasisSplines,
+	module Bindings.Gsl.BlasSupport,
+	module Bindings.Gsl.Cblas,
+	module Bindings.Gsl.ChebyshevApproximations,
+	module Bindings.Gsl.Combinations,
+	module Bindings.Gsl.ComplexNumbers,
+	module Bindings.Gsl.DiscreteHankelTransforms,
+	module Bindings.Gsl.Eigensystems,
+	module Bindings.Gsl.ErrorHandling,
+	module Bindings.Gsl.FastFourierTransforms,
+	module Bindings.Gsl.Histograms,
+	module Bindings.Gsl.IeeeFloatingPointArithmetic,
+	module Bindings.Gsl.Interpolation,
+	module Bindings.Gsl.LeastSquaresFitting,
+	module Bindings.Gsl.LinearAlgebra,
+	module Bindings.Gsl.MathematicalFunctions,
+	module Bindings.Gsl.MonteCarloIntegration,
+	module Bindings.Gsl.MultidimensionalMinimization,
+	module Bindings.Gsl.MultidimensionalRootFinding,
+	module Bindings.Gsl.NTuples,
+	module Bindings.Gsl.NonlinearLeastSquaresFitting,
+	module Bindings.Gsl.NumericalDifferentiation,
+	module Bindings.Gsl.NumericalIntegration,
+	module Bindings.Gsl.OneDimensionalMinimization,
+	module Bindings.Gsl.OneDimensionalRootFinding,
+	module Bindings.Gsl.OrdinaryDifferentialEquations,
+	module Bindings.Gsl.Permutations,
+	module Bindings.Gsl.PhysicalConstants,
+	module Bindings.Gsl.Polynomials,
+	module Bindings.Gsl.QuasiRandomSequences,
+	module Bindings.Gsl.RandomNumberDistributions,
+	module Bindings.Gsl.RandomNumberGeneration,
+	module Bindings.Gsl.SeriesAcceleration,
+	module Bindings.Gsl.SimulatedAnnealing,
+	module Bindings.Gsl.Sorting,
+	module Bindings.Gsl.SpecialFunctions,
+	module Bindings.Gsl.Statistics,
+	module Bindings.Gsl.VectorsAndMatrices.Blocks,
+	module Bindings.Gsl.VectorsAndMatrices.DataTypes,
+	module Bindings.Gsl.VectorsAndMatrices.Matrices,
+	module Bindings.Gsl.VectorsAndMatrices.Vectors,
+	module Bindings.Gsl.Version,
+	module Bindings.Gsl.WaveletTransforms,
+	module Bindings.Gsl.Multisets
+  ) where
+import Bindings.Gsl.BasisSplines
+import Bindings.Gsl.BlasSupport
+import Bindings.Gsl.Cblas
+import Bindings.Gsl.ChebyshevApproximations
+import Bindings.Gsl.Combinations
+import Bindings.Gsl.ComplexNumbers
+import Bindings.Gsl.DiscreteHankelTransforms
+import Bindings.Gsl.Eigensystems
+import Bindings.Gsl.ErrorHandling
+import Bindings.Gsl.FastFourierTransforms
+import Bindings.Gsl.Histograms
+import Bindings.Gsl.IeeeFloatingPointArithmetic
+import Bindings.Gsl.Interpolation
+import Bindings.Gsl.LeastSquaresFitting
+import Bindings.Gsl.LinearAlgebra
+import Bindings.Gsl.MathematicalFunctions
+import Bindings.Gsl.MonteCarloIntegration
+import Bindings.Gsl.MultidimensionalMinimization
+import Bindings.Gsl.MultidimensionalRootFinding
+import Bindings.Gsl.NTuples
+import Bindings.Gsl.NonlinearLeastSquaresFitting
+import Bindings.Gsl.NumericalDifferentiation
+import Bindings.Gsl.NumericalIntegration
+import Bindings.Gsl.OneDimensionalMinimization
+import Bindings.Gsl.OneDimensionalRootFinding
+import Bindings.Gsl.OrdinaryDifferentialEquations
+import Bindings.Gsl.Permutations
+import Bindings.Gsl.PhysicalConstants
+import Bindings.Gsl.Polynomials
+import Bindings.Gsl.QuasiRandomSequences
+import Bindings.Gsl.RandomNumberDistributions
+import Bindings.Gsl.RandomNumberGeneration
+import Bindings.Gsl.SeriesAcceleration
+import Bindings.Gsl.SimulatedAnnealing
+import Bindings.Gsl.Sorting
+import Bindings.Gsl.SpecialFunctions
+import Bindings.Gsl.Statistics
+import Bindings.Gsl.VectorsAndMatrices.Blocks
+import Bindings.Gsl.VectorsAndMatrices.DataTypes
+import Bindings.Gsl.VectorsAndMatrices.Matrices
+import Bindings.Gsl.VectorsAndMatrices.Vectors
+import Bindings.Gsl.Version
+import Bindings.Gsl.WaveletTransforms
+import Bindings.Gsl.Multisets
diff --git a/src/Bindings/Gsl/BasisSplines.hsc b/src/Bindings/Gsl/BasisSplines.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/BasisSplines.hsc
@@ -0,0 +1,42 @@
+#include <bindings.dsl.h>
+#include <gsl/gsl_bspline.h>
+
+-- | <http://www.gnu.org/software/gsl/manual/html_node/Basis-Splines.html>
+
+module Bindings.Gsl.BasisSplines where
+#strict_import
+import Bindings.Gsl.VectorsAndMatrices.DataTypes
+
+#starttype gsl_bspline_workspace
+#field k , CSize
+#field km1 , CSize
+#field l , CSize
+#field nbreak , CSize
+#field n , CSize
+#field knots , Ptr <gsl_vector>
+#field deltal , Ptr <gsl_vector>
+#field deltar , Ptr <gsl_vector>
+#field B , Ptr <gsl_vector>
+#stoptype
+
+#starttype gsl_bspline_deriv_workspace
+#field k , CSize
+#field A , Ptr <gsl_matrix>
+#field dB , Ptr <gsl_matrix>
+#stoptype
+
+#ccall gsl_bspline_alloc , CSize -> CSize -> IO (Ptr <gsl_bspline_workspace>)
+#ccall gsl_bspline_free , Ptr <gsl_bspline_workspace> -> IO ()
+#ccall gsl_bspline_ncoeffs , Ptr <gsl_bspline_workspace> -> IO CSize
+#ccall gsl_bspline_order , Ptr <gsl_bspline_workspace> -> IO CSize
+#ccall gsl_bspline_nbreak , Ptr <gsl_bspline_workspace> -> IO CSize
+#ccall gsl_bspline_breakpoint , CSize -> Ptr <gsl_bspline_workspace> -> IO CDouble
+#ccall gsl_bspline_knots , Ptr <gsl_vector> -> Ptr <gsl_bspline_workspace> -> IO CInt
+#ccall gsl_bspline_knots_uniform , CDouble -> CDouble -> Ptr <gsl_bspline_workspace> -> IO CInt
+#ccall gsl_bspline_eval , CDouble -> Ptr <gsl_vector> -> Ptr <gsl_bspline_workspace> -> IO CInt
+#ccall gsl_bspline_eval_nonzero , CDouble -> Ptr <gsl_vector> -> Ptr CSize -> Ptr CSize -> Ptr <gsl_bspline_workspace> -> IO CInt
+#ccall gsl_bspline_deriv_alloc , CSize -> IO (Ptr <gsl_bspline_deriv_workspace>)
+#ccall gsl_bspline_deriv_free , Ptr <gsl_bspline_deriv_workspace> -> IO ()
+#ccall gsl_bspline_deriv_eval , CDouble -> CSize -> Ptr <gsl_matrix> -> Ptr <gsl_bspline_workspace> -> Ptr <gsl_bspline_deriv_workspace> -> IO CInt
+#ccall gsl_bspline_deriv_eval_nonzero , CDouble -> CSize -> Ptr <gsl_matrix> -> Ptr CSize -> Ptr CSize -> Ptr <gsl_bspline_workspace> -> Ptr <gsl_bspline_deriv_workspace> -> IO CInt
+
diff --git a/src/Bindings/Gsl/BlasSupport.hsc b/src/Bindings/Gsl/BlasSupport.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/BlasSupport.hsc
@@ -0,0 +1,124 @@
+#include <bindings.dsl.h>
+#include <gsl/gsl_blas.h>
+
+-- | <http://www.gnu.org/software/gsl/manual/html_node/BLAS-Support.html>
+
+module Bindings.Gsl.BlasSupport where
+#strict_import
+import Bindings.Gsl.ComplexNumbers
+import Bindings.Gsl.VectorsAndMatrices.DataTypes
+
+#integral_t CBLAS_INDEX_t
+#integral_t CBLAS_ORDER_t
+#integral_t CBLAS_TRANSPOSE_t
+#integral_t CBLAS_UPLO_t
+#integral_t CBLAS_DIAG_t
+#integral_t CBLAS_SIDE_t
+
+#ccall gsl_blas_sdsdot , CFloat -> Ptr <gsl_vector_float> -> Ptr <gsl_vector_float> -> Ptr CFloat  -> IO CInt
+#ccall gsl_blas_dsdot , Ptr <gsl_vector_float> -> Ptr <gsl_vector_float> -> Ptr CDouble  -> IO CInt
+#ccall gsl_blas_sdot , Ptr <gsl_vector_float> -> Ptr <gsl_vector_float> -> Ptr CFloat  -> IO CInt
+#ccall gsl_blas_ddot , Ptr <gsl_vector> -> Ptr <gsl_vector> -> Ptr CDouble  -> IO CInt
+#ccall gsl_blas_cdotu , Ptr <gsl_vector_complex_float> -> Ptr <gsl_vector_complex_float> -> Ptr <gsl_complex_float> -> IO CInt
+#ccall gsl_blas_cdotc , Ptr <gsl_vector_complex_float> -> Ptr <gsl_vector_complex_float> -> Ptr <gsl_complex_float> -> IO CInt
+#ccall gsl_blas_zdotu , Ptr <gsl_vector_complex> -> Ptr <gsl_vector_complex> -> Ptr <gsl_complex> -> IO CInt
+#ccall gsl_blas_zdotc , Ptr <gsl_vector_complex> -> Ptr <gsl_vector_complex> -> Ptr <gsl_complex> -> IO CInt
+#ccall gsl_blas_snrm2 , Ptr <gsl_vector_float> -> IO CFloat
+#ccall gsl_blas_sasum , Ptr <gsl_vector_float> -> IO CFloat
+#ccall gsl_blas_dnrm2 , Ptr <gsl_vector> -> IO CDouble
+#ccall gsl_blas_dasum , Ptr <gsl_vector> -> IO CDouble
+#ccall gsl_blas_scnrm2 , Ptr <gsl_vector_complex_float> -> IO CFloat
+#ccall gsl_blas_scasum , Ptr <gsl_vector_complex_float> -> IO CFloat
+#ccall gsl_blas_dznrm2 , Ptr <gsl_vector_complex> -> IO CDouble
+#ccall gsl_blas_dzasum , Ptr <gsl_vector_complex> -> IO CDouble
+#ccall gsl_blas_isamax , Ptr <gsl_vector_float> -> IO <CBLAS_INDEX_t>
+#ccall gsl_blas_idamax , Ptr <gsl_vector> -> IO <CBLAS_INDEX_t>
+#ccall gsl_blas_icamax , Ptr <gsl_vector_complex_float> -> IO <CBLAS_INDEX_t>
+#ccall gsl_blas_izamax , Ptr <gsl_vector_complex> -> IO <CBLAS_INDEX_t>
+#ccall gsl_blas_sswap , Ptr <gsl_vector_float> -> Ptr <gsl_vector_float> -> IO CInt
+#ccall gsl_blas_scopy , Ptr <gsl_vector_float> -> Ptr <gsl_vector_float> -> IO CInt
+#ccall gsl_blas_saxpy , CFloat -> Ptr <gsl_vector_float> -> Ptr <gsl_vector_float> -> IO CInt
+#ccall gsl_blas_dswap , Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_blas_dcopy , Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_blas_daxpy , CDouble -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_blas_cswap , Ptr <gsl_vector_complex_float> -> Ptr <gsl_vector_complex_float> -> IO CInt
+#ccall gsl_blas_ccopy , Ptr <gsl_vector_complex_float> -> Ptr <gsl_vector_complex_float> -> IO CInt
+-- ccall gsl_blas_caxpy , <gsl_complex_float> -> Ptr <gsl_vector_complex_float> -> Ptr <gsl_vector_complex_float> -> IO CInt
+#ccall gsl_blas_zswap , Ptr <gsl_vector_complex> -> Ptr <gsl_vector_complex> -> IO CInt
+#ccall gsl_blas_zcopy , Ptr <gsl_vector_complex> -> Ptr <gsl_vector_complex> -> IO CInt
+-- ccall gsl_blas_zaxpy , <gsl_complex> -> Ptr <gsl_vector_complex> -> Ptr <gsl_vector_complex> -> IO CInt
+#ccall gsl_blas_srotg , Ptr CFloat -> Ptr CFloat -> Ptr CFloat -> Ptr CFloat -> IO CInt
+#ccall gsl_blas_srotmg , Ptr CFloat -> Ptr CFloat -> Ptr CFloat -> CFloat -> Ptr CFloat -> IO CInt
+#ccall gsl_blas_srot , Ptr <gsl_vector_float> -> Ptr <gsl_vector_float> -> CFloat -> CFloat -> IO CInt
+#ccall gsl_blas_srotm , Ptr <gsl_vector_float> -> Ptr <gsl_vector_float> -> Ptr CFloat -> IO CInt
+#ccall gsl_blas_drotg , Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_blas_drotmg , Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_blas_drot , Ptr <gsl_vector> -> Ptr <gsl_vector> -> CDouble -> CDouble -> IO CInt
+#ccall gsl_blas_drotm , Ptr <gsl_vector> -> Ptr <gsl_vector> -> Ptr CDouble -> IO CInt
+#ccall gsl_blas_sscal , CFloat -> Ptr <gsl_vector_float> -> IO ()
+#ccall gsl_blas_dscal , CDouble -> Ptr <gsl_vector> -> IO ()
+-- ccall gsl_blas_cscal , <gsl_complex_float> -> Ptr <gsl_vector_complex_float> -> IO ()
+-- ccall gsl_blas_zscal , <gsl_complex> -> Ptr <gsl_vector_complex> -> IO ()
+#ccall gsl_blas_csscal , CFloat -> Ptr <gsl_vector_complex_float> -> IO ()
+#ccall gsl_blas_zdscal , CDouble -> Ptr <gsl_vector_complex> -> IO ()
+#ccall gsl_blas_sgemv , <CBLAS_TRANSPOSE_t> -> CFloat -> Ptr <gsl_matrix_float> -> Ptr <gsl_vector_float> -> CFloat -> Ptr <gsl_vector_float> -> IO CInt
+#ccall gsl_blas_strmv , <CBLAS_UPLO_t> -> <CBLAS_TRANSPOSE_t> -> <CBLAS_DIAG_t> -> Ptr <gsl_matrix_float> -> Ptr <gsl_vector_float> -> IO CInt
+#ccall gsl_blas_strsv , <CBLAS_UPLO_t> -> <CBLAS_TRANSPOSE_t> -> <CBLAS_DIAG_t> -> Ptr <gsl_matrix_float> -> Ptr <gsl_vector_float> -> IO CInt
+#ccall gsl_blas_dgemv , <CBLAS_TRANSPOSE_t> -> CDouble -> Ptr <gsl_matrix> -> Ptr <gsl_vector> -> CDouble -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_blas_dtrmv , <CBLAS_UPLO_t> -> <CBLAS_TRANSPOSE_t> -> <CBLAS_DIAG_t> -> Ptr <gsl_matrix> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_blas_dtrsv , <CBLAS_UPLO_t> -> <CBLAS_TRANSPOSE_t> -> <CBLAS_DIAG_t> -> Ptr <gsl_matrix> -> Ptr <gsl_vector> -> IO CInt
+-- ccall gsl_blas_cgemv , <CBLAS_TRANSPOSE_t> -> <gsl_complex_float> -> Ptr <gsl_matrix_complex_float> -> Ptr <gsl_vector_complex_float> -> <gsl_complex_float> -> Ptr <gsl_vector_complex_float> -> IO CInt
+#ccall gsl_blas_ctrmv , <CBLAS_UPLO_t> -> <CBLAS_TRANSPOSE_t> -> <CBLAS_DIAG_t> -> Ptr <gsl_matrix_complex_float> -> Ptr <gsl_vector_complex_float> -> IO CInt
+#ccall gsl_blas_ctrsv , <CBLAS_UPLO_t> -> <CBLAS_TRANSPOSE_t> -> <CBLAS_DIAG_t> -> Ptr <gsl_matrix_complex_float> -> Ptr <gsl_vector_complex_float> -> IO CInt
+-- ccall gsl_blas_zgemv , <CBLAS_TRANSPOSE_t> -> <gsl_complex> -> Ptr <gsl_matrix_complex> -> Ptr <gsl_vector_complex> -> <gsl_complex> -> Ptr <gsl_vector_complex> -> IO CInt
+#ccall gsl_blas_ztrmv , <CBLAS_UPLO_t> -> <CBLAS_TRANSPOSE_t> -> <CBLAS_DIAG_t> -> Ptr <gsl_matrix_complex> -> Ptr <gsl_vector_complex> -> IO CInt
+#ccall gsl_blas_ztrsv , <CBLAS_UPLO_t> -> <CBLAS_TRANSPOSE_t> -> <CBLAS_DIAG_t> -> Ptr <gsl_matrix_complex> -> Ptr <gsl_vector_complex> -> IO CInt
+#ccall gsl_blas_ssymv , <CBLAS_UPLO_t> -> CFloat -> Ptr <gsl_matrix_float> -> Ptr <gsl_vector_float> -> CFloat -> Ptr <gsl_vector_float> -> IO CInt
+#ccall gsl_blas_sger , CFloat -> Ptr <gsl_vector_float> -> Ptr <gsl_vector_float> -> Ptr <gsl_matrix_float> -> IO CInt
+#ccall gsl_blas_ssyr , <CBLAS_UPLO_t> -> CFloat -> Ptr <gsl_vector_float> -> Ptr <gsl_matrix_float> -> IO CInt
+#ccall gsl_blas_ssyr2 , <CBLAS_UPLO_t> -> CFloat -> Ptr <gsl_vector_float> -> Ptr <gsl_vector_float> -> Ptr <gsl_matrix_float> -> IO CInt
+#ccall gsl_blas_dsymv , <CBLAS_UPLO_t> -> CDouble -> Ptr <gsl_matrix> -> Ptr <gsl_vector> -> CDouble -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_blas_dger , CDouble -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> Ptr <gsl_matrix> -> IO CInt
+#ccall gsl_blas_dsyr , <CBLAS_UPLO_t> -> CDouble -> Ptr <gsl_vector> -> Ptr <gsl_matrix> -> IO CInt
+#ccall gsl_blas_dsyr2 , <CBLAS_UPLO_t> -> CDouble -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> Ptr <gsl_matrix> -> IO CInt
+-- ccall gsl_blas_chemv , <CBLAS_UPLO_t> -> <gsl_complex_float> -> Ptr <gsl_matrix_complex_float> -> Ptr <gsl_vector_complex_float> -> <gsl_complex_float> -> Ptr <gsl_vector_complex_float> -> IO CInt
+-- ccall gsl_blas_cgeru , <gsl_complex_float> -> Ptr <gsl_vector_complex_float> -> Ptr <gsl_vector_complex_float> -> Ptr <gsl_matrix_complex_float> -> IO CInt
+-- ccall gsl_blas_cgerc , <gsl_complex_float> -> Ptr <gsl_vector_complex_float> -> Ptr <gsl_vector_complex_float> -> Ptr <gsl_matrix_complex_float> -> IO CInt
+#ccall gsl_blas_cher , <CBLAS_UPLO_t> -> CFloat -> Ptr <gsl_vector_complex_float> -> Ptr <gsl_matrix_complex_float> -> IO CInt
+-- ccall gsl_blas_cher2 , <CBLAS_UPLO_t> -> <gsl_complex_float> -> Ptr <gsl_vector_complex_float> -> Ptr <gsl_vector_complex_float> -> Ptr <gsl_matrix_complex_float> -> IO CInt
+-- ccall gsl_blas_zhemv , <CBLAS_UPLO_t> -> <gsl_complex> -> Ptr <gsl_matrix_complex> -> Ptr <gsl_vector_complex> -> <gsl_complex> -> Ptr <gsl_vector_complex> -> IO CInt
+-- ccall gsl_blas_zgeru , <gsl_complex> -> Ptr <gsl_vector_complex> -> Ptr <gsl_vector_complex> -> Ptr <gsl_matrix_complex> -> IO CInt
+-- ccall gsl_blas_zgerc , <gsl_complex> -> Ptr <gsl_vector_complex> -> Ptr <gsl_vector_complex> -> Ptr <gsl_matrix_complex> -> IO CInt
+#ccall gsl_blas_zher , <CBLAS_UPLO_t> -> CDouble -> Ptr <gsl_vector_complex> -> Ptr <gsl_matrix_complex> -> IO CInt
+-- ccall gsl_blas_zher2 , <CBLAS_UPLO_t> -> <gsl_complex> -> Ptr <gsl_vector_complex> -> Ptr <gsl_vector_complex> -> Ptr <gsl_matrix_complex> -> IO CInt
+#ccall gsl_blas_sgemm , <CBLAS_TRANSPOSE_t> -> <CBLAS_TRANSPOSE_t> -> CFloat -> Ptr <gsl_matrix_float> -> Ptr <gsl_matrix_float> -> CFloat -> Ptr <gsl_matrix_float> -> IO CInt
+#ccall gsl_blas_ssymm , <CBLAS_SIDE_t> -> <CBLAS_UPLO_t> -> CFloat -> Ptr <gsl_matrix_float> -> Ptr <gsl_matrix_float> -> CFloat -> Ptr <gsl_matrix_float> -> IO CInt
+#ccall gsl_blas_ssyrk , <CBLAS_UPLO_t> -> <CBLAS_TRANSPOSE_t> -> CFloat -> Ptr <gsl_matrix_float> -> CFloat -> Ptr <gsl_matrix_float> -> IO CInt
+#ccall gsl_blas_ssyr2k , <CBLAS_UPLO_t> -> <CBLAS_TRANSPOSE_t> -> CFloat -> Ptr <gsl_matrix_float> -> Ptr <gsl_matrix_float> -> CFloat -> Ptr <gsl_matrix_float> -> IO CInt
+#ccall gsl_blas_strmm , <CBLAS_SIDE_t> -> <CBLAS_UPLO_t> -> <CBLAS_TRANSPOSE_t> -> <CBLAS_DIAG_t> -> CFloat -> Ptr <gsl_matrix_float> -> Ptr <gsl_matrix_float> -> IO CInt
+#ccall gsl_blas_strsm , <CBLAS_SIDE_t> -> <CBLAS_UPLO_t> -> <CBLAS_TRANSPOSE_t> -> <CBLAS_DIAG_t> -> CFloat -> Ptr <gsl_matrix_float> -> Ptr <gsl_matrix_float> -> IO CInt
+#ccall gsl_blas_dgemm , <CBLAS_TRANSPOSE_t> -> <CBLAS_TRANSPOSE_t> -> CDouble -> Ptr <gsl_matrix> -> Ptr <gsl_matrix> -> CDouble -> Ptr <gsl_matrix> -> IO CInt
+#ccall gsl_blas_dsymm , <CBLAS_SIDE_t> -> <CBLAS_UPLO_t> -> CDouble -> Ptr <gsl_matrix> -> Ptr <gsl_matrix> -> CDouble -> Ptr <gsl_matrix> -> IO CInt
+#ccall gsl_blas_dsyrk , <CBLAS_UPLO_t> -> <CBLAS_TRANSPOSE_t> -> CDouble -> Ptr <gsl_matrix> -> CDouble -> Ptr <gsl_matrix> -> IO CInt
+#ccall gsl_blas_dsyr2k , <CBLAS_UPLO_t> -> <CBLAS_TRANSPOSE_t> -> CDouble -> Ptr <gsl_matrix> -> Ptr <gsl_matrix> -> CDouble -> Ptr <gsl_matrix> -> IO CInt
+#ccall gsl_blas_dtrmm , <CBLAS_SIDE_t> -> <CBLAS_UPLO_t> -> <CBLAS_TRANSPOSE_t> -> <CBLAS_DIAG_t> -> CDouble -> Ptr <gsl_matrix> -> Ptr <gsl_matrix> -> IO CInt
+#ccall gsl_blas_dtrsm , <CBLAS_SIDE_t> -> <CBLAS_UPLO_t> -> <CBLAS_TRANSPOSE_t> -> <CBLAS_DIAG_t> -> CDouble -> Ptr <gsl_matrix> -> Ptr <gsl_matrix> -> IO CInt
+-- ccall gsl_blas_cgemm , <CBLAS_TRANSPOSE_t> -> <CBLAS_TRANSPOSE_t> -> <gsl_complex_float> -> Ptr <gsl_matrix_complex_float> -> Ptr <gsl_matrix_complex_float> -> <gsl_complex_float> -> Ptr <gsl_matrix_complex_float> -> IO CInt
+-- ccall gsl_blas_csymm , <CBLAS_SIDE_t> -> <CBLAS_UPLO_t> -> <gsl_complex_float> -> Ptr <gsl_matrix_complex_float> -> Ptr <gsl_matrix_complex_float> -> <gsl_complex_float> -> Ptr <gsl_matrix_complex_float> -> IO CInt
+-- ccall gsl_blas_csyrk , <CBLAS_UPLO_t> -> <CBLAS_TRANSPOSE_t> -> <gsl_complex_float> -> Ptr <gsl_matrix_complex_float> -> <gsl_complex_float> -> Ptr <gsl_matrix_complex_float> -> IO CInt
+-- ccall gsl_blas_csyr2k , <CBLAS_UPLO_t> -> <CBLAS_TRANSPOSE_t> -> <gsl_complex_float> -> Ptr <gsl_matrix_complex_float> -> Ptr <gsl_matrix_complex_float> -> <gsl_complex_float> -> Ptr <gsl_matrix_complex_float> -> IO CInt
+-- ccall gsl_blas_ctrmm , <CBLAS_SIDE_t> -> <CBLAS_UPLO_t> -> <CBLAS_TRANSPOSE_t> -> <CBLAS_DIAG_t> -> <gsl_complex_float> -> Ptr <gsl_matrix_complex_float> -> Ptr <gsl_matrix_complex_float> -> IO CInt
+-- ccall gsl_blas_ctrsm , <CBLAS_SIDE_t> -> <CBLAS_UPLO_t> -> <CBLAS_TRANSPOSE_t> -> <CBLAS_DIAG_t> -> <gsl_complex_float> -> Ptr <gsl_matrix_complex_float> -> Ptr <gsl_matrix_complex_float> -> IO CInt
+-- ccall gsl_blas_zgemm , <CBLAS_TRANSPOSE_t> -> <CBLAS_TRANSPOSE_t> -> <gsl_complex> -> Ptr <gsl_matrix_complex> -> Ptr <gsl_matrix_complex> -> <gsl_complex> -> Ptr <gsl_matrix_complex> -> IO CInt
+-- ccall gsl_blas_zsymm , <CBLAS_SIDE_t> -> <CBLAS_UPLO_t> -> <gsl_complex> -> Ptr <gsl_matrix_complex> -> Ptr <gsl_matrix_complex> -> <gsl_complex> -> Ptr <gsl_matrix_complex> -> IO CInt
+-- ccall gsl_blas_zsyrk , <CBLAS_UPLO_t> -> <CBLAS_TRANSPOSE_t> -> <gsl_complex> -> Ptr <gsl_matrix_complex> -> <gsl_complex> -> Ptr <gsl_matrix_complex> -> IO CInt
+-- ccall gsl_blas_zsyr2k , <CBLAS_UPLO_t> -> <CBLAS_TRANSPOSE_t> -> <gsl_complex> -> Ptr <gsl_matrix_complex> -> Ptr <gsl_matrix_complex> -> <gsl_complex> -> Ptr <gsl_matrix_complex> -> IO CInt
+-- ccall gsl_blas_ztrmm , <CBLAS_SIDE_t> -> <CBLAS_UPLO_t> -> <CBLAS_TRANSPOSE_t> -> <CBLAS_DIAG_t> -> <gsl_complex> -> Ptr <gsl_matrix_complex> -> Ptr <gsl_matrix_complex> -> IO CInt
+-- ccall gsl_blas_ztrsm , <CBLAS_SIDE_t> -> <CBLAS_UPLO_t> -> <CBLAS_TRANSPOSE_t> -> <CBLAS_DIAG_t> -> <gsl_complex> -> Ptr <gsl_matrix_complex> -> Ptr <gsl_matrix_complex> -> IO CInt
+-- ccall gsl_blas_chemm , <CBLAS_SIDE_t> -> <CBLAS_UPLO_t> -> <gsl_complex_float> -> Ptr <gsl_matrix_complex_float> -> Ptr <gsl_matrix_complex_float> -> <gsl_complex_float> -> Ptr <gsl_matrix_complex_float> -> IO CInt
+#ccall gsl_blas_cherk , <CBLAS_UPLO_t> -> <CBLAS_TRANSPOSE_t> -> CFloat -> Ptr <gsl_matrix_complex_float> -> CFloat -> Ptr <gsl_matrix_complex_float> -> IO CInt
+-- ccall gsl_blas_cher2k , <CBLAS_UPLO_t> -> <CBLAS_TRANSPOSE_t> -> <gsl_complex_float> -> Ptr <gsl_matrix_complex_float> -> Ptr <gsl_matrix_complex_float> -> CFloat -> Ptr <gsl_matrix_complex_float> -> IO CInt
+-- ccall gsl_blas_zhemm , <CBLAS_SIDE_t> -> <CBLAS_UPLO_t> -> <gsl_complex> -> Ptr <gsl_matrix_complex> -> Ptr <gsl_matrix_complex> -> <gsl_complex> -> Ptr <gsl_matrix_complex> -> IO CInt
+#ccall gsl_blas_zherk , <CBLAS_UPLO_t> -> <CBLAS_TRANSPOSE_t> -> CDouble -> Ptr <gsl_matrix_complex> -> CDouble -> Ptr <gsl_matrix_complex> -> IO CInt
+-- ccall gsl_blas_zher2k , <CBLAS_UPLO_t> -> <CBLAS_TRANSPOSE_t> -> <gsl_complex> -> Ptr <gsl_matrix_complex> -> Ptr <gsl_matrix_complex> -> CDouble -> Ptr <gsl_matrix_complex> -> IO CInt
+
diff --git a/src/Bindings/Gsl/Cblas.hsc b/src/Bindings/Gsl/Cblas.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/Cblas.hsc
@@ -0,0 +1,178 @@
+#include <bindings.dsl.h>
+#include <gsl/gsl_cblas.h>
+
+-- | <http://www.gnu.org/software/gsl/manual/html_node/GSL-CBLAS-Library.html>
+
+module Bindings.Gsl.Cblas where
+#strict_import
+
+#integral_t CBLAS_INDEX
+#integral_t enum CBLAS_ORDER
+
+#num CblasRowMajor
+#num CblasColMajor
+
+#integral_t enum CBLAS_TRANSPOSE
+
+#num CblasNoTrans
+#num CblasTrans
+#num CblasConjTrans
+
+#integral_t enum CBLAS_UPLO
+
+#num CblasUpper
+#num CblasLower
+
+#integral_t enum CBLAS_DIAG
+
+#num CblasNonUnit
+#num CblasUnit
+
+#integral_t enum CBLAS_SIDE
+
+#num CblasLeft
+#num CblasRight
+
+#ccall cblas_sdsdot , CInt -> CInt -> CFloat -> Ptr CFloat -> CInt -> CInt -> Ptr CFloat -> CInt -> IO CFloat
+#ccall cblas_dsdot , CInt -> CInt -> Ptr CFloat -> CInt -> CInt -> Ptr CFloat -> CInt -> IO CDouble
+#ccall cblas_sdot , CInt -> CInt -> Ptr CFloat -> CInt -> CInt -> Ptr CFloat -> CInt -> IO CFloat
+#ccall cblas_ddot , CInt -> CInt -> Ptr CDouble -> CInt -> CInt -> Ptr CDouble -> CInt -> IO CDouble
+#ccall cblas_cdotu_sub , CInt -> CInt -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> CInt -> Ptr () -> IO ()
+#ccall cblas_cdotc_sub , CInt -> CInt -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> CInt -> Ptr () -> IO ()
+#ccall cblas_zdotu_sub , CInt -> CInt -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> CInt -> Ptr () -> IO ()
+#ccall cblas_zdotc_sub , CInt -> CInt -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> CInt -> Ptr () -> IO ()
+#ccall cblas_snrm2 , CInt -> CInt -> Ptr CFloat -> CInt -> IO CFloat
+#ccall cblas_sasum , CInt -> CInt -> Ptr CFloat -> CInt -> IO CFloat
+#ccall cblas_dnrm2 , CInt -> CInt -> Ptr CDouble -> CInt -> IO CDouble
+#ccall cblas_dasum , CInt -> CInt -> Ptr CDouble -> CInt -> IO CDouble
+#ccall cblas_scnrm2 , CInt -> CInt -> Ptr () -> CInt -> IO CFloat
+#ccall cblas_scasum , CInt -> CInt -> Ptr () -> CInt -> IO CFloat
+#ccall cblas_dznrm2 , CInt -> CInt -> Ptr () -> CInt -> IO CDouble
+#ccall cblas_dzasum , CInt -> CInt -> Ptr () -> CInt -> IO CDouble
+-- #ccall cblas_isamax , CInt -> CInt -> Ptr CFloat -> CInt -> IO <CBLAS_INDEX>
+-- #ccall cblas_idamax , CInt -> CInt -> Ptr CDouble -> CInt -> IO <CBLAS_INDEX>
+-- #ccall cblas_icamax , CInt -> CInt -> Ptr () -> CInt -> IO <CBLAS_INDEX>
+-- #ccall cblas_izamax , CInt -> CInt -> Ptr () -> CInt -> IO <CBLAS_INDEX>
+#ccall cblas_sswap , CInt -> CInt -> Ptr CFloat -> CInt -> CInt -> Ptr CFloat -> CInt -> IO ()
+#ccall cblas_scopy , CInt -> CInt -> Ptr CFloat -> CInt -> CInt -> Ptr CFloat -> CInt -> IO ()
+#ccall cblas_saxpy , CInt -> CInt -> CFloat -> Ptr CFloat -> CInt -> CInt -> Ptr CFloat -> CInt -> IO ()
+#ccall cblas_dswap , CInt -> CInt -> Ptr CDouble -> CInt -> CInt -> Ptr CDouble -> CInt -> IO ()
+#ccall cblas_dcopy , CInt -> CInt -> Ptr CDouble -> CInt -> CInt -> Ptr CDouble -> CInt -> IO ()
+#ccall cblas_daxpy , CInt -> CInt -> CDouble -> Ptr CDouble -> CInt -> CInt -> Ptr CDouble -> CInt -> IO ()
+#ccall cblas_cswap , CInt -> CInt -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> IO ()
+#ccall cblas_ccopy , CInt -> CInt -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> IO ()
+#ccall cblas_caxpy , CInt -> CInt -> Ptr () -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> IO ()
+#ccall cblas_zswap , CInt -> CInt -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> IO ()
+#ccall cblas_zcopy , CInt -> CInt -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> IO ()
+#ccall cblas_zaxpy , CInt -> CInt -> Ptr () -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> IO ()
+#ccall cblas_srotg , Ptr CFloat -> Ptr CFloat -> Ptr CFloat -> Ptr CFloat -> IO ()
+#ccall cblas_srotmg , Ptr CFloat -> Ptr CFloat -> Ptr CFloat -> CFloat -> Ptr CFloat -> IO ()
+#ccall cblas_srot , CInt -> CInt -> Ptr CFloat -> CInt -> CInt -> Ptr CFloat -> CInt -> CInt -> CFloat -> CFloat -> IO ()
+#ccall cblas_srotm , CInt -> CInt -> Ptr CFloat -> CInt -> CInt -> Ptr CFloat -> CInt -> CInt -> Ptr CFloat -> IO ()
+#ccall cblas_drotg , Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> IO ()
+#ccall cblas_drotmg , Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> CDouble -> Ptr CDouble -> IO ()
+#ccall cblas_drot , CInt -> CInt -> Ptr CDouble -> CInt -> CInt -> Ptr CDouble -> CInt -> CInt -> CDouble -> CDouble -> IO ()
+#ccall cblas_drotm , CInt -> CInt -> Ptr CDouble -> CInt -> CInt -> Ptr CDouble -> CInt -> CInt -> Ptr CDouble -> IO ()
+#ccall cblas_sscal , CInt -> CInt -> CFloat -> Ptr CFloat -> CInt -> IO ()
+#ccall cblas_dscal , CInt -> CInt -> CDouble -> Ptr CDouble -> CInt -> IO ()
+#ccall cblas_cscal , CInt -> CInt -> Ptr () -> Ptr () -> CInt -> IO ()
+#ccall cblas_zscal , CInt -> CInt -> Ptr () -> Ptr () -> CInt -> IO ()
+#ccall cblas_csscal , CInt -> CInt -> CFloat -> Ptr () -> CInt -> IO ()
+#ccall cblas_zdscal , CInt -> CInt -> CDouble -> Ptr () -> CInt -> IO ()
+#ccall cblas_sgemv , <CBLAS_ORDER> -> <CBLAS_TRANSPOSE> -> CInt -> CInt -> CInt -> CInt -> CFloat -> Ptr CFloat -> CInt -> CInt -> Ptr CFloat -> CInt -> CInt -> CFloat -> Ptr CFloat -> CInt -> IO ()
+#ccall cblas_sgbmv , <CBLAS_ORDER> -> <CBLAS_TRANSPOSE> -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CFloat -> Ptr CFloat -> CInt -> CInt -> Ptr CFloat -> CInt -> CInt -> CFloat -> Ptr CFloat -> CInt -> IO ()
+#ccall cblas_strmv , <CBLAS_ORDER> -> <CBLAS_UPLO> -> <CBLAS_TRANSPOSE> -> <CBLAS_DIAG> -> CInt -> CInt -> Ptr CFloat -> CInt -> CInt -> Ptr CFloat -> CInt -> IO ()
+#ccall cblas_stbmv , <CBLAS_ORDER> -> <CBLAS_UPLO> -> <CBLAS_TRANSPOSE> -> <CBLAS_DIAG> -> CInt -> CInt -> CInt -> CInt -> Ptr CFloat -> CInt -> CInt -> Ptr CFloat -> CInt -> IO ()
+#ccall cblas_stpmv , <CBLAS_ORDER> -> <CBLAS_UPLO> -> <CBLAS_TRANSPOSE> -> <CBLAS_DIAG> -> CInt -> CInt -> Ptr CFloat -> Ptr CFloat -> CInt -> IO ()
+#ccall cblas_strsv , <CBLAS_ORDER> -> <CBLAS_UPLO> -> <CBLAS_TRANSPOSE> -> <CBLAS_DIAG> -> CInt -> CInt -> Ptr CFloat -> CInt -> CInt -> Ptr CFloat -> CInt -> IO ()
+#ccall cblas_stbsv , <CBLAS_ORDER> -> <CBLAS_UPLO> -> <CBLAS_TRANSPOSE> -> <CBLAS_DIAG> -> CInt -> CInt -> CInt -> CInt -> Ptr CFloat -> CInt -> CInt -> Ptr CFloat -> CInt -> IO ()
+#ccall cblas_stpsv , <CBLAS_ORDER> -> <CBLAS_UPLO> -> <CBLAS_TRANSPOSE> -> <CBLAS_DIAG> -> CInt -> CInt -> Ptr CFloat -> Ptr CFloat -> CInt -> IO ()
+#ccall cblas_dgemv , <CBLAS_ORDER> -> <CBLAS_TRANSPOSE> -> CInt -> CInt -> CInt -> CInt -> CDouble -> Ptr CDouble -> CInt -> CInt -> Ptr CDouble -> CInt -> CInt -> CDouble -> Ptr CDouble -> CInt -> IO ()
+#ccall cblas_dgbmv , <CBLAS_ORDER> -> <CBLAS_TRANSPOSE> -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CDouble -> Ptr CDouble -> CInt -> CInt -> Ptr CDouble -> CInt -> CInt -> CDouble -> Ptr CDouble -> CInt -> IO ()
+#ccall cblas_dtrmv , <CBLAS_ORDER> -> <CBLAS_UPLO> -> <CBLAS_TRANSPOSE> -> <CBLAS_DIAG> -> CInt -> CInt -> Ptr CDouble -> CInt -> CInt -> Ptr CDouble -> CInt -> IO ()
+#ccall cblas_dtbmv , <CBLAS_ORDER> -> <CBLAS_UPLO> -> <CBLAS_TRANSPOSE> -> <CBLAS_DIAG> -> CInt -> CInt -> CInt -> CInt -> Ptr CDouble -> CInt -> CInt -> Ptr CDouble -> CInt -> IO ()
+#ccall cblas_dtpmv , <CBLAS_ORDER> -> <CBLAS_UPLO> -> <CBLAS_TRANSPOSE> -> <CBLAS_DIAG> -> CInt -> CInt -> Ptr CDouble -> Ptr CDouble -> CInt -> IO ()
+#ccall cblas_dtrsv , <CBLAS_ORDER> -> <CBLAS_UPLO> -> <CBLAS_TRANSPOSE> -> <CBLAS_DIAG> -> CInt -> CInt -> Ptr CDouble -> CInt -> CInt -> Ptr CDouble -> CInt -> IO ()
+#ccall cblas_dtbsv , <CBLAS_ORDER> -> <CBLAS_UPLO> -> <CBLAS_TRANSPOSE> -> <CBLAS_DIAG> -> CInt -> CInt -> CInt -> CInt -> Ptr CDouble -> CInt -> CInt -> Ptr CDouble -> CInt -> IO ()
+#ccall cblas_dtpsv , <CBLAS_ORDER> -> <CBLAS_UPLO> -> <CBLAS_TRANSPOSE> -> <CBLAS_DIAG> -> CInt -> CInt -> Ptr CDouble -> Ptr CDouble -> CInt -> IO ()
+#ccall cblas_cgemv , <CBLAS_ORDER> -> <CBLAS_TRANSPOSE> -> CInt -> CInt -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> IO ()
+#ccall cblas_cgbmv , <CBLAS_ORDER> -> <CBLAS_TRANSPOSE> -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> IO ()
+#ccall cblas_ctrmv , <CBLAS_ORDER> -> <CBLAS_UPLO> -> <CBLAS_TRANSPOSE> -> <CBLAS_DIAG> -> CInt -> CInt -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> IO ()
+#ccall cblas_ctbmv , <CBLAS_ORDER> -> <CBLAS_UPLO> -> <CBLAS_TRANSPOSE> -> <CBLAS_DIAG> -> CInt -> CInt -> CInt -> CInt -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> IO ()
+#ccall cblas_ctpmv , <CBLAS_ORDER> -> <CBLAS_UPLO> -> <CBLAS_TRANSPOSE> -> <CBLAS_DIAG> -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> IO ()
+#ccall cblas_ctrsv , <CBLAS_ORDER> -> <CBLAS_UPLO> -> <CBLAS_TRANSPOSE> -> <CBLAS_DIAG> -> CInt -> CInt -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> IO ()
+#ccall cblas_ctbsv , <CBLAS_ORDER> -> <CBLAS_UPLO> -> <CBLAS_TRANSPOSE> -> <CBLAS_DIAG> -> CInt -> CInt -> CInt -> CInt -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> IO ()
+#ccall cblas_ctpsv , <CBLAS_ORDER> -> <CBLAS_UPLO> -> <CBLAS_TRANSPOSE> -> <CBLAS_DIAG> -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> IO ()
+#ccall cblas_zgemv , <CBLAS_ORDER> -> <CBLAS_TRANSPOSE> -> CInt -> CInt -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> IO ()
+#ccall cblas_zgbmv , <CBLAS_ORDER> -> <CBLAS_TRANSPOSE> -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> IO ()
+#ccall cblas_ztrmv , <CBLAS_ORDER> -> <CBLAS_UPLO> -> <CBLAS_TRANSPOSE> -> <CBLAS_DIAG> -> CInt -> CInt -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> IO ()
+#ccall cblas_ztbmv , <CBLAS_ORDER> -> <CBLAS_UPLO> -> <CBLAS_TRANSPOSE> -> <CBLAS_DIAG> -> CInt -> CInt -> CInt -> CInt -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> IO ()
+#ccall cblas_ztpmv , <CBLAS_ORDER> -> <CBLAS_UPLO> -> <CBLAS_TRANSPOSE> -> <CBLAS_DIAG> -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> IO ()
+#ccall cblas_ztrsv , <CBLAS_ORDER> -> <CBLAS_UPLO> -> <CBLAS_TRANSPOSE> -> <CBLAS_DIAG> -> CInt -> CInt -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> IO ()
+#ccall cblas_ztbsv , <CBLAS_ORDER> -> <CBLAS_UPLO> -> <CBLAS_TRANSPOSE> -> <CBLAS_DIAG> -> CInt -> CInt -> CInt -> CInt -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> IO ()
+#ccall cblas_ztpsv , <CBLAS_ORDER> -> <CBLAS_UPLO> -> <CBLAS_TRANSPOSE> -> <CBLAS_DIAG> -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> IO ()
+#ccall cblas_ssymv , <CBLAS_ORDER> -> <CBLAS_UPLO> -> CInt -> CInt -> CFloat -> Ptr CFloat -> CInt -> CInt -> Ptr CFloat -> CInt -> CInt -> CFloat -> Ptr CFloat -> CInt -> IO ()
+#ccall cblas_ssbmv , <CBLAS_ORDER> -> <CBLAS_UPLO> -> CInt -> CInt -> CInt -> CInt -> CFloat -> Ptr CFloat -> CInt -> CInt -> Ptr CFloat -> CInt -> CInt -> CFloat -> Ptr CFloat -> CInt -> IO ()
+#ccall cblas_sspmv , <CBLAS_ORDER> -> <CBLAS_UPLO> -> CInt -> CInt -> CFloat -> Ptr CFloat -> Ptr CFloat -> CInt -> CInt -> CFloat -> Ptr CFloat -> CInt -> IO ()
+#ccall cblas_sger , <CBLAS_ORDER> -> CInt -> CInt -> CInt -> CInt -> CFloat -> Ptr CFloat -> CInt -> CInt -> Ptr CFloat -> CInt -> CInt -> Ptr CFloat -> CInt -> IO ()
+#ccall cblas_ssyr , <CBLAS_ORDER> -> <CBLAS_UPLO> -> CInt -> CInt -> CFloat -> Ptr CFloat -> CInt -> CInt -> Ptr CFloat -> CInt -> IO ()
+#ccall cblas_sspr , <CBLAS_ORDER> -> <CBLAS_UPLO> -> CInt -> CInt -> CFloat -> Ptr CFloat -> CInt -> CInt -> Ptr CFloat -> IO ()
+#ccall cblas_ssyr2 , <CBLAS_ORDER> -> <CBLAS_UPLO> -> CInt -> CInt -> CFloat -> Ptr CFloat -> CInt -> CInt -> Ptr CFloat -> CInt -> CInt -> Ptr CFloat -> CInt -> IO ()
+#ccall cblas_sspr2 , <CBLAS_ORDER> -> <CBLAS_UPLO> -> CInt -> CInt -> CFloat -> Ptr CFloat -> CInt -> CInt -> Ptr CFloat -> CInt -> CInt -> Ptr CFloat -> IO ()
+#ccall cblas_dsymv , <CBLAS_ORDER> -> <CBLAS_UPLO> -> CInt -> CInt -> CDouble -> Ptr CDouble -> CInt -> CInt -> Ptr CDouble -> CInt -> CInt -> CDouble -> Ptr CDouble -> CInt -> IO ()
+#ccall cblas_dsbmv , <CBLAS_ORDER> -> <CBLAS_UPLO> -> CInt -> CInt -> CInt -> CInt -> CDouble -> Ptr CDouble -> CInt -> CInt -> Ptr CDouble -> CInt -> CInt -> CDouble -> Ptr CDouble -> CInt -> IO ()
+#ccall cblas_dspmv , <CBLAS_ORDER> -> <CBLAS_UPLO> -> CInt -> CInt -> CDouble -> Ptr CDouble -> Ptr CDouble -> CInt -> CInt -> CDouble -> Ptr CDouble -> CInt -> IO ()
+#ccall cblas_dger , <CBLAS_ORDER> -> CInt -> CInt -> CInt -> CInt -> CDouble -> Ptr CDouble -> CInt -> CInt -> Ptr CDouble -> CInt -> CInt -> Ptr CDouble -> CInt -> IO ()
+#ccall cblas_dsyr , <CBLAS_ORDER> -> <CBLAS_UPLO> -> CInt -> CInt -> CDouble -> Ptr CDouble -> CInt -> CInt -> Ptr CDouble -> CInt -> IO ()
+#ccall cblas_dspr , <CBLAS_ORDER> -> <CBLAS_UPLO> -> CInt -> CInt -> CDouble -> Ptr CDouble -> CInt -> CInt -> Ptr CDouble -> IO ()
+#ccall cblas_dsyr2 , <CBLAS_ORDER> -> <CBLAS_UPLO> -> CInt -> CInt -> CDouble -> Ptr CDouble -> CInt -> CInt -> Ptr CDouble -> CInt -> CInt -> Ptr CDouble -> CInt -> IO ()
+#ccall cblas_dspr2 , <CBLAS_ORDER> -> <CBLAS_UPLO> -> CInt -> CInt -> CDouble -> Ptr CDouble -> CInt -> CInt -> Ptr CDouble -> CInt -> CInt -> Ptr CDouble -> IO ()
+#ccall cblas_chemv , <CBLAS_ORDER> -> <CBLAS_UPLO> -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> IO ()
+#ccall cblas_chbmv , <CBLAS_ORDER> -> <CBLAS_UPLO> -> CInt -> CInt -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> IO ()
+#ccall cblas_chpmv , <CBLAS_ORDER> -> <CBLAS_UPLO> -> CInt -> CInt -> Ptr () -> Ptr () -> Ptr () -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> IO ()
+#ccall cblas_cgeru , <CBLAS_ORDER> -> CInt -> CInt -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> IO ()
+#ccall cblas_cgerc , <CBLAS_ORDER> -> CInt -> CInt -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> IO ()
+#ccall cblas_cher , <CBLAS_ORDER> -> <CBLAS_UPLO> -> CInt -> CInt -> CFloat -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> IO ()
+#ccall cblas_chpr , <CBLAS_ORDER> -> <CBLAS_UPLO> -> CInt -> CInt -> CFloat -> Ptr () -> CInt -> CInt -> Ptr () -> IO ()
+#ccall cblas_cher2 , <CBLAS_ORDER> -> <CBLAS_UPLO> -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> IO ()
+#ccall cblas_chpr2 , <CBLAS_ORDER> -> <CBLAS_UPLO> -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> CInt -> Ptr () -> IO ()
+#ccall cblas_zhemv , <CBLAS_ORDER> -> <CBLAS_UPLO> -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> IO ()
+#ccall cblas_zhbmv , <CBLAS_ORDER> -> <CBLAS_UPLO> -> CInt -> CInt -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> IO ()
+#ccall cblas_zhpmv , <CBLAS_ORDER> -> <CBLAS_UPLO> -> CInt -> CInt -> Ptr () -> Ptr () -> Ptr () -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> IO ()
+#ccall cblas_zgeru , <CBLAS_ORDER> -> CInt -> CInt -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> IO ()
+#ccall cblas_zgerc , <CBLAS_ORDER> -> CInt -> CInt -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> IO ()
+#ccall cblas_zher , <CBLAS_ORDER> -> <CBLAS_UPLO> -> CInt -> CInt -> CDouble -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> IO ()
+#ccall cblas_zhpr , <CBLAS_ORDER> -> <CBLAS_UPLO> -> CInt -> CInt -> CDouble -> Ptr () -> CInt -> CInt -> Ptr () -> IO ()
+#ccall cblas_zher2 , <CBLAS_ORDER> -> <CBLAS_UPLO> -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> IO ()
+#ccall cblas_zhpr2 , <CBLAS_ORDER> -> <CBLAS_UPLO> -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> CInt -> Ptr () -> IO ()
+#ccall cblas_sgemm , <CBLAS_ORDER> -> <CBLAS_TRANSPOSE> -> <CBLAS_TRANSPOSE> -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CFloat -> Ptr CFloat -> CInt -> CInt -> Ptr CFloat -> CInt -> CInt -> CFloat -> Ptr CFloat -> CInt -> IO ()
+#ccall cblas_ssymm , <CBLAS_ORDER> -> <CBLAS_SIDE> -> <CBLAS_UPLO> -> CInt -> CInt -> CInt -> CInt -> CFloat -> Ptr CFloat -> CInt -> CInt -> Ptr CFloat -> CInt -> CInt -> CFloat -> Ptr CFloat -> CInt -> IO ()
+#ccall cblas_ssyrk , <CBLAS_ORDER> -> <CBLAS_UPLO> -> <CBLAS_TRANSPOSE> -> CInt -> CInt -> CInt -> CInt -> CFloat -> Ptr CFloat -> CInt -> CInt -> CFloat -> Ptr CFloat -> CInt -> IO ()
+#ccall cblas_ssyr2k , <CBLAS_ORDER> -> <CBLAS_UPLO> -> <CBLAS_TRANSPOSE> -> CInt -> CInt -> CInt -> CInt -> CFloat -> Ptr CFloat -> CInt -> CInt -> Ptr CFloat -> CInt -> CInt -> CFloat -> Ptr CFloat -> CInt -> IO ()
+#ccall cblas_strmm , <CBLAS_ORDER> -> <CBLAS_SIDE> -> <CBLAS_UPLO> -> <CBLAS_TRANSPOSE> -> <CBLAS_DIAG> -> CInt -> CInt -> CInt -> CInt -> CFloat -> Ptr CFloat -> CInt -> CInt -> Ptr CFloat -> CInt -> IO ()
+#ccall cblas_strsm , <CBLAS_ORDER> -> <CBLAS_SIDE> -> <CBLAS_UPLO> -> <CBLAS_TRANSPOSE> -> <CBLAS_DIAG> -> CInt -> CInt -> CInt -> CInt -> CFloat -> Ptr CFloat -> CInt -> CInt -> Ptr CFloat -> CInt -> IO ()
+#ccall cblas_dgemm , <CBLAS_ORDER> -> <CBLAS_TRANSPOSE> -> <CBLAS_TRANSPOSE> -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CDouble -> Ptr CDouble -> CInt -> CInt -> Ptr CDouble -> CInt -> CInt -> CDouble -> Ptr CDouble -> CInt -> IO ()
+#ccall cblas_dsymm , <CBLAS_ORDER> -> <CBLAS_SIDE> -> <CBLAS_UPLO> -> CInt -> CInt -> CInt -> CInt -> CDouble -> Ptr CDouble -> CInt -> CInt -> Ptr CDouble -> CInt -> CInt -> CDouble -> Ptr CDouble -> CInt -> IO ()
+#ccall cblas_dsyrk , <CBLAS_ORDER> -> <CBLAS_UPLO> -> <CBLAS_TRANSPOSE> -> CInt -> CInt -> CInt -> CInt -> CDouble -> Ptr CDouble -> CInt -> CInt -> CDouble -> Ptr CDouble -> CInt -> IO ()
+#ccall cblas_dsyr2k , <CBLAS_ORDER> -> <CBLAS_UPLO> -> <CBLAS_TRANSPOSE> -> CInt -> CInt -> CInt -> CInt -> CDouble -> Ptr CDouble -> CInt -> CInt -> Ptr CDouble -> CInt -> CInt -> CDouble -> Ptr CDouble -> CInt -> IO ()
+#ccall cblas_dtrmm , <CBLAS_ORDER> -> <CBLAS_SIDE> -> <CBLAS_UPLO> -> <CBLAS_TRANSPOSE> -> <CBLAS_DIAG> -> CInt -> CInt -> CInt -> CInt -> CDouble -> Ptr CDouble -> CInt -> CInt -> Ptr CDouble -> CInt -> IO ()
+#ccall cblas_dtrsm , <CBLAS_ORDER> -> <CBLAS_SIDE> -> <CBLAS_UPLO> -> <CBLAS_TRANSPOSE> -> <CBLAS_DIAG> -> CInt -> CInt -> CInt -> CInt -> CDouble -> Ptr CDouble -> CInt -> CInt -> Ptr CDouble -> CInt -> IO ()
+#ccall cblas_cgemm , <CBLAS_ORDER> -> <CBLAS_TRANSPOSE> -> <CBLAS_TRANSPOSE> -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> IO ()
+#ccall cblas_csymm , <CBLAS_ORDER> -> <CBLAS_SIDE> -> <CBLAS_UPLO> -> CInt -> CInt -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> IO ()
+#ccall cblas_csyrk , <CBLAS_ORDER> -> <CBLAS_UPLO> -> <CBLAS_TRANSPOSE> -> CInt -> CInt -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> IO ()
+#ccall cblas_csyr2k , <CBLAS_ORDER> -> <CBLAS_UPLO> -> <CBLAS_TRANSPOSE> -> CInt -> CInt -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> IO ()
+#ccall cblas_ctrmm , <CBLAS_ORDER> -> <CBLAS_SIDE> -> <CBLAS_UPLO> -> <CBLAS_TRANSPOSE> -> <CBLAS_DIAG> -> CInt -> CInt -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> IO ()
+#ccall cblas_ctrsm , <CBLAS_ORDER> -> <CBLAS_SIDE> -> <CBLAS_UPLO> -> <CBLAS_TRANSPOSE> -> <CBLAS_DIAG> -> CInt -> CInt -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> IO ()
+#ccall cblas_zgemm , <CBLAS_ORDER> -> <CBLAS_TRANSPOSE> -> <CBLAS_TRANSPOSE> -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> IO ()
+#ccall cblas_zsymm , <CBLAS_ORDER> -> <CBLAS_SIDE> -> <CBLAS_UPLO> -> CInt -> CInt -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> IO ()
+#ccall cblas_zsyrk , <CBLAS_ORDER> -> <CBLAS_UPLO> -> <CBLAS_TRANSPOSE> -> CInt -> CInt -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> IO ()
+#ccall cblas_zsyr2k , <CBLAS_ORDER> -> <CBLAS_UPLO> -> <CBLAS_TRANSPOSE> -> CInt -> CInt -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> IO ()
+#ccall cblas_ztrmm , <CBLAS_ORDER> -> <CBLAS_SIDE> -> <CBLAS_UPLO> -> <CBLAS_TRANSPOSE> -> <CBLAS_DIAG> -> CInt -> CInt -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> IO ()
+#ccall cblas_ztrsm , <CBLAS_ORDER> -> <CBLAS_SIDE> -> <CBLAS_UPLO> -> <CBLAS_TRANSPOSE> -> <CBLAS_DIAG> -> CInt -> CInt -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> IO ()
+#ccall cblas_chemm , <CBLAS_ORDER> -> <CBLAS_SIDE> -> <CBLAS_UPLO> -> CInt -> CInt -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> IO ()
+#ccall cblas_cherk , <CBLAS_ORDER> -> <CBLAS_UPLO> -> <CBLAS_TRANSPOSE> -> CInt -> CInt -> CInt -> CInt -> CFloat -> Ptr () -> CInt -> CInt -> CFloat -> Ptr () -> CInt -> IO ()
+#ccall cblas_cher2k , <CBLAS_ORDER> -> <CBLAS_UPLO> -> <CBLAS_TRANSPOSE> -> CInt -> CInt -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> CInt -> CFloat -> Ptr () -> CInt -> IO ()
+#ccall cblas_zhemm , <CBLAS_ORDER> -> <CBLAS_SIDE> -> <CBLAS_UPLO> -> CInt -> CInt -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> IO ()
+#ccall cblas_zherk , <CBLAS_ORDER> -> <CBLAS_UPLO> -> <CBLAS_TRANSPOSE> -> CInt -> CInt -> CInt -> CInt -> CDouble -> Ptr () -> CInt -> CInt -> CDouble -> Ptr () -> CInt -> IO ()
+#ccall cblas_zher2k , <CBLAS_ORDER> -> <CBLAS_UPLO> -> <CBLAS_TRANSPOSE> -> CInt -> CInt -> CInt -> CInt -> Ptr () -> Ptr () -> CInt -> CInt -> Ptr () -> CInt -> CInt -> CDouble -> Ptr () -> CInt -> IO ()
+
diff --git a/src/Bindings/Gsl/ChebyshevApproximations.hsc b/src/Bindings/Gsl/ChebyshevApproximations.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/ChebyshevApproximations.hsc
@@ -0,0 +1,34 @@
+#include <bindings.dsl.h>
+#include <gsl/gsl_chebyshev.h>
+
+-- | <http://www.gnu.org/software/gsl/manual/html_node/Chebyshev-Approximations.html>
+
+module Bindings.Gsl.ChebyshevApproximations where
+#strict_import
+import Bindings.Gsl.SpecialFunctions
+import Bindings.Gsl.MathematicalFunctions
+
+#starttype gsl_cheb_series
+#field c , Ptr CDouble
+#field order , CSize
+#field a , CDouble
+#field b , CDouble
+#field order_sp , CSize
+#field f , Ptr CDouble
+#stoptype
+
+#ccall gsl_cheb_alloc , CSize -> IO (Ptr <gsl_cheb_series>)
+#ccall gsl_cheb_free , Ptr <gsl_cheb_series> -> IO ()
+#ccall gsl_cheb_init , Ptr <gsl_cheb_series> -> Ptr <gsl_function> -> CDouble -> CDouble -> IO CInt
+#ccall gsl_cheb_order , Ptr <gsl_cheb_series> -> IO CSize
+#ccall gsl_cheb_size , Ptr <gsl_cheb_series> -> IO CSize
+#ccall gsl_cheb_coeffs , Ptr <gsl_cheb_series> -> IO (Ptr CDouble)
+#ccall gsl_cheb_eval , Ptr <gsl_cheb_series> -> CDouble -> IO CDouble
+#ccall gsl_cheb_eval_err , Ptr <gsl_cheb_series> -> CDouble -> Ptr CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_cheb_eval_n , Ptr <gsl_cheb_series> -> CSize -> CDouble -> IO CDouble
+#ccall gsl_cheb_eval_n_err , Ptr <gsl_cheb_series> -> CSize -> CDouble -> Ptr CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_cheb_eval_mode , Ptr <gsl_cheb_series> -> CDouble -> <gsl_mode_t> -> IO CDouble
+#ccall gsl_cheb_eval_mode_e , Ptr <gsl_cheb_series> -> CDouble -> <gsl_mode_t> -> Ptr CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_cheb_calc_deriv , Ptr <gsl_cheb_series> -> Ptr <gsl_cheb_series> -> IO CInt
+#ccall gsl_cheb_calc_integ , Ptr <gsl_cheb_series> -> Ptr <gsl_cheb_series> -> IO CInt
+
diff --git a/src/Bindings/Gsl/Combinations.hsc b/src/Bindings/Gsl/Combinations.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/Combinations.hsc
@@ -0,0 +1,32 @@
+#include <bindings.dsl.h>
+#include <gsl/gsl_combination.h>
+
+-- | <http://www.gnu.org/software/gsl/manual/html_node/Combinations.html>
+
+module Bindings.Gsl.Combinations where
+#strict_import
+
+#starttype gsl_combination
+#field n , CSize
+#field k , CSize
+#field data , Ptr CSize
+#stoptype
+
+#ccall gsl_combination_alloc , CSize -> CSize -> IO (Ptr <gsl_combination>)
+#ccall gsl_combination_calloc , CSize -> CSize -> IO (Ptr <gsl_combination>)
+#ccall gsl_combination_init_first , Ptr <gsl_combination> -> IO ()
+#ccall gsl_combination_init_last , Ptr <gsl_combination> -> IO ()
+#ccall gsl_combination_free , Ptr <gsl_combination> -> IO ()
+#ccall gsl_combination_memcpy , Ptr <gsl_combination> -> Ptr <gsl_combination> -> IO CInt
+#ccall gsl_combination_fread , Ptr CFile -> Ptr <gsl_combination> -> IO CInt
+#ccall gsl_combination_fwrite , Ptr CFile -> Ptr <gsl_combination> -> IO CInt
+#ccall gsl_combination_fscanf , Ptr CFile -> Ptr <gsl_combination> -> IO CInt
+#ccall gsl_combination_fprintf , Ptr CFile -> Ptr <gsl_combination> -> CString -> IO CInt
+#ccall gsl_combination_n , Ptr <gsl_combination> -> IO CSize
+#ccall gsl_combination_k , Ptr <gsl_combination> -> IO CSize
+#ccall gsl_combination_data , Ptr <gsl_combination> -> IO (Ptr CSize)
+#ccall gsl_combination_valid , Ptr <gsl_combination> -> IO CInt
+#ccall gsl_combination_next , Ptr <gsl_combination> -> IO CInt
+#ccall gsl_combination_prev , Ptr <gsl_combination> -> IO CInt
+#ccall gsl_combination_get , Ptr <gsl_combination> -> CSize -> IO CSize
+
diff --git a/src/Bindings/Gsl/ComplexNumbers.hsc b/src/Bindings/Gsl/ComplexNumbers.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/ComplexNumbers.hsc
@@ -0,0 +1,39 @@
+#include <bindings.dsl.h>
+#include <gsl/gsl_complex_math.h>
+
+-- | <http://www.gnu.org/software/gsl/manual/html_node/Complex-Numbers.html>
+
+module Bindings.Gsl.ComplexNumbers where
+#strict_import
+
+#integral_t gsl_complex_packed
+#integral_t gsl_complex_packed_float
+#integral_t gsl_complex_packed_long_double
+#integral_t gsl_const_complex_packed
+#integral_t gsl_const_complex_packed_float
+#integral_t gsl_const_complex_packed_long_double
+#integral_t gsl_complex_packed_array
+#integral_t gsl_complex_packed_array_float
+#integral_t gsl_complex_packed_array_long_double
+#integral_t gsl_const_complex_packed_array
+#integral_t gsl_const_complex_packed_array_float
+#integral_t gsl_const_complex_packed_array_long_double
+#integral_t gsl_complex_packed_ptr
+#integral_t gsl_complex_packed_float_ptr
+#integral_t gsl_complex_packed_long_double_ptr
+#integral_t gsl_const_complex_packed_ptr
+#integral_t gsl_const_complex_packed_float_ptr
+#integral_t gsl_const_complex_packed_long_double_ptr
+
+-- #starttype gsl_complex_long_double
+-- #array_field dat , CLDouble
+-- #stoptype
+
+#starttype gsl_complex
+#array_field dat , CDouble
+#stoptype
+
+#starttype gsl_complex_float
+#array_field dat , CFloat
+#stoptype
+
diff --git a/src/Bindings/Gsl/DiscreteHankelTransforms.hsc b/src/Bindings/Gsl/DiscreteHankelTransforms.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/DiscreteHankelTransforms.hsc
@@ -0,0 +1,26 @@
+#include <bindings.dsl.h>
+#include <gsl/gsl_dht.h>
+
+-- | <http://www.gnu.org/software/gsl/manual/html_node/Discrete-Hankel-Transforms.html>
+
+module Bindings.Gsl.DiscreteHankelTransforms where
+#strict_import
+
+#starttype gsl_dht
+#field size , CSize
+#field nu , CDouble
+#field xmax , CDouble
+#field kmax , CDouble
+#field j , Ptr CDouble
+#field Jjj , Ptr CDouble
+#field J2 , Ptr CDouble
+#stoptype
+
+#ccall gsl_dht_alloc , CSize -> IO (Ptr <gsl_dht>)
+#ccall gsl_dht_new , CSize -> CDouble -> CDouble -> IO (Ptr <gsl_dht>)
+#ccall gsl_dht_init , Ptr <gsl_dht> -> CDouble -> CDouble -> IO CInt
+#ccall gsl_dht_x_sample , Ptr <gsl_dht> -> CInt -> IO CDouble
+#ccall gsl_dht_k_sample , Ptr <gsl_dht> -> CInt -> IO CDouble
+#ccall gsl_dht_free , Ptr <gsl_dht> -> IO ()
+#ccall gsl_dht_apply , Ptr <gsl_dht> -> Ptr CDouble -> Ptr CDouble -> IO CInt
+
diff --git a/src/Bindings/Gsl/Eigensystems.hsc b/src/Bindings/Gsl/Eigensystems.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/Eigensystems.hsc
@@ -0,0 +1,206 @@
+#include <bindings.dsl.h>
+#include <gsl/gsl_eigen.h>
+
+-- | <http://www.gnu.org/software/gsl/manual/html_node/Eigensystems.html>
+
+module Bindings.Gsl.Eigensystems where
+#strict_import
+import Bindings.Gsl.ComplexNumbers
+import Bindings.Gsl.VectorsAndMatrices.DataTypes
+
+#starttype gsl_eigen_symm_workspace
+#field size , CSize
+#field d , Ptr CDouble
+#field sd , Ptr CDouble
+#stoptype
+
+#ccall gsl_eigen_symm_alloc , CSize -> IO  (Ptr <gsl_eigen_symm_workspace>)
+#ccall gsl_eigen_symm_free , Ptr <gsl_eigen_symm_workspace> -> IO ()
+#ccall gsl_eigen_symm , Ptr <gsl_matrix> -> Ptr <gsl_vector> -> Ptr <gsl_eigen_symm_workspace> -> IO CInt
+
+#starttype gsl_eigen_symmv_workspace
+#field size , CSize
+#field d , Ptr CDouble
+#field sd , Ptr CDouble
+#field gc , Ptr CDouble
+#field gs , Ptr CDouble
+#stoptype
+
+#ccall gsl_eigen_symmv_alloc , CSize -> IO  (Ptr <gsl_eigen_symmv_workspace>)
+#ccall gsl_eigen_symmv_free , Ptr <gsl_eigen_symmv_workspace> -> IO ()
+#ccall gsl_eigen_symmv , Ptr <gsl_matrix> -> Ptr <gsl_vector> -> Ptr <gsl_matrix> -> Ptr <gsl_eigen_symmv_workspace> -> IO CInt
+
+#starttype gsl_eigen_herm_workspace
+#field size , CSize
+#field d , Ptr CDouble
+#field sd , Ptr CDouble
+#field tau , Ptr CDouble
+#stoptype
+
+#ccall gsl_eigen_herm_alloc , CSize -> IO  (Ptr <gsl_eigen_herm_workspace>)
+#ccall gsl_eigen_herm_free , Ptr <gsl_eigen_herm_workspace> -> IO ()
+#ccall gsl_eigen_herm , Ptr <gsl_matrix_complex> -> Ptr <gsl_vector> -> Ptr <gsl_eigen_herm_workspace> -> IO CInt
+
+#starttype gsl_eigen_hermv_workspace
+#field size , CSize
+#field d , Ptr CDouble
+#field sd , Ptr CDouble
+#field tau , Ptr CDouble
+#field gc , Ptr CDouble
+#field gs , Ptr CDouble
+#stoptype
+
+#ccall gsl_eigen_hermv_alloc , CSize -> IO  (Ptr <gsl_eigen_hermv_workspace>)
+#ccall gsl_eigen_hermv_free , Ptr <gsl_eigen_hermv_workspace> -> IO ()
+#ccall gsl_eigen_hermv , Ptr <gsl_matrix_complex> -> Ptr <gsl_vector> -> Ptr <gsl_matrix_complex> -> Ptr <gsl_eigen_hermv_workspace> -> IO CInt
+
+#starttype gsl_eigen_francis_workspace
+#field size , CSize
+#field max_iterations , CSize
+#field n_iter , CSize
+#field n_evals , CSize
+#field compute_t , CInt
+#field H , Ptr <gsl_matrix>
+#field Z , Ptr <gsl_matrix>
+#stoptype
+
+#ccall gsl_eigen_francis_alloc , IO  (Ptr <gsl_eigen_francis_workspace>)
+#ccall gsl_eigen_francis_free , Ptr <gsl_eigen_francis_workspace> -> IO ()
+#ccall gsl_eigen_francis_T , CInt -> CInt -> Ptr <gsl_eigen_francis_workspace> -> IO ()
+#ccall gsl_eigen_francis , Ptr <gsl_matrix> -> Ptr <gsl_vector_complex> -> Ptr <gsl_eigen_francis_workspace> -> IO CInt
+#ccall gsl_eigen_francis_Z , Ptr <gsl_matrix> -> Ptr <gsl_vector_complex> -> Ptr <gsl_matrix> -> Ptr <gsl_eigen_francis_workspace> -> IO CInt
+
+#starttype gsl_eigen_nonsymm_workspace
+#field size , CSize
+#field diag , Ptr <gsl_vector>
+#field tau , Ptr <gsl_vector>
+#field Z , Ptr <gsl_matrix>
+#field do_balance , CInt
+#field n_evals , CSize
+#field francis_workspace_p , Ptr <gsl_eigen_francis_workspace>
+#stoptype
+
+#ccall gsl_eigen_nonsymm_alloc , CSize -> IO  (Ptr <gsl_eigen_nonsymm_workspace>)
+#ccall gsl_eigen_nonsymm_free , Ptr <gsl_eigen_nonsymm_workspace> -> IO ()
+#ccall gsl_eigen_nonsymm_params , CInt -> CInt -> CInt -> CInt -> Ptr <gsl_eigen_nonsymm_workspace> -> IO ()
+#ccall gsl_eigen_nonsymm , Ptr <gsl_matrix> -> Ptr <gsl_vector_complex> -> Ptr <gsl_eigen_nonsymm_workspace> -> IO CInt
+#ccall gsl_eigen_nonsymm_Z , Ptr <gsl_matrix> -> Ptr <gsl_vector_complex> -> Ptr <gsl_matrix> -> Ptr <gsl_eigen_nonsymm_workspace> -> IO CInt
+
+#starttype gsl_eigen_nonsymmv_workspace
+#field size , CSize
+#field work , Ptr <gsl_vector>
+#field work2 , Ptr <gsl_vector>
+#field work3 , Ptr <gsl_vector>
+#field Z , Ptr <gsl_matrix>
+#field nonsymm_workspace_p , Ptr <gsl_eigen_nonsymm_workspace>
+#stoptype
+
+#ccall gsl_eigen_nonsymmv_alloc , CSize -> IO  (Ptr <gsl_eigen_nonsymmv_workspace>)
+#ccall gsl_eigen_nonsymmv_free , Ptr <gsl_eigen_nonsymmv_workspace> -> IO ()
+#ccall gsl_eigen_nonsymmv_params , CInt -> \
+    Ptr <gsl_eigen_nonsymm_workspace> -> IO ()
+#ccall gsl_eigen_nonsymmv , Ptr <gsl_matrix> -> Ptr <gsl_vector_complex> -> \
+    Ptr <gsl_matrix_complex> -> Ptr <gsl_eigen_nonsymmv_workspace> -> IO CInt
+#ccall gsl_eigen_nonsymmv_Z , Ptr <gsl_matrix> -> Ptr <gsl_vector_complex> -> \
+    Ptr <gsl_matrix_complex> -> Ptr <gsl_matrix> -> \
+    Ptr <gsl_eigen_nonsymmv_workspace> -> IO CInt
+
+#starttype gsl_eigen_gensymm_workspace
+#field size , CSize
+#field symm_workspace_p , Ptr <gsl_eigen_symm_workspace>
+#stoptype
+
+#ccall gsl_eigen_gensymm_alloc , CSize -> IO  (Ptr <gsl_eigen_gensymm_workspace>)
+#ccall gsl_eigen_gensymm_free , Ptr <gsl_eigen_gensymm_workspace> -> IO ()
+#ccall gsl_eigen_gensymm , Ptr <gsl_matrix> -> Ptr <gsl_matrix> -> Ptr <gsl_vector> -> Ptr <gsl_eigen_gensymm_workspace> -> IO CInt
+#ccall gsl_eigen_gensymm_standardize , Ptr <gsl_matrix> -> Ptr <gsl_matrix> -> IO CInt
+
+#starttype gsl_eigen_gensymmv_workspace
+#field size , CSize
+#field symmv_workspace_p , Ptr <gsl_eigen_symmv_workspace>
+#stoptype
+
+#ccall gsl_eigen_gensymmv_alloc , CSize -> IO  (Ptr <gsl_eigen_gensymmv_workspace>)
+#ccall gsl_eigen_gensymmv_free , Ptr <gsl_eigen_gensymmv_workspace> -> IO ()
+#ccall gsl_eigen_gensymmv , Ptr <gsl_matrix> -> Ptr <gsl_matrix> -> Ptr <gsl_vector> -> Ptr <gsl_matrix> -> Ptr <gsl_eigen_gensymmv_workspace> -> IO CInt
+
+#starttype gsl_eigen_genherm_workspace
+#field size , CSize
+#field herm_workspace_p , Ptr <gsl_eigen_herm_workspace>
+#stoptype
+
+#ccall gsl_eigen_genherm_alloc , CSize -> IO  (Ptr <gsl_eigen_genherm_workspace>)
+#ccall gsl_eigen_genherm_free , Ptr <gsl_eigen_genherm_workspace> -> IO ()
+#ccall gsl_eigen_genherm , Ptr <gsl_matrix_complex> -> Ptr <gsl_matrix_complex> -> Ptr <gsl_vector> -> Ptr <gsl_eigen_genherm_workspace> -> IO CInt
+#ccall gsl_eigen_genherm_standardize , Ptr <gsl_matrix_complex> -> Ptr <gsl_matrix_complex> -> IO CInt
+
+#starttype gsl_eigen_genhermv_workspace
+#field size , CSize
+#field hermv_workspace_p , Ptr <gsl_eigen_hermv_workspace>
+#stoptype
+
+#ccall gsl_eigen_genhermv_alloc , CSize -> IO  (Ptr <gsl_eigen_genhermv_workspace>)
+#ccall gsl_eigen_genhermv_free , Ptr <gsl_eigen_genhermv_workspace> -> IO ()
+#ccall gsl_eigen_genhermv , Ptr <gsl_matrix_complex> -> Ptr <gsl_matrix_complex> -> Ptr <gsl_vector> -> Ptr <gsl_matrix_complex> -> Ptr <gsl_eigen_genhermv_workspace> -> IO CInt
+
+#starttype gsl_eigen_gen_workspace
+#field size , CSize
+#field work , Ptr <gsl_vector>
+#field n_evals , CSize
+#field max_iterations , CSize
+#field n_iter , CSize
+#field eshift , CDouble
+#field needtop , CInt
+#field atol , CDouble
+#field btol , CDouble
+#field ascale , CDouble
+#field bscale , CDouble
+#field H , Ptr <gsl_matrix>
+#field R , Ptr <gsl_matrix>
+#field compute_s , CInt
+#field compute_t , CInt
+#field Q , Ptr <gsl_matrix>
+#field Z , Ptr <gsl_matrix>
+#stoptype
+
+#ccall gsl_eigen_gen_alloc , CSize -> IO  (Ptr <gsl_eigen_gen_workspace>)
+#ccall gsl_eigen_gen_free , Ptr <gsl_eigen_gen_workspace> -> IO ()
+#ccall gsl_eigen_gen_params , CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> Ptr <gsl_eigen_gen_workspace> -> IO ()
+#ccall gsl_eigen_gen , Ptr <gsl_matrix> -> Ptr <gsl_matrix> -> Ptr <gsl_vector_complex> -> Ptr <gsl_vector> -> Ptr <gsl_eigen_gen_workspace> -> IO CInt
+#ccall gsl_eigen_gen_QZ , Ptr <gsl_matrix> -> Ptr <gsl_matrix> -> Ptr <gsl_vector_complex> -> Ptr <gsl_vector> -> Ptr <gsl_matrix> -> Ptr <gsl_matrix> -> Ptr <gsl_eigen_gen_workspace> -> IO CInt
+
+#starttype gsl_eigen_genv_workspace
+#field size , CSize
+#field work1 , Ptr <gsl_vector>
+#field work2 , Ptr <gsl_vector>
+#field work3 , Ptr <gsl_vector>
+#field work4 , Ptr <gsl_vector>
+#field work5 , Ptr <gsl_vector>
+#field work6 , Ptr <gsl_vector>
+#field Q , Ptr <gsl_matrix>
+#field Z , Ptr <gsl_matrix>
+#field gen_workspace_p , Ptr <gsl_eigen_gen_workspace>
+#stoptype
+
+#ccall gsl_eigen_genv_alloc , CSize -> IO  (Ptr <gsl_eigen_genv_workspace>)
+#ccall gsl_eigen_genv_free , Ptr <gsl_eigen_genv_workspace> -> IO ()
+#ccall gsl_eigen_genv , Ptr <gsl_matrix> -> Ptr <gsl_matrix> -> Ptr <gsl_vector_complex> -> Ptr <gsl_vector> -> Ptr <gsl_matrix_complex> -> Ptr <gsl_eigen_genv_workspace> -> IO CInt
+#ccall gsl_eigen_genv_QZ , Ptr <gsl_matrix> -> Ptr <gsl_matrix> -> Ptr <gsl_vector_complex> -> Ptr <gsl_vector> -> Ptr <gsl_matrix_complex> -> Ptr <gsl_matrix> -> Ptr <gsl_matrix> -> Ptr <gsl_eigen_genv_workspace> -> IO CInt
+
+#integral_t gsl_eigen_sort_t
+
+#num GSL_EIGEN_SORT_VAL_ASC
+#num GSL_EIGEN_SORT_VAL_DESC
+#num GSL_EIGEN_SORT_ABS_ASC
+#num GSL_EIGEN_SORT_ABS_DESC
+
+#ccall gsl_eigen_symmv_sort , Ptr <gsl_vector> -> Ptr <gsl_matrix> -> <gsl_eigen_sort_t> -> IO CInt
+#ccall gsl_eigen_hermv_sort , Ptr <gsl_vector> -> Ptr <gsl_matrix_complex> -> <gsl_eigen_sort_t> -> IO CInt
+#ccall gsl_eigen_nonsymmv_sort , Ptr <gsl_vector_complex> -> Ptr <gsl_matrix_complex> -> <gsl_eigen_sort_t> -> IO CInt
+#ccall gsl_eigen_gensymmv_sort , Ptr <gsl_vector> -> Ptr <gsl_matrix> -> <gsl_eigen_sort_t> -> IO CInt
+#ccall gsl_eigen_genhermv_sort , Ptr <gsl_vector> -> Ptr <gsl_matrix_complex> -> <gsl_eigen_sort_t> -> IO CInt
+#ccall gsl_eigen_genv_sort , Ptr <gsl_vector_complex> -> Ptr <gsl_vector> -> Ptr <gsl_matrix_complex> -> <gsl_eigen_sort_t> -> IO CInt
+#ccall gsl_schur_gen_eigvals , Ptr <gsl_matrix> -> Ptr <gsl_matrix> -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_schur_solve_equation , CDouble -> Ptr <gsl_matrix> -> CDouble -> CDouble -> CDouble -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> Ptr CDouble -> Ptr CDouble -> CDouble -> IO CInt
+#ccall gsl_schur_solve_equation_z , CDouble -> Ptr <gsl_matrix> -> Ptr <gsl_complex> -> CDouble -> CDouble -> Ptr <gsl_vector_complex> -> Ptr <gsl_vector_complex> -> Ptr CDouble -> Ptr CDouble -> CDouble -> IO CInt
+
diff --git a/src/Bindings/Gsl/ErrorHandling.c b/src/Bindings/Gsl/ErrorHandling.c
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/ErrorHandling.c
@@ -0,0 +1,8 @@
+#include <bindings.cmacros.h>
+#include <gsl/gsl_errno.h>
+
+BC_INLINE2(GSL_ERROR_SELECT_2,int,int,int)
+BC_INLINE3(GSL_ERROR_SELECT_3,int,int,int,int)
+BC_INLINE4(GSL_ERROR_SELECT_4,int,int,int,int,int)
+BC_INLINE5(GSL_ERROR_SELECT_5,int,int,int,int,int,int)
+BC_INLINE2VOID(GSL_STATUS_UPDATE,int*,int)
diff --git a/src/Bindings/Gsl/ErrorHandling.hsc b/src/Bindings/Gsl/ErrorHandling.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/ErrorHandling.hsc
@@ -0,0 +1,60 @@
+#include <bindings.dsl.h>
+#include <gsl/gsl_errno.h>
+
+-- | <http://www.gnu.org/software/gsl/manual/html_node/Error-Handling.html>
+
+module Bindings.Gsl.ErrorHandling where
+#strict_import
+
+#num GSL_SUCCESS
+#num GSL_FAILURE
+#num GSL_CONTINUE
+#num GSL_EDOM
+#num GSL_ERANGE
+#num GSL_EFAULT
+#num GSL_EINVAL
+#num GSL_EFAILED
+#num GSL_EFACTOR
+#num GSL_ESANITY
+#num GSL_ENOMEM
+#num GSL_EBADFUNC
+#num GSL_ERUNAWAY
+#num GSL_EMAXITER
+#num GSL_EZERODIV
+#num GSL_EBADTOL
+#num GSL_ETOL
+#num GSL_EUNDRFLW
+#num GSL_EOVRFLW
+#num GSL_ELOSS
+#num GSL_EROUND
+#num GSL_EBADLEN
+#num GSL_ENOTSQR
+#num GSL_ESING
+#num GSL_EDIVERGE
+#num GSL_EUNSUP
+#num GSL_EUNIMPL
+#num GSL_ECACHE
+#num GSL_ETABLE
+#num GSL_ENOPROG
+#num GSL_ENOPROGJ
+#num GSL_ETOLF
+#num GSL_ETOLX
+#num GSL_ETOLG
+#num GSL_EOF
+
+#ccall gsl_error , CString -> CString -> CInt -> CInt -> CInt -> IO ()
+#ccall gsl_stream_printf , CString -> CString -> CInt -> CInt -> CString -> IO ()
+#ccall gsl_strerror , CInt -> IO CString 
+#callback_t gsl_error_handler_t , CString -> CString -> CInt -> CInt -> CInt -> IO ()
+#callback_t gsl_stream_handler_t , CString -> CString -> CInt -> CInt -> CString -> IO ()
+#ccall gsl_set_error_handler , Ptr <gsl_error_handler_t> -> IO (Ptr <gsl_error_handler_t>)
+#ccall gsl_set_error_handler_off , IO (Ptr <gsl_error_handler_t>)
+#ccall gsl_set_stream_handler , Ptr <gsl_stream_handler_t> -> IO (Ptr <gsl_stream_handler_t>)
+#ccall gsl_set_stream , Ptr CFile -> IO (Ptr CFile)
+
+#cinline GSL_ERROR_SELECT_2 , CInt -> CInt -> CInt
+#cinline GSL_ERROR_SELECT_3 , CInt -> CInt -> CInt -> CInt
+#cinline GSL_ERROR_SELECT_4 , CInt -> CInt -> CInt -> CInt -> CInt
+#cinline GSL_ERROR_SELECT_5 , CInt -> CInt -> CInt -> CInt -> CInt -> CInt
+#cinline GSL_STATUS_UPDATE , Ptr CInt -> CInt -> IO ()
+
diff --git a/src/Bindings/Gsl/FastFourierTransforms.hsc b/src/Bindings/Gsl/FastFourierTransforms.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/FastFourierTransforms.hsc
@@ -0,0 +1,168 @@
+#include <bindings.dsl.h>
+#include <gsl/gsl_fft.h>
+#include <gsl/gsl_fft_complex_float.h>
+#include <gsl/gsl_fft_complex.h>
+#include <gsl/gsl_fft_halfcomplex_float.h>
+#include <gsl/gsl_fft_halfcomplex.h>
+#include <gsl/gsl_fft_real_float.h>
+#include <gsl/gsl_fft_real.h>
+
+-- | <http://www.gnu.org/software/gsl/manual/html_node/Fast-Fourier-Transforms.html>
+
+module Bindings.Gsl.FastFourierTransforms where
+#strict_import
+import Bindings.Gsl.ComplexNumbers
+
+#integral_t gsl_fft_direction
+
+#num gsl_fft_forward
+#num gsl_fft_backward
+
+
+#ccall gsl_fft_complex_float_radix2_forward , <gsl_complex_packed_array_float> -> CSize -> CSize -> IO CInt
+#ccall gsl_fft_complex_float_radix2_backward , <gsl_complex_packed_array_float> -> CSize -> CSize -> IO CInt
+#ccall gsl_fft_complex_float_radix2_inverse , <gsl_complex_packed_array_float> -> CSize -> CSize -> IO CInt
+#ccall gsl_fft_complex_float_radix2_transform , <gsl_complex_packed_array_float> -> CSize -> CSize -> <gsl_fft_direction> -> IO CInt
+#ccall gsl_fft_complex_float_radix2_dif_forward , <gsl_complex_packed_array_float> -> CSize -> CSize -> IO CInt
+#ccall gsl_fft_complex_float_radix2_dif_backward , <gsl_complex_packed_array_float> -> CSize -> CSize -> IO CInt
+#ccall gsl_fft_complex_float_radix2_dif_inverse , <gsl_complex_packed_array_float> -> CSize -> CSize -> IO CInt
+#ccall gsl_fft_complex_float_radix2_dif_transform , <gsl_complex_packed_array_float> -> CSize -> CSize -> <gsl_fft_direction> -> IO CInt
+
+#starttype gsl_fft_complex_wavetable_float
+#field n , CSize
+#field nf , CSize
+#array_field factor , CSize
+#array_field twiddle , Ptr <gsl_complex_float>
+#field trig , Ptr <gsl_complex_float>
+#stoptype
+
+
+#starttype gsl_fft_complex_workspace_float
+#field n , CSize
+#field scratch , Ptr CFloat
+#stoptype
+
+#ccall gsl_fft_complex_wavetable_float_alloc , CSize -> IO (Ptr <gsl_fft_complex_wavetable_float>)
+#ccall gsl_fft_complex_wavetable_float_free , Ptr <gsl_fft_complex_wavetable_float> -> IO ()
+#ccall gsl_fft_complex_workspace_float_alloc , CSize -> IO (Ptr <gsl_fft_complex_workspace_float>)
+#ccall gsl_fft_complex_workspace_float_free , Ptr <gsl_fft_complex_workspace_float> -> IO ()
+#ccall gsl_fft_complex_float_memcpy , Ptr <gsl_fft_complex_wavetable_float> -> Ptr <gsl_fft_complex_wavetable_float> -> IO CInt
+#ccall gsl_fft_complex_float_forward , <gsl_complex_packed_array_float> -> CSize -> CSize -> Ptr <gsl_fft_complex_wavetable_float> -> Ptr <gsl_fft_complex_workspace_float> -> IO CInt
+#ccall gsl_fft_complex_float_backward , <gsl_complex_packed_array_float> -> CSize -> CSize -> Ptr <gsl_fft_complex_wavetable_float> -> Ptr <gsl_fft_complex_workspace_float> -> IO CInt
+#ccall gsl_fft_complex_float_inverse , <gsl_complex_packed_array_float> -> CSize -> CSize -> Ptr <gsl_fft_complex_wavetable_float> -> Ptr <gsl_fft_complex_workspace_float> -> IO CInt
+#ccall gsl_fft_complex_float_transform , <gsl_complex_packed_array_float> -> CSize -> CSize -> Ptr <gsl_fft_complex_wavetable_float> -> Ptr <gsl_fft_complex_workspace_float> -> <gsl_fft_direction> -> IO CInt
+#ccall gsl_fft_complex_radix2_forward , <gsl_complex_packed_array> -> CSize -> CSize -> IO CInt
+#ccall gsl_fft_complex_radix2_backward , <gsl_complex_packed_array> -> CSize -> CSize -> IO CInt
+#ccall gsl_fft_complex_radix2_inverse , <gsl_complex_packed_array> -> CSize -> CSize -> IO CInt
+#ccall gsl_fft_complex_radix2_transform , <gsl_complex_packed_array> -> CSize -> CSize -> <gsl_fft_direction> -> IO CInt
+#ccall gsl_fft_complex_radix2_dif_forward , <gsl_complex_packed_array> -> CSize -> CSize -> IO CInt
+#ccall gsl_fft_complex_radix2_dif_backward , <gsl_complex_packed_array> -> CSize -> CSize -> IO CInt
+#ccall gsl_fft_complex_radix2_dif_inverse , <gsl_complex_packed_array> -> CSize -> CSize -> IO CInt
+#ccall gsl_fft_complex_radix2_dif_transform , <gsl_complex_packed_array> -> CSize -> CSize -> <gsl_fft_direction> -> IO CInt
+
+#starttype gsl_fft_complex_wavetable
+#field n , CSize
+#field nf , CSize
+#array_field factor , CSize
+#array_field twiddle , Ptr <gsl_complex>
+#field trig , Ptr <gsl_complex>
+#stoptype
+
+
+#starttype gsl_fft_complex_workspace
+#field n , CSize
+#field scratch , Ptr CDouble
+#stoptype
+
+#ccall gsl_fft_complex_wavetable_alloc , CSize -> IO (Ptr <gsl_fft_complex_wavetable>)
+#ccall gsl_fft_complex_wavetable_free , Ptr <gsl_fft_complex_wavetable> -> IO ()
+#ccall gsl_fft_complex_workspace_alloc , CSize -> IO (Ptr <gsl_fft_complex_workspace>)
+#ccall gsl_fft_complex_workspace_free , Ptr <gsl_fft_complex_workspace> -> IO ()
+#ccall gsl_fft_complex_memcpy , Ptr <gsl_fft_complex_wavetable> -> Ptr <gsl_fft_complex_wavetable> -> IO CInt
+#ccall gsl_fft_complex_forward , <gsl_complex_packed_array> -> CSize -> CSize -> Ptr <gsl_fft_complex_wavetable> -> Ptr <gsl_fft_complex_workspace> -> IO CInt
+#ccall gsl_fft_complex_backward , <gsl_complex_packed_array> -> CSize -> CSize -> Ptr <gsl_fft_complex_wavetable> -> Ptr <gsl_fft_complex_workspace> -> IO CInt
+#ccall gsl_fft_complex_inverse , <gsl_complex_packed_array> -> CSize -> CSize -> Ptr <gsl_fft_complex_wavetable> -> Ptr <gsl_fft_complex_workspace> -> IO CInt
+#ccall gsl_fft_complex_transform , <gsl_complex_packed_array> -> CSize -> CSize -> Ptr <gsl_fft_complex_wavetable> -> Ptr <gsl_fft_complex_workspace> -> <gsl_fft_direction> -> IO CInt
+#ccall gsl_fft_halfcomplex_float_radix2_backward , Ptr CFloat -> CSize -> CSize -> IO CInt
+#ccall gsl_fft_halfcomplex_float_radix2_inverse , Ptr CFloat -> CSize -> CSize -> IO CInt
+#ccall gsl_fft_halfcomplex_float_radix2_transform , Ptr CFloat -> CSize -> CSize -> IO CInt
+
+#starttype gsl_fft_halfcomplex_wavetable_float
+#array_field twiddle , Ptr <gsl_complex_float>
+#field n , CSize
+#field nf , CSize
+#array_field factor , CSize
+#field trig , Ptr <gsl_complex_float>
+#stoptype
+
+#ccall gsl_fft_halfcomplex_wavetable_float_alloc , CSize -> IO (Ptr <gsl_fft_halfcomplex_wavetable_float>)
+#ccall gsl_fft_halfcomplex_wavetable_float_free , Ptr <gsl_fft_halfcomplex_wavetable_float> -> IO ()
+#ccall gsl_fft_halfcomplex_float_backward , Ptr CFloat -> CSize -> CSize -> Ptr <gsl_fft_halfcomplex_wavetable_float> -> Ptr <gsl_fft_real_workspace_float> -> IO CInt
+#ccall gsl_fft_halfcomplex_float_inverse , Ptr CFloat -> CSize -> CSize -> Ptr <gsl_fft_halfcomplex_wavetable_float> -> Ptr <gsl_fft_real_workspace_float> -> IO CInt
+#ccall gsl_fft_halfcomplex_float_transform , Ptr CFloat -> CSize -> CSize -> Ptr <gsl_fft_halfcomplex_wavetable_float> -> Ptr <gsl_fft_real_workspace_float> -> IO CInt
+#ccall gsl_fft_halfcomplex_float_unpack , Ptr CFloat -> Ptr CFloat -> CSize -> CSize -> IO CInt
+#ccall gsl_fft_halfcomplex_float_radix2_unpack , Ptr CFloat -> Ptr CFloat -> CSize -> CSize -> IO CInt
+#ccall gsl_fft_halfcomplex_radix2_backward , Ptr CDouble -> CSize -> CSize -> IO CInt
+#ccall gsl_fft_halfcomplex_radix2_inverse , Ptr CDouble -> CSize -> CSize -> IO CInt
+#ccall gsl_fft_halfcomplex_radix2_transform , Ptr CDouble -> CSize -> CSize -> IO CInt
+
+#starttype gsl_fft_halfcomplex_wavetable
+#field n , CSize
+#field nf , CSize
+#array_field factor , CSize
+#array_field twiddle , Ptr <gsl_complex>
+#field trig , Ptr <gsl_complex>
+#stoptype
+
+#ccall gsl_fft_halfcomplex_wavetable_alloc , CSize -> IO (Ptr <gsl_fft_halfcomplex_wavetable>)
+#ccall gsl_fft_halfcomplex_wavetable_free , Ptr <gsl_fft_halfcomplex_wavetable> -> IO ()
+#ccall gsl_fft_halfcomplex_backward , Ptr CDouble -> CSize -> CSize -> Ptr <gsl_fft_halfcomplex_wavetable> -> Ptr <gsl_fft_real_workspace> -> IO CInt
+#ccall gsl_fft_halfcomplex_inverse , Ptr CDouble -> CSize -> CSize -> Ptr <gsl_fft_halfcomplex_wavetable> -> Ptr <gsl_fft_real_workspace> -> IO CInt
+#ccall gsl_fft_halfcomplex_transform , Ptr CDouble -> CSize -> CSize -> Ptr <gsl_fft_halfcomplex_wavetable> -> Ptr <gsl_fft_real_workspace> -> IO CInt
+#ccall gsl_fft_halfcomplex_unpack , Ptr CDouble -> Ptr CDouble -> CSize -> CSize -> IO CInt
+#ccall gsl_fft_halfcomplex_radix2_unpack , Ptr CDouble -> Ptr CDouble -> CSize -> CSize -> IO CInt
+#ccall gsl_fft_real_float_radix2_transform , Ptr CFloat -> CSize -> CSize -> IO CInt
+
+#starttype gsl_fft_real_wavetable_float
+#field n , CSize
+#field nf , CSize
+#array_field factor , CSize
+#array_field twiddle , Ptr <gsl_complex_float>
+#field trig , Ptr <gsl_complex_float>
+#stoptype
+
+
+#starttype gsl_fft_real_workspace_float
+#field n , CSize
+#field scratch , Ptr CFloat
+#stoptype
+
+#ccall gsl_fft_real_wavetable_float_alloc , CSize -> IO (Ptr <gsl_fft_real_wavetable_float>)
+#ccall gsl_fft_real_wavetable_float_free , Ptr <gsl_fft_real_wavetable_float> -> IO ()
+#ccall gsl_fft_real_workspace_float_alloc , CSize -> IO (Ptr <gsl_fft_real_workspace_float>)
+#ccall gsl_fft_real_workspace_float_free , Ptr <gsl_fft_real_workspace_float> -> IO ()
+#ccall gsl_fft_real_float_transform , Ptr CFloat -> CSize -> CSize -> Ptr <gsl_fft_real_wavetable_float> -> Ptr <gsl_fft_real_workspace_float> -> IO CInt
+#ccall gsl_fft_real_float_unpack , Ptr CFloat -> Ptr CFloat -> CSize -> CSize -> IO CInt
+#ccall gsl_fft_real_radix2_transform , Ptr CDouble -> CSize -> CSize -> IO CInt
+
+#starttype gsl_fft_real_wavetable
+#field n , CSize
+#field nf , CSize
+#array_field factor , CSize
+#array_field twiddle , Ptr <gsl_complex>
+#field trig , Ptr <gsl_complex>
+#stoptype
+
+
+#starttype gsl_fft_real_workspace
+#field n , CSize
+#field scratch , Ptr CDouble
+#stoptype
+
+#ccall gsl_fft_real_wavetable_alloc , CSize -> IO (Ptr <gsl_fft_real_wavetable>)
+#ccall gsl_fft_real_wavetable_free , Ptr <gsl_fft_real_wavetable> -> IO ()
+#ccall gsl_fft_real_workspace_alloc , CSize -> IO (Ptr <gsl_fft_real_workspace>)
+#ccall gsl_fft_real_workspace_free , Ptr <gsl_fft_real_workspace> -> IO ()
+#ccall gsl_fft_real_transform , Ptr CDouble -> CSize -> CSize -> Ptr <gsl_fft_real_wavetable> -> Ptr <gsl_fft_real_workspace> -> IO CInt
+#ccall gsl_fft_real_unpack , Ptr CDouble -> Ptr CDouble -> CSize -> CSize -> IO CInt
+
diff --git a/src/Bindings/Gsl/Histograms.hsc b/src/Bindings/Gsl/Histograms.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/Histograms.hsc
@@ -0,0 +1,126 @@
+#include <bindings.dsl.h>
+#include <gsl/gsl_histogram.h>
+#include <gsl/gsl_histogram2d.h>
+
+-- | <http://www.gnu.org/software/gsl/manual/html_node/Histograms.html>
+
+module Bindings.Gsl.Histograms where
+#strict_import
+
+#starttype gsl_histogram
+#field n , CSize
+#field range , Ptr CDouble
+#field bin , Ptr CDouble
+#stoptype
+
+#starttype gsl_histogram_pdf
+#field n , CSize
+#field range , Ptr CDouble
+#field sum , Ptr CDouble
+#stoptype
+
+#ccall gsl_histogram_alloc , CSize -> IO (Ptr <gsl_histogram>)
+#ccall gsl_histogram_calloc , CSize -> IO (Ptr <gsl_histogram>)
+#ccall gsl_histogram_calloc_uniform , CSize -> CDouble -> CDouble -> IO (Ptr <gsl_histogram>)
+#ccall gsl_histogram_free , Ptr <gsl_histogram> -> IO ()
+#ccall gsl_histogram_increment , Ptr <gsl_histogram> -> CDouble -> IO CInt
+#ccall gsl_histogram_accumulate , Ptr <gsl_histogram> -> CDouble -> CDouble -> IO CInt
+#ccall gsl_histogram_find , Ptr <gsl_histogram> -> CDouble -> Ptr CSize -> IO CInt
+#ccall gsl_histogram_get , Ptr <gsl_histogram> -> CSize -> IO CDouble
+#ccall gsl_histogram_get_range , Ptr <gsl_histogram> -> CSize -> Ptr CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_histogram_max , Ptr <gsl_histogram> -> IO CDouble
+#ccall gsl_histogram_min , Ptr <gsl_histogram> -> IO CDouble
+#ccall gsl_histogram_bins , Ptr <gsl_histogram> -> IO CSize
+#ccall gsl_histogram_reset , Ptr <gsl_histogram> -> IO ()
+#ccall gsl_histogram_calloc_range , CSize -> Ptr CDouble -> IO (Ptr <gsl_histogram>)
+#ccall gsl_histogram_set_ranges , Ptr <gsl_histogram> -> Ptr CDouble -> CSize -> IO CInt
+#ccall gsl_histogram_set_ranges_uniform , Ptr <gsl_histogram> -> CDouble -> CDouble -> IO CInt
+#ccall gsl_histogram_memcpy , Ptr <gsl_histogram> -> Ptr <gsl_histogram> -> IO CInt
+#ccall gsl_histogram_clone , Ptr <gsl_histogram> -> IO (Ptr <gsl_histogram>)
+#ccall gsl_histogram_max_val , Ptr <gsl_histogram> -> IO CDouble
+#ccall gsl_histogram_max_bin , Ptr <gsl_histogram> -> IO CSize
+#ccall gsl_histogram_min_val , Ptr <gsl_histogram> -> IO CDouble
+#ccall gsl_histogram_min_bin , Ptr <gsl_histogram> -> IO CSize
+#ccall gsl_histogram_equal_bins_p , Ptr <gsl_histogram> -> Ptr <gsl_histogram> -> IO CInt
+#ccall gsl_histogram_add , Ptr <gsl_histogram> -> Ptr <gsl_histogram> -> IO CInt
+#ccall gsl_histogram_sub , Ptr <gsl_histogram> -> Ptr <gsl_histogram> -> IO CInt
+#ccall gsl_histogram_mul , Ptr <gsl_histogram> -> Ptr <gsl_histogram> -> IO CInt
+#ccall gsl_histogram_div , Ptr <gsl_histogram> -> Ptr <gsl_histogram> -> IO CInt
+#ccall gsl_histogram_scale , Ptr <gsl_histogram> -> CDouble -> IO CInt
+#ccall gsl_histogram_shift , Ptr <gsl_histogram> -> CDouble -> IO CInt
+#ccall gsl_histogram_sigma , Ptr <gsl_histogram> -> IO CDouble
+#ccall gsl_histogram_mean , Ptr <gsl_histogram> -> IO CDouble
+#ccall gsl_histogram_sum , Ptr <gsl_histogram> -> IO CDouble
+#ccall gsl_histogram_fwrite , Ptr CFile -> Ptr <gsl_histogram> -> IO CInt
+#ccall gsl_histogram_fread , Ptr CFile -> Ptr <gsl_histogram> -> IO CInt
+#ccall gsl_histogram_fprintf , Ptr CFile -> Ptr <gsl_histogram> -> CString -> CString -> IO CInt
+#ccall gsl_histogram_fscanf , Ptr CFile -> Ptr <gsl_histogram> -> IO CInt
+#ccall gsl_histogram_pdf_alloc , CSize -> IO (Ptr <gsl_histogram_pdf>)
+#ccall gsl_histogram_pdf_init , Ptr <gsl_histogram_pdf> -> Ptr <gsl_histogram> -> IO CInt
+#ccall gsl_histogram_pdf_free , Ptr <gsl_histogram_pdf> -> IO ()
+#ccall gsl_histogram_pdf_sample , Ptr <gsl_histogram_pdf> -> CDouble -> IO CDouble
+
+#starttype gsl_histogram2d
+#field nx , CSize
+#field ny , CSize
+#field xrange , Ptr CDouble
+#field yrange , Ptr CDouble
+#field bin , Ptr CDouble
+#stoptype
+
+#starttype gsl_histogram2d_pdf
+#field nx , CSize
+#field ny , CSize
+#field xrange , Ptr CDouble
+#field yrange , Ptr CDouble
+#field sum , Ptr CDouble
+#stoptype
+
+#ccall gsl_histogram2d_alloc , CSize -> CSize -> IO (Ptr <gsl_histogram2d>)
+#ccall gsl_histogram2d_calloc , CSize -> CSize -> IO (Ptr <gsl_histogram2d>)
+#ccall gsl_histogram2d_calloc_uniform , CSize -> CSize -> CDouble -> CDouble -> CDouble -> CDouble -> IO (Ptr <gsl_histogram2d>)
+#ccall gsl_histogram2d_free , Ptr <gsl_histogram2d> -> IO ()
+#ccall gsl_histogram2d_increment , Ptr <gsl_histogram2d> -> CDouble -> CDouble -> IO CInt
+#ccall gsl_histogram2d_accumulate , Ptr <gsl_histogram2d> -> CDouble -> CDouble -> CDouble -> IO CInt
+#ccall gsl_histogram2d_find , Ptr <gsl_histogram2d> -> CDouble -> CDouble -> Ptr CSize -> Ptr CSize -> IO CInt
+#ccall gsl_histogram2d_get , Ptr <gsl_histogram2d> -> CSize -> CSize -> IO CDouble
+#ccall gsl_histogram2d_get_xrange , Ptr <gsl_histogram2d> -> CSize -> Ptr CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_histogram2d_get_yrange , Ptr <gsl_histogram2d> -> CSize -> Ptr CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_histogram2d_xmax , Ptr <gsl_histogram2d> -> IO CDouble
+#ccall gsl_histogram2d_xmin , Ptr <gsl_histogram2d> -> IO CDouble
+#ccall gsl_histogram2d_nx , Ptr <gsl_histogram2d> -> IO CSize
+#ccall gsl_histogram2d_ymax , Ptr <gsl_histogram2d> -> IO CDouble
+#ccall gsl_histogram2d_ymin , Ptr <gsl_histogram2d> -> IO CDouble
+#ccall gsl_histogram2d_ny , Ptr <gsl_histogram2d> -> IO CSize
+#ccall gsl_histogram2d_reset , Ptr <gsl_histogram2d> -> IO ()
+#ccall gsl_histogram2d_calloc_range , CSize -> CSize -> Ptr CDouble -> Ptr CDouble -> IO (Ptr <gsl_histogram2d>)
+#ccall gsl_histogram2d_set_ranges_uniform , Ptr <gsl_histogram2d> -> CDouble -> CDouble -> CDouble -> CDouble -> IO CInt
+#ccall gsl_histogram2d_set_ranges , Ptr <gsl_histogram2d> -> Ptr CDouble -> CSize -> Ptr CDouble -> CSize -> IO CInt
+#ccall gsl_histogram2d_memcpy , Ptr <gsl_histogram2d> -> Ptr <gsl_histogram2d> -> IO CInt
+#ccall gsl_histogram2d_clone , Ptr <gsl_histogram2d> -> IO (Ptr <gsl_histogram2d>)
+#ccall gsl_histogram2d_max_val , Ptr <gsl_histogram2d> -> IO CDouble
+#ccall gsl_histogram2d_max_bin , Ptr <gsl_histogram2d> -> Ptr CSize -> Ptr CSize -> IO ()
+#ccall gsl_histogram2d_min_val , Ptr <gsl_histogram2d> -> IO CDouble
+#ccall gsl_histogram2d_min_bin , Ptr <gsl_histogram2d> -> Ptr CSize -> Ptr CSize -> IO ()
+#ccall gsl_histogram2d_xmean , Ptr <gsl_histogram2d> -> IO CDouble
+#ccall gsl_histogram2d_ymean , Ptr <gsl_histogram2d> -> IO CDouble
+#ccall gsl_histogram2d_xsigma , Ptr <gsl_histogram2d> -> IO CDouble
+#ccall gsl_histogram2d_ysigma , Ptr <gsl_histogram2d> -> IO CDouble
+#ccall gsl_histogram2d_cov , Ptr <gsl_histogram2d> -> IO CDouble
+#ccall gsl_histogram2d_sum , Ptr <gsl_histogram2d> -> IO CDouble
+#ccall gsl_histogram2d_equal_bins_p , Ptr <gsl_histogram2d> -> Ptr <gsl_histogram2d> -> IO CInt
+#ccall gsl_histogram2d_add , Ptr <gsl_histogram2d> -> Ptr <gsl_histogram2d> -> IO CInt
+#ccall gsl_histogram2d_sub , Ptr <gsl_histogram2d> -> Ptr <gsl_histogram2d> -> IO CInt
+#ccall gsl_histogram2d_mul , Ptr <gsl_histogram2d> -> Ptr <gsl_histogram2d> -> IO CInt
+#ccall gsl_histogram2d_div , Ptr <gsl_histogram2d> -> Ptr <gsl_histogram2d> -> IO CInt
+#ccall gsl_histogram2d_scale , Ptr <gsl_histogram2d> -> CDouble -> IO CInt
+#ccall gsl_histogram2d_shift , Ptr <gsl_histogram2d> -> CDouble -> IO CInt
+#ccall gsl_histogram2d_fwrite , Ptr CFile -> Ptr <gsl_histogram2d> -> IO CInt
+#ccall gsl_histogram2d_fread , Ptr CFile -> Ptr <gsl_histogram2d> -> IO CInt
+#ccall gsl_histogram2d_fprintf , Ptr CFile -> Ptr <gsl_histogram2d> -> CString -> CString -> IO CInt
+#ccall gsl_histogram2d_fscanf , Ptr CFile -> Ptr <gsl_histogram2d> -> IO CInt
+#ccall gsl_histogram2d_pdf_alloc , CSize -> CSize -> IO (Ptr <gsl_histogram2d_pdf>)
+#ccall gsl_histogram2d_pdf_init , Ptr <gsl_histogram2d_pdf> -> Ptr <gsl_histogram2d> -> IO CInt
+#ccall gsl_histogram2d_pdf_free , Ptr <gsl_histogram2d_pdf> -> IO ()
+#ccall gsl_histogram2d_pdf_sample , Ptr <gsl_histogram2d_pdf> -> CDouble -> CDouble -> Ptr CDouble -> Ptr CDouble -> IO CInt
+
diff --git a/src/Bindings/Gsl/IeeeFloatingPointArithmetic.hsc b/src/Bindings/Gsl/IeeeFloatingPointArithmetic.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/IeeeFloatingPointArithmetic.hsc
@@ -0,0 +1,54 @@
+#include <bindings.dsl.h>
+#include <gsl/gsl_ieee_utils.h>
+
+-- | <http://www.gnu.org/software/gsl/manual/html_node/IEEE-floating_002dpoint-arithmetic.html>
+
+module Bindings.Gsl.IeeeFloatingPointArithmetic where
+#strict_import
+
+#num GSL_IEEE_TYPE_NAN
+#num GSL_IEEE_TYPE_INF
+#num GSL_IEEE_TYPE_NORMAL
+#num GSL_IEEE_TYPE_DENORMAL
+#num GSL_IEEE_TYPE_ZERO
+
+#starttype gsl_ieee_float_rep
+#field sign , CInt
+#array_field mantissa , CChar
+#field exponent , CInt
+#field type , CInt
+#stoptype
+
+#starttype gsl_ieee_double_rep
+#field sign , CInt
+#array_field mantissa , CChar
+#field exponent , CInt
+#field type , CInt
+#stoptype
+
+#ccall gsl_ieee_printf_float , Ptr CFloat -> IO ()
+#ccall gsl_ieee_printf_double , Ptr CDouble -> IO ()
+#ccall gsl_ieee_fprintf_float , Ptr CFile -> Ptr CFloat -> IO ()
+#ccall gsl_ieee_fprintf_double , Ptr CFile -> Ptr CDouble -> IO ()
+#ccall gsl_ieee_float_to_rep , Ptr CFloat -> Ptr <gsl_ieee_float_rep> -> IO ()
+#ccall gsl_ieee_double_to_rep , Ptr CDouble -> Ptr <gsl_ieee_double_rep> -> IO ()
+
+#num GSL_IEEE_SINGLE_PRECISION
+#num GSL_IEEE_DOUBLE_PRECISION
+#num GSL_IEEE_EXTENDED_PRECISION
+#num GSL_IEEE_ROUND_TO_NEAREST
+#num GSL_IEEE_ROUND_DOWN
+#num GSL_IEEE_ROUND_UP
+#num GSL_IEEE_ROUND_TO_ZERO
+#num GSL_IEEE_MASK_INVALID
+#num GSL_IEEE_MASK_DENORMALIZED
+#num GSL_IEEE_MASK_DIVISION_BY_ZERO
+#num GSL_IEEE_MASK_OVERFLOW
+#num GSL_IEEE_MASK_UNDERFLOW
+#num GSL_IEEE_MASK_ALL
+#num GSL_IEEE_TRAP_INEXACT
+
+#ccall gsl_ieee_env_setup , IO ()
+#ccall gsl_ieee_read_mode_string , CString -> Ptr CInt -> Ptr CInt -> Ptr CInt -> IO CInt
+#ccall gsl_ieee_set_mode , CInt -> CInt -> CInt -> CInt -> CInt -> IO CInt
+
diff --git a/src/Bindings/Gsl/Interpolation.hsc b/src/Bindings/Gsl/Interpolation.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/Interpolation.hsc
@@ -0,0 +1,83 @@
+#include <bindings.dsl.h>
+#include <gsl/gsl_interp.h>
+#include <gsl/gsl_spline.h>
+
+-- | <http://www.gnu.org/software/gsl/manual/html_node/Interpolation.html>
+
+module Bindings.Gsl.Interpolation where
+#strict_import
+
+#starttype gsl_interp_accel
+#field cache , CSize
+#field miss_count , CSize
+#field hit_count , CSize
+#stoptype
+
+#starttype gsl_interp_type
+#field name , CString
+#field min_size , CUInt
+#field alloc , FunPtr (CSize -> IO (Ptr ()))
+#field init , FunPtr (Ptr () -> Ptr CDouble -> Ptr CDouble -> CSize -> IO  CInt)
+#field eval , FunPtr ( Ptr () -> Ptr CDouble -> Ptr CDouble -> CSize -> CDouble -> Ptr <gsl_interp_accel> -> Ptr CDouble -> IO  CInt)
+#field eval_deriv , FunPtr ( Ptr () -> Ptr CDouble -> Ptr CDouble -> CSize -> CDouble -> Ptr <gsl_interp_accel> -> Ptr CDouble -> IO  CInt)
+#field eval_deriv2 , FunPtr ( Ptr () -> Ptr CDouble -> Ptr CDouble -> CSize -> CDouble -> Ptr <gsl_interp_accel> -> Ptr CDouble -> IO  CInt)
+#field eval_integ , FunPtr ( Ptr () -> Ptr CDouble -> Ptr CDouble -> CSize -> Ptr <gsl_interp_accel> -> CDouble -> CDouble -> Ptr CDouble -> IO  CInt)
+#field free , FunPtr (Ptr () -> IO ())
+#stoptype
+
+#starttype gsl_interp
+#field type , Ptr <gsl_interp_type>
+#field xmin , CDouble
+#field xmax , CDouble
+#field size , CSize
+#field state , Ptr ()
+#stoptype
+
+#globalvar gsl_interp_linear , Ptr gsl_interp_type
+#globalvar gsl_interp_polynomial , Ptr gsl_interp_type
+#globalvar gsl_interp_cspline , Ptr gsl_interp_type
+#globalvar gsl_interp_cspline_periodic , Ptr gsl_interp_type
+#globalvar gsl_interp_akima , Ptr gsl_interp_type
+#globalvar gsl_interp_akima_periodic , Ptr gsl_interp_type
+
+#ccall gsl_interp_accel_alloc , IO (Ptr <gsl_interp_accel>)
+#ccall gsl_interp_accel_reset , Ptr <gsl_interp_accel> -> IO CInt
+#ccall gsl_interp_accel_free , Ptr <gsl_interp_accel> -> IO ()
+#ccall gsl_interp_alloc , Ptr <gsl_interp_type> -> CSize -> IO (Ptr <gsl_interp>)
+#ccall gsl_interp_init , Ptr <gsl_interp> -> Ptr CDouble -> Ptr CDouble -> CSize -> IO CInt
+#ccall gsl_interp_name , Ptr <gsl_interp> -> IO CString 
+#ccall gsl_interp_min_size , Ptr <gsl_interp> -> IO CUInt
+#ccall gsl_interp_type_min_size , Ptr <gsl_interp_type> -> IO CUInt
+#ccall gsl_interp_eval_e , Ptr <gsl_interp> -> Ptr CDouble -> Ptr CDouble -> CDouble -> Ptr <gsl_interp_accel> -> Ptr CDouble -> IO CInt
+#ccall gsl_interp_eval , Ptr <gsl_interp> -> Ptr CDouble -> Ptr CDouble -> CDouble -> Ptr <gsl_interp_accel> -> IO CDouble
+#ccall gsl_interp_eval_deriv_e , Ptr <gsl_interp> -> Ptr CDouble -> Ptr CDouble -> CDouble -> Ptr <gsl_interp_accel> -> Ptr CDouble -> IO CInt
+#ccall gsl_interp_eval_deriv , Ptr <gsl_interp> -> Ptr CDouble -> Ptr CDouble -> CDouble -> Ptr <gsl_interp_accel> -> IO CDouble
+#ccall gsl_interp_eval_deriv2_e , Ptr <gsl_interp> -> Ptr CDouble -> Ptr CDouble -> CDouble -> Ptr <gsl_interp_accel> -> Ptr CDouble -> IO CInt
+#ccall gsl_interp_eval_deriv2 , Ptr <gsl_interp> -> Ptr CDouble -> Ptr CDouble -> CDouble -> Ptr <gsl_interp_accel> -> IO CDouble
+#ccall gsl_interp_eval_integ_e , Ptr <gsl_interp> -> Ptr CDouble -> Ptr CDouble -> CDouble -> CDouble -> Ptr <gsl_interp_accel> -> Ptr CDouble -> IO CInt
+#ccall gsl_interp_eval_integ , Ptr <gsl_interp> -> Ptr CDouble -> Ptr CDouble -> CDouble -> CDouble -> Ptr <gsl_interp_accel> -> IO CDouble
+#ccall gsl_interp_free , Ptr <gsl_interp> -> IO ()
+#ccall gsl_interp_bsearch , Ptr CDouble -> CDouble -> CSize -> CSize -> IO CSize
+#ccall gsl_interp_accel_find , Ptr <gsl_interp_accel> -> Ptr CDouble -> CSize -> CDouble -> IO CSize
+
+#starttype gsl_spline
+#field interp , Ptr <gsl_interp>
+#field x , Ptr CDouble
+#field y , Ptr CDouble
+#field size , CSize
+#stoptype
+
+#ccall gsl_spline_alloc , Ptr <gsl_interp_type> -> CSize -> IO (Ptr <gsl_spline>)
+#ccall gsl_spline_init , Ptr <gsl_spline> -> Ptr CDouble -> Ptr CDouble -> CSize -> IO CInt
+#ccall gsl_spline_name , Ptr <gsl_spline> -> IO CString 
+#ccall gsl_spline_min_size , Ptr <gsl_spline> -> IO CUInt
+#ccall gsl_spline_eval_e , Ptr <gsl_spline> -> CDouble -> Ptr <gsl_interp_accel> -> Ptr CDouble -> IO CInt
+#ccall gsl_spline_eval , Ptr <gsl_spline> -> CDouble -> Ptr <gsl_interp_accel> -> IO CDouble
+#ccall gsl_spline_eval_deriv_e , Ptr <gsl_spline> -> CDouble -> Ptr <gsl_interp_accel> -> Ptr CDouble -> IO CInt
+#ccall gsl_spline_eval_deriv , Ptr <gsl_spline> -> CDouble -> Ptr <gsl_interp_accel> -> IO CDouble
+#ccall gsl_spline_eval_deriv2_e , Ptr <gsl_spline> -> CDouble -> Ptr <gsl_interp_accel> -> Ptr CDouble -> IO CInt
+#ccall gsl_spline_eval_deriv2 , Ptr <gsl_spline> -> CDouble -> Ptr <gsl_interp_accel> -> IO CDouble
+#ccall gsl_spline_eval_integ_e , Ptr <gsl_spline> -> CDouble -> CDouble -> Ptr <gsl_interp_accel> -> Ptr CDouble -> IO CInt
+#ccall gsl_spline_eval_integ , Ptr <gsl_spline> -> CDouble -> CDouble -> Ptr <gsl_interp_accel> -> IO CDouble
+#ccall gsl_spline_free , Ptr <gsl_spline> -> IO ()
+
diff --git a/src/Bindings/Gsl/LeastSquaresFitting.hsc b/src/Bindings/Gsl/LeastSquaresFitting.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/LeastSquaresFitting.hsc
@@ -0,0 +1,71 @@
+#include <bindings.dsl.h>
+#include <gsl/gsl_fit.h>
+#include <gsl/gsl_multifit.h>
+
+-- | <http://www.gnu.org/software/gsl/manual/html_node/Least_002dSquares-Fitting.html>
+
+module Bindings.Gsl.LeastSquaresFitting where
+#strict_import
+import Bindings.Gsl.VectorsAndMatrices.DataTypes
+
+#ccall gsl_fit_linear , Ptr CDouble -> CSize -> \
+    Ptr CDouble -> CSize -> CSize -> Ptr CDouble -> \
+    Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> \
+    Ptr CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_fit_wlinear , Ptr CDouble -> CSize -> \
+    Ptr CDouble -> CSize -> Ptr CDouble -> CSize -> \
+    CSize -> Ptr CDouble -> Ptr CDouble -> \
+    Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> \
+    Ptr CDouble -> IO CInt
+#ccall gsl_fit_linear_est , CDouble -> CDouble -> \
+    CDouble -> CDouble -> CDouble -> CDouble -> \
+    Ptr CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_fit_mul , Ptr CDouble -> CSize -> \
+    Ptr CDouble -> CSize -> CSize -> Ptr CDouble -> \
+    Ptr CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_fit_wmul , Ptr CDouble -> CSize -> \
+    Ptr CDouble -> CSize -> Ptr CDouble -> CSize -> \
+    CSize -> Ptr CDouble -> Ptr CDouble -> \
+    Ptr CDouble -> IO CInt
+#ccall gsl_fit_mul_est , CDouble -> CDouble -> \
+    CDouble -> Ptr CDouble -> Ptr CDouble -> IO CInt
+
+#starttype gsl_multifit_linear_workspace
+#field n , CSize
+#field p , CSize
+#field A , Ptr <gsl_matrix>
+#field Q , Ptr <gsl_matrix>
+#field QSI , Ptr <gsl_matrix>
+#field S , Ptr <gsl_vector>
+#field t , Ptr <gsl_vector>
+#field xt , Ptr <gsl_vector>
+#field D , Ptr <gsl_vector>
+#stoptype
+
+#ccall gsl_multifit_linear_alloc , CSize -> CSize -> \
+    IO (Ptr <gsl_multifit_linear_workspace>)
+#ccall gsl_multifit_linear_free , Ptr <gsl_multifit_linear_workspace> -> IO ()
+#ccall gsl_multifit_linear , Ptr <gsl_matrix> -> Ptr <gsl_vector> -> \
+    Ptr <gsl_vector> -> Ptr <gsl_matrix> -> Ptr CDouble -> \
+    Ptr <gsl_multifit_linear_workspace> -> IO CInt
+#ccall gsl_multifit_wlinear , Ptr <gsl_matrix> -> Ptr <gsl_vector> -> \
+    Ptr <gsl_vector> -> Ptr <gsl_vector> -> Ptr <gsl_matrix> -> \
+    Ptr CDouble -> Ptr <gsl_multifit_linear_workspace> -> IO CInt
+#ccall gsl_multifit_linear_svd , Ptr <gsl_matrix> -> Ptr <gsl_vector> -> \
+    CDouble -> Ptr CSize -> Ptr <gsl_vector> -> Ptr <gsl_matrix> -> \
+    Ptr CDouble -> Ptr <gsl_multifit_linear_workspace> -> IO CInt
+#ccall gsl_multifit_wlinear_svd , Ptr <gsl_matrix> -> Ptr <gsl_vector> -> \
+    Ptr <gsl_vector> -> CDouble -> Ptr CSize -> Ptr <gsl_vector> -> \
+    Ptr <gsl_matrix> -> Ptr CDouble -> \
+    Ptr <gsl_multifit_linear_workspace> -> IO CInt
+#ccall gsl_multifit_linear_usvd , Ptr <gsl_matrix> ->  Ptr <gsl_vector> -> \
+    CDouble -> Ptr CSize -> Ptr <gsl_vector> -> Ptr <gsl_matrix> -> \
+    Ptr CDouble -> Ptr <gsl_multifit_linear_workspace> -> IO CInt
+#ccall gsl_multifit_wlinear_usvd , Ptr <gsl_matrix> ->  Ptr <gsl_vector> -> \
+    Ptr <gsl_vector> -> CDouble -> Ptr CSize -> Ptr <gsl_vector> -> \
+    Ptr <gsl_matrix> -> Ptr CDouble -> Ptr <gsl_multifit_linear_workspace> -> \
+    IO CInt
+#ccall gsl_multifit_linear_est , Ptr <gsl_vector> -> Ptr <gsl_vector> -> \
+    Ptr <gsl_matrix> -> Ptr CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_multifit_linear_residuals , Ptr <gsl_matrix> -> \
+    Ptr <gsl_vector> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
diff --git a/src/Bindings/Gsl/LinearAlgebra.hsc b/src/Bindings/Gsl/LinearAlgebra.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/LinearAlgebra.hsc
@@ -0,0 +1,127 @@
+#include <bindings.dsl.h>
+#include <gsl/gsl_linalg.h>
+
+-- | <http://www.gnu.org/software/gsl/manual/html_node/Linear-Algebra.html>
+
+module Bindings.Gsl.LinearAlgebra where
+#strict_import
+import Bindings.Gsl.VectorsAndMatrices.DataTypes
+import Bindings.Gsl.Permutations
+import Bindings.Gsl.ComplexNumbers
+import Bindings.Gsl.SpecialFunctions
+
+#integral_t gsl_linalg_matrix_mod_t
+
+#num GSL_LINALG_MOD_NONE
+#num GSL_LINALG_MOD_TRANSPOSE
+#num GSL_LINALG_MOD_CONJUGATE
+
+#ccall gsl_linalg_matmult , Ptr <gsl_matrix> -> Ptr <gsl_matrix> -> Ptr <gsl_matrix> -> IO CInt
+#ccall gsl_linalg_matmult_mod , Ptr <gsl_matrix> -> <gsl_linalg_matrix_mod_t> -> Ptr <gsl_matrix> -> <gsl_linalg_matrix_mod_t> -> Ptr <gsl_matrix> -> IO CInt
+#ccall gsl_linalg_exponential_ss , Ptr <gsl_matrix> -> Ptr <gsl_matrix> -> <gsl_mode_t> -> IO CInt
+#ccall gsl_linalg_householder_transform , Ptr <gsl_vector> -> IO CDouble
+-- ccall gsl_linalg_complex_householder_transform , Ptr <gsl_vector_complex> -> IO <gsl_complex>
+#ccall gsl_linalg_householder_hm , CDouble -> Ptr <gsl_vector> -> Ptr <gsl_matrix> -> IO CInt
+#ccall gsl_linalg_householder_mh , CDouble -> Ptr <gsl_vector> -> Ptr <gsl_matrix> -> IO CInt
+#ccall gsl_linalg_householder_hv , CDouble -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_householder_hm1 , CDouble -> Ptr <gsl_matrix> -> IO CInt
+-- ccall gsl_linalg_complex_householder_hm , <gsl_complex> -> Ptr <gsl_vector_complex> -> Ptr <gsl_matrix_complex> -> IO CInt
+-- ccall gsl_linalg_complex_householder_mh , <gsl_complex> -> Ptr <gsl_vector_complex> -> Ptr <gsl_matrix_complex> -> IO CInt
+-- ccall gsl_linalg_complex_householder_hv , <gsl_complex> -> Ptr <gsl_vector_complex> -> Ptr <gsl_vector_complex> -> IO CInt
+#ccall gsl_linalg_hessenberg_decomp , Ptr <gsl_matrix> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_hessenberg_unpack , Ptr <gsl_matrix> -> Ptr <gsl_vector> -> Ptr <gsl_matrix> -> IO CInt
+#ccall gsl_linalg_hessenberg_unpack_accum , Ptr <gsl_matrix> -> Ptr <gsl_vector> -> Ptr <gsl_matrix> -> IO CInt
+#ccall gsl_linalg_hessenberg_set_zero , Ptr <gsl_matrix> -> IO CInt
+#ccall gsl_linalg_hessenberg_submatrix , Ptr <gsl_matrix> -> Ptr <gsl_matrix> -> CSize -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_hesstri_decomp , Ptr <gsl_matrix> -> Ptr <gsl_matrix> -> Ptr <gsl_matrix> -> Ptr <gsl_matrix> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_SV_decomp , Ptr <gsl_matrix> -> Ptr <gsl_matrix> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_SV_decomp_mod , Ptr <gsl_matrix> -> Ptr <gsl_matrix> -> Ptr <gsl_matrix> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_SV_decomp_jacobi , Ptr <gsl_matrix> -> Ptr <gsl_matrix> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_SV_solve , Ptr <gsl_matrix> -> Ptr <gsl_matrix> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_LU_decomp , Ptr <gsl_matrix> -> Ptr <gsl_permutation> -> Ptr CInt -> IO CInt
+#ccall gsl_linalg_LU_solve , Ptr <gsl_matrix> -> Ptr <gsl_permutation> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_LU_svx , Ptr <gsl_matrix> -> Ptr <gsl_permutation> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_LU_refine , Ptr <gsl_matrix> -> Ptr <gsl_matrix> -> Ptr <gsl_permutation> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_LU_invert , Ptr <gsl_matrix> -> Ptr <gsl_permutation> -> Ptr <gsl_matrix> -> IO CInt
+#ccall gsl_linalg_LU_det , Ptr <gsl_matrix> -> CInt -> IO CDouble
+#ccall gsl_linalg_LU_lndet , Ptr <gsl_matrix> -> IO CDouble
+#ccall gsl_linalg_LU_sgndet , Ptr <gsl_matrix> -> CInt -> IO CInt
+#ccall gsl_linalg_complex_LU_decomp , Ptr <gsl_matrix_complex> -> Ptr <gsl_permutation> -> Ptr CInt -> IO CInt
+#ccall gsl_linalg_complex_LU_solve , Ptr <gsl_matrix_complex> -> Ptr <gsl_permutation> -> Ptr <gsl_vector_complex> -> Ptr <gsl_vector_complex> -> IO CInt
+#ccall gsl_linalg_complex_LU_svx , Ptr <gsl_matrix_complex> -> Ptr <gsl_permutation> -> Ptr <gsl_vector_complex> -> IO CInt
+#ccall gsl_linalg_complex_LU_refine , Ptr <gsl_matrix_complex> -> Ptr <gsl_matrix_complex> -> Ptr <gsl_permutation> -> Ptr <gsl_vector_complex> -> Ptr <gsl_vector_complex> -> Ptr <gsl_vector_complex> -> IO CInt
+#ccall gsl_linalg_complex_LU_invert , Ptr <gsl_matrix_complex> -> Ptr <gsl_permutation> -> Ptr <gsl_matrix_complex> -> IO CInt
+-- ccall gsl_linalg_complex_LU_det , Ptr <gsl_matrix_complex> -> CInt -> IO <gsl_complex>
+#ccall gsl_linalg_complex_LU_lndet , Ptr <gsl_matrix_complex> -> IO CDouble
+-- ccall gsl_linalg_complex_LU_sgndet , Ptr <gsl_matrix_complex> -> CInt -> IO <gsl_complex>
+#ccall gsl_linalg_QR_decomp , Ptr <gsl_matrix> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_QR_solve , Ptr <gsl_matrix> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_QR_svx , Ptr <gsl_matrix> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_QR_lssolve , Ptr <gsl_matrix> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_QR_QRsolve , Ptr <gsl_matrix> -> Ptr <gsl_matrix> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_QR_Rsolve , Ptr <gsl_matrix> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_QR_Rsvx , Ptr <gsl_matrix> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_QR_update , Ptr <gsl_matrix> -> Ptr <gsl_matrix> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_QR_QTvec , Ptr <gsl_matrix> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_QR_Qvec , Ptr <gsl_matrix> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_QR_QTmat , Ptr <gsl_matrix> -> Ptr <gsl_vector> -> Ptr <gsl_matrix> -> IO CInt
+#ccall gsl_linalg_QR_unpack , Ptr <gsl_matrix> -> Ptr <gsl_vector> -> Ptr <gsl_matrix> -> Ptr <gsl_matrix> -> IO CInt
+#ccall gsl_linalg_R_solve , Ptr <gsl_matrix> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_R_svx , Ptr <gsl_matrix> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_QRPT_decomp , Ptr <gsl_matrix> -> Ptr <gsl_vector> -> Ptr <gsl_permutation> -> Ptr CInt -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_QRPT_decomp2 , Ptr <gsl_matrix> -> Ptr <gsl_matrix> -> Ptr <gsl_matrix> -> Ptr <gsl_vector> -> Ptr <gsl_permutation> -> Ptr CInt -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_QRPT_solve , Ptr <gsl_matrix> -> Ptr <gsl_vector> -> Ptr <gsl_permutation> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_QRPT_svx , Ptr <gsl_matrix> -> Ptr <gsl_vector> -> Ptr <gsl_permutation> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_QRPT_QRsolve , Ptr <gsl_matrix> -> Ptr <gsl_matrix> -> Ptr <gsl_permutation> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_QRPT_Rsolve , Ptr <gsl_matrix> -> Ptr <gsl_permutation> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_QRPT_Rsvx , Ptr <gsl_matrix> -> Ptr <gsl_permutation> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_QRPT_update , Ptr <gsl_matrix> -> Ptr <gsl_matrix> -> Ptr <gsl_permutation> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_LQ_decomp , Ptr <gsl_matrix> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_LQ_solve_T , Ptr <gsl_matrix> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_LQ_svx_T , Ptr <gsl_matrix> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_LQ_lssolve_T , Ptr <gsl_matrix> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_LQ_Lsolve_T , Ptr <gsl_matrix> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_LQ_Lsvx_T , Ptr <gsl_matrix> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_L_solve_T , Ptr <gsl_matrix> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_LQ_vecQ , Ptr <gsl_matrix> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_LQ_vecQT , Ptr <gsl_matrix> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_LQ_unpack , Ptr <gsl_matrix> -> Ptr <gsl_vector> -> Ptr <gsl_matrix> -> Ptr <gsl_matrix> -> IO CInt
+#ccall gsl_linalg_LQ_update , Ptr <gsl_matrix> -> Ptr <gsl_matrix> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_LQ_LQsolve , Ptr <gsl_matrix> -> Ptr <gsl_matrix> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_PTLQ_decomp , Ptr <gsl_matrix> -> Ptr <gsl_vector> -> Ptr <gsl_permutation> -> Ptr CInt -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_PTLQ_decomp2 , Ptr <gsl_matrix> -> Ptr <gsl_matrix> -> Ptr <gsl_matrix> -> Ptr <gsl_vector> -> Ptr <gsl_permutation> -> Ptr CInt -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_PTLQ_solve_T , Ptr <gsl_matrix> -> Ptr <gsl_vector> -> Ptr <gsl_permutation> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_PTLQ_svx_T , Ptr <gsl_matrix> -> Ptr <gsl_vector> -> Ptr <gsl_permutation> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_PTLQ_LQsolve_T , Ptr <gsl_matrix> -> Ptr <gsl_matrix> -> Ptr <gsl_permutation> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_PTLQ_Lsolve_T , Ptr <gsl_matrix> -> Ptr <gsl_permutation> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_PTLQ_Lsvx_T , Ptr <gsl_matrix> -> Ptr <gsl_permutation> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_PTLQ_update , Ptr <gsl_matrix> -> Ptr <gsl_matrix> -> Ptr <gsl_permutation> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_cholesky_decomp , Ptr <gsl_matrix> -> IO CInt
+#ccall gsl_linalg_cholesky_solve , Ptr <gsl_matrix> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_cholesky_svx , Ptr <gsl_matrix> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_cholesky_invert , Ptr <gsl_matrix> -> IO CInt
+#ccall gsl_linalg_cholesky_decomp_unit , Ptr <gsl_matrix> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_complex_cholesky_decomp , Ptr <gsl_matrix_complex> -> IO CInt
+#ccall gsl_linalg_complex_cholesky_solve , Ptr <gsl_matrix_complex> -> Ptr <gsl_vector_complex> -> Ptr <gsl_vector_complex> -> IO CInt
+#ccall gsl_linalg_complex_cholesky_svx , Ptr <gsl_matrix_complex> -> Ptr <gsl_vector_complex> -> IO CInt
+#ccall gsl_linalg_complex_cholesky_invert , Ptr <gsl_matrix_complex> -> IO CInt
+#ccall gsl_linalg_symmtd_decomp , Ptr <gsl_matrix> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_symmtd_unpack , Ptr <gsl_matrix> -> Ptr <gsl_vector> -> Ptr <gsl_matrix> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_symmtd_unpack_T , Ptr <gsl_matrix> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_hermtd_decomp , Ptr <gsl_matrix_complex> -> Ptr <gsl_vector_complex> -> IO CInt
+#ccall gsl_linalg_hermtd_unpack , Ptr <gsl_matrix_complex> -> Ptr <gsl_vector_complex> -> Ptr <gsl_matrix_complex> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_hermtd_unpack_T , Ptr <gsl_matrix_complex> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_HH_solve , Ptr <gsl_matrix> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_HH_svx , Ptr <gsl_matrix> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_solve_symm_tridiag , Ptr <gsl_vector> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_solve_tridiag , Ptr <gsl_vector> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_solve_symm_cyc_tridiag , Ptr <gsl_vector> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_solve_cyc_tridiag , Ptr <gsl_vector> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_bidiag_decomp , Ptr <gsl_matrix> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_bidiag_unpack , Ptr <gsl_matrix> -> Ptr <gsl_vector> -> Ptr <gsl_matrix> -> Ptr <gsl_vector> -> Ptr <gsl_matrix> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_bidiag_unpack2 , Ptr <gsl_matrix> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> Ptr <gsl_matrix> -> IO CInt
+#ccall gsl_linalg_bidiag_unpack_B , Ptr <gsl_matrix> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_balance_matrix , Ptr <gsl_matrix> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_balance_accum , Ptr <gsl_matrix> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_linalg_balance_columns , Ptr <gsl_matrix> -> Ptr <gsl_vector> -> IO CInt
+
diff --git a/src/Bindings/Gsl/MathematicalFunctions.c b/src/Bindings/Gsl/MathematicalFunctions.c
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/MathematicalFunctions.c
@@ -0,0 +1,8 @@
+#include <bindings.cmacros.h>
+#include <gsl/gsl_math.h>
+
+BC_INLINE2(GSL_FN_EVAL,gsl_function*,double,double)
+BC_INLINE2(GSL_FN_FDF_EVAL_F,gsl_function_fdf*,double,double)
+BC_INLINE2(GSL_FN_FDF_EVAL_DF,gsl_function_fdf*,double,double)
+BC_INLINE3(GSL_FN_VEC_EVAL,gsl_function_vec*,double,double*,double)
+BC_INLINE4VOID(GSL_FN_FDF_EVAL_F_DF,gsl_function_fdf*,double,double*,double*)
diff --git a/src/Bindings/Gsl/MathematicalFunctions.hsc b/src/Bindings/Gsl/MathematicalFunctions.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/MathematicalFunctions.hsc
@@ -0,0 +1,96 @@
+#include <bindings.dsl.h>
+#include <gsl/gsl_math.h>
+
+-- | <http://www.gnu.org/software/gsl/manual/html_node/Mathematical-Functions.html>
+
+module Bindings.Gsl.MathematicalFunctions where
+#strict_import
+
+#fractional M_E
+#fractional M_LOG2E
+#fractional M_LOG10E
+#fractional M_SQRT2
+#fractional M_SQRT1_2
+#fractional M_SQRT3
+#fractional M_PI
+#fractional M_PI_2
+#fractional M_PI_4
+#fractional M_SQRTPI
+#fractional M_2_SQRTPI
+#fractional M_1_PI
+#fractional M_2_PI
+#fractional M_LN10
+#fractional M_LN2
+#fractional M_LNPI
+#fractional M_EULER
+
+#starttype gsl_function
+#field function , FunPtr (CDouble -> Ptr () -> IO CDouble)
+#field params , Ptr ()
+#stoptype
+
+#cinline GSL_FN_EVAL , Ptr <gsl_function> -> CDouble -> IO CDouble
+
+#starttype gsl_function_fdf
+#field f , FunPtr (CDouble -> Ptr () -> IO CDouble)
+#field df , FunPtr (CDouble -> Ptr () -> IO CDouble)
+#field fdf , FunPtr (CDouble -> Ptr () -> Ptr CDouble -> Ptr CDouble -> IO ())
+#field params , Ptr ()
+#stoptype
+
+#cinline GSL_FN_FDF_EVAL_F , Ptr <gsl_function_fdf> -> CDouble -> IO CDouble
+#cinline GSL_FN_FDF_EVAL_DF , Ptr <gsl_function_fdf> -> CDouble -> IO CDouble
+#cinline GSL_FN_FDF_EVAL_F_DF , Ptr <gsl_function_fdf> -> CDouble -> Ptr CDouble -> Ptr CDouble -> IO ()
+
+#starttype gsl_function_vec
+#field function , FunPtr (CDouble -> Ptr CDouble -> Ptr () -> IO CInt)
+#field params , Ptr ()
+#stoptype
+
+#cinline GSL_FN_VEC_EVAL , Ptr <gsl_function_vec> -> CDouble -> Ptr CDouble -> IO CDouble
+
+#ccall gsl_max , CDouble -> CDouble -> IO CDouble
+#ccall gsl_min , CDouble -> CDouble -> IO CDouble
+#ccall GSL_MAX_INT , CInt -> CInt -> CInt -> IO CInt
+#ccall GSL_MIN_INT , CInt -> CInt -> CInt -> IO CInt
+#ccall GSL_MAX_DBL , CDouble -> CDouble -> IO CDouble
+#ccall GSL_MIN_DBL , CDouble -> CDouble -> IO CDouble
+-- #ccall GSL_MAX_LDBL , CLDouble -> CLDouble -> IO CLDouble
+-- #ccall GSL_MIN_LDBL , CLDouble -> CLDouble -> IO CLDouble
+
+#ccall gsl_log1p , CDouble -> IO CDouble
+#ccall gsl_expm1 , CDouble -> IO CDouble
+#ccall gsl_hypot , CDouble -> CDouble -> IO CDouble
+#ccall gsl_hypot3 , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_acosh , CDouble -> IO CDouble
+#ccall gsl_asinh , CDouble -> IO CDouble
+#ccall gsl_atanh , CDouble -> IO CDouble
+
+#ccall gsl_isnan , CDouble -> IO CInt
+#ccall gsl_isinf , CDouble -> IO CInt
+#ccall gsl_finite , CDouble -> IO CInt
+
+#ccall gsl_nan , IO CDouble
+#ccall gsl_posinf , IO CDouble
+#ccall gsl_neginf , IO CDouble
+#ccall gsl_fdiv , CDouble -> CDouble -> IO CDouble
+
+#ccall gsl_coerce_double , CDouble -> IO CDouble
+#ccall gsl_coerce_float , CFloat -> IO CFloat
+-- #ccall gsl_coerce_long_double , CLDouble -> IO CLDouble
+
+#ccall gsl_ldexp , CDouble -> CInt -> IO CDouble
+#ccall gsl_frexp , CDouble -> Ptr CInt -> IO CDouble
+
+#ccall gsl_fcmp , CDouble -> CDouble -> CDouble -> IO CInt
+
+#ccall gsl_pow_2 , CDouble -> IO CDouble
+#ccall gsl_pow_3 , CDouble -> IO CDouble
+#ccall gsl_pow_4 , CDouble -> IO CDouble
+#ccall gsl_pow_5 , CDouble -> IO CDouble
+#ccall gsl_pow_6 , CDouble -> IO CDouble
+#ccall gsl_pow_7 , CDouble -> IO CDouble
+#ccall gsl_pow_8 , CDouble -> IO CDouble
+#ccall gsl_pow_9 , CDouble -> IO CDouble
+#ccall gsl_pow_int , CDouble -> CInt -> IO CDouble
+#ccall gsl_pow_uint , CDouble -> CUInt -> IO CDouble
diff --git a/src/Bindings/Gsl/MonteCarloIntegration.c b/src/Bindings/Gsl/MonteCarloIntegration.c
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/MonteCarloIntegration.c
@@ -0,0 +1,6 @@
+#include <bindings.cmacros.h>
+#include <gsl/gsl_monte_plain.h>
+#include <gsl/gsl_monte_miser.h>
+#include <gsl/gsl_monte_vegas.h>
+
+BC_INLINE2(GSL_MONTE_FN_EVAL,gsl_monte_function*,double*,double)
diff --git a/src/Bindings/Gsl/MonteCarloIntegration.hsc b/src/Bindings/Gsl/MonteCarloIntegration.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/MonteCarloIntegration.hsc
@@ -0,0 +1,102 @@
+#include <bindings.dsl.h>
+#include <gsl/gsl_monte_plain.h>
+#include <gsl/gsl_monte_miser.h>
+#include <gsl/gsl_monte_vegas.h>
+
+-- | <http://www.gnu.org/software/gsl/manual/html_node/Monte-Carlo-Integration.html>
+
+module Bindings.Gsl.MonteCarloIntegration where
+#strict_import
+import Bindings.Gsl.RandomNumberGeneration
+
+#starttype gsl_monte_function
+#field f , FunPtr (Ptr CDouble -> CSize -> Ptr () -> IO CDouble)
+#field dim , CSize
+#field params , Ptr ()
+#stoptype
+
+#cinline GSL_MONTE_FN_EVAL , Ptr <gsl_monte_function> -> Ptr CDouble -> IO CDouble
+
+#starttype gsl_monte_plain_state
+#field dim , CSize
+#field x , Ptr CDouble
+#stoptype
+
+#ccall gsl_monte_plain_integrate , Ptr <gsl_monte_function> -> Ptr CDouble -> Ptr CDouble -> CSize -> CSize -> Ptr <gsl_rng> -> Ptr <gsl_monte_plain_state> -> Ptr CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_monte_plain_alloc , CSize -> IO (Ptr <gsl_monte_plain_state>)
+#ccall gsl_monte_plain_init , Ptr <gsl_monte_plain_state> -> IO CInt
+#ccall gsl_monte_plain_free , Ptr <gsl_monte_plain_state> -> IO ()
+
+#starttype gsl_monte_miser_state
+#field min_calls , CSize
+#field min_calls_per_bisection , CSize
+#field dither , CDouble
+#field estimate_frac , CDouble
+#field alpha , CDouble
+#field dim , CSize
+#field estimate_style , CInt
+#field depth , CInt
+#field verbose , CInt
+#field x , Ptr CDouble
+#field xmid , Ptr CDouble
+#field sigma_l , Ptr CDouble
+#field sigma_r , Ptr CDouble
+#field fmax_l , Ptr CDouble
+#field fmax_r , Ptr CDouble
+#field fmin_l , Ptr CDouble
+#field fmin_r , Ptr CDouble
+#field fsum_l , Ptr CDouble
+#field fsum_r , Ptr CDouble
+#field fsum2_l , Ptr CDouble
+#field fsum2_r , Ptr CDouble
+#field hits_l , Ptr CSize
+#field hits_r , Ptr CSize
+#stoptype
+
+#ccall gsl_monte_miser_integrate , Ptr <gsl_monte_function> -> Ptr CDouble -> Ptr CDouble -> CSize -> CSize -> Ptr <gsl_rng> -> Ptr <gsl_monte_miser_state> -> Ptr CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_monte_miser_alloc , CSize -> IO (Ptr <gsl_monte_miser_state>)
+#ccall gsl_monte_miser_init , Ptr <gsl_monte_miser_state> -> IO CInt
+#ccall gsl_monte_miser_free , Ptr <gsl_monte_miser_state> -> IO ()
+
+#num GSL_VEGAS_MODE_IMPORTANCE
+#num GSL_VEGAS_MODE_IMPORTANCE_ONLY
+#num GSL_VEGAS_MODE_STRATIFIED
+
+#starttype gsl_monte_vegas_state
+#field dim , CSize
+#field bins_max , CSize
+#field bins , CUInt
+#field boxes , CUInt
+#field xi , Ptr CDouble
+#field xin , Ptr CDouble
+#field delx , Ptr CDouble
+#field weight , Ptr CDouble
+#field vol , CDouble
+#field x , Ptr CDouble
+#field bin , Ptr CInt
+#field box , Ptr CInt
+#field d , Ptr CDouble
+#field alpha , CDouble
+#field mode , CInt
+#field verbose , CInt
+#field iterations , CUInt
+#field stage , CInt
+#field jac , CDouble
+#field wtd_int_sum , CDouble
+#field sum_wgts , CDouble
+#field chi_sum , CDouble
+#field chisq , CDouble
+#field result , CDouble
+#field sigma , CDouble
+#field it_start , CUInt
+#field it_num , CUInt
+#field samples , CUInt
+#field calls_per_box , CUInt
+#field ostream , Ptr CFile
+#stoptype
+
+#ccall gsl_monte_vegas_integrate , Ptr <gsl_monte_function> -> Ptr CDouble -> Ptr CDouble -> CSize -> CSize -> Ptr <gsl_rng> -> Ptr <gsl_monte_vegas_state> -> Ptr CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_monte_vegas_alloc , CSize -> IO (Ptr <gsl_monte_vegas_state>)
+#ccall gsl_monte_vegas_init , Ptr <gsl_monte_vegas_state> -> IO CInt
+#ccall gsl_monte_vegas_free , Ptr <gsl_monte_vegas_state> -> IO ()
+
diff --git a/src/Bindings/Gsl/MultidimensionalMinimization.c b/src/Bindings/Gsl/MultidimensionalMinimization.c
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/MultidimensionalMinimization.c
@@ -0,0 +1,7 @@
+#include <bindings.cmacros.h>
+#include <gsl/gsl_multimin.h>
+
+BC_INLINE2(GSL_MULTIMIN_FN_EVAL,gsl_multimin_function*,gsl_vector*,double)
+BC_INLINE2(GSL_MULTIMIN_FN_EVAL_F,gsl_multimin_function_fdf*,gsl_vector*,double)
+BC_INLINE3VOID(GSL_MULTIMIN_FN_EVAL_DF,gsl_multimin_function_fdf*,gsl_vector*,gsl_vector*)
+BC_INLINE4VOID(GSL_MULTIMIN_FN_EVAL_F_DF,gsl_multimin_function_fdf*,gsl_vector*,double*,gsl_vector*)
diff --git a/src/Bindings/Gsl/MultidimensionalMinimization.hsc b/src/Bindings/Gsl/MultidimensionalMinimization.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/MultidimensionalMinimization.hsc
@@ -0,0 +1,99 @@
+#include <bindings.dsl.h>
+#include <gsl/gsl_multimin.h>
+
+-- | <http://www.gnu.org/software/gsl/manual/html_node/Multidimensional-Minimization.html>
+
+module Bindings.Gsl.MultidimensionalMinimization where
+#strict_import
+import Bindings.Gsl.VectorsAndMatrices.DataTypes
+
+#starttype gsl_multimin_function
+#field f , FunPtr (Ptr <gsl_vector> -> Ptr () -> IO  CDouble)
+#field n , CSize
+#field params , Ptr ()
+#stoptype
+
+#cinline GSL_MULTIMIN_FN_EVAL , Ptr <gsl_multimin_function> -> Ptr <gsl_vector> -> IO CDouble
+
+#starttype gsl_multimin_function_fdf
+#field f , FunPtr (Ptr <gsl_vector> -> Ptr () -> IO  CDouble)
+#field df , FunPtr (Ptr <gsl_vector> -> Ptr () -> Ptr <gsl_vector> -> IO ())
+#field fdf , FunPtr (Ptr <gsl_vector> -> Ptr () -> Ptr CDouble -> Ptr <gsl_vector> -> IO ())
+#field n , CSize
+#field params , Ptr ()
+#stoptype
+
+#cinline GSL_MULTIMIN_FN_EVAL_F , Ptr <gsl_multimin_function_fdf> -> Ptr <gsl_vector> -> IO CDouble
+#cinline GSL_MULTIMIN_FN_EVAL_DF , Ptr <gsl_multimin_function_fdf> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO ()
+#cinline GSL_MULTIMIN_FN_EVAL_F_DF , Ptr <gsl_multimin_function_fdf> -> Ptr <gsl_vector> -> Ptr CDouble -> Ptr <gsl_vector> -> IO ()
+
+#ccall gsl_multimin_diff , Ptr <gsl_multimin_function> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+
+#starttype gsl_multimin_fminimizer_type
+#field name , CString
+#field size , CSize
+#field alloc , FunPtr (Ptr () -> CSize -> IO  CInt)
+#field set , FunPtr (Ptr () -> Ptr <gsl_multimin_function> -> Ptr <gsl_vector> -> Ptr CDouble -> Ptr <gsl_vector> -> IO  CInt)
+#field iterate , FunPtr (Ptr () -> Ptr <gsl_multimin_function> -> Ptr <gsl_vector> -> Ptr CDouble -> Ptr CDouble -> IO  CInt)
+#field free , FunPtr (Ptr () -> IO ())
+#stoptype
+
+#starttype gsl_multimin_fminimizer
+#field type , Ptr <gsl_multimin_fminimizer_type>
+#field f , Ptr <gsl_multimin_function>
+#field fval , CDouble
+#field x , Ptr <gsl_vector>
+#field size , CDouble
+#field state , Ptr ()
+#stoptype
+
+#ccall gsl_multimin_fminimizer_alloc , Ptr <gsl_multimin_fminimizer_type> -> CSize -> IO (Ptr <gsl_multimin_fminimizer>)
+#ccall gsl_multimin_fminimizer_set , Ptr <gsl_multimin_fminimizer> -> Ptr <gsl_multimin_function> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_multimin_fminimizer_free , Ptr <gsl_multimin_fminimizer> -> IO ()
+#ccall gsl_multimin_fminimizer_name , Ptr <gsl_multimin_fminimizer> -> IO  CString
+#ccall gsl_multimin_fminimizer_iterate , Ptr <gsl_multimin_fminimizer> -> IO CInt
+#ccall gsl_multimin_fminimizer_x , Ptr <gsl_multimin_fminimizer> -> IO (Ptr <gsl_vector>)
+#ccall gsl_multimin_fminimizer_minimum , Ptr <gsl_multimin_fminimizer> -> IO CDouble
+#ccall gsl_multimin_fminimizer_size , Ptr <gsl_multimin_fminimizer> -> IO CDouble
+#ccall gsl_multimin_test_gradient , Ptr <gsl_vector> -> CDouble -> IO CInt
+#ccall gsl_multimin_test_size , CDouble -> CDouble -> IO CInt
+
+#starttype gsl_multimin_fdfminimizer_type
+#field name , CString
+#field size , CSize
+#field alloc , FunPtr (Ptr () -> CSize -> IO  CInt)
+#field set , FunPtr (Ptr () -> Ptr <gsl_multimin_function_fdf> -> Ptr <gsl_vector> -> Ptr CDouble -> Ptr <gsl_vector> -> CDouble -> CDouble -> IO  CInt)
+#field iterate , FunPtr (Ptr () -> Ptr <gsl_multimin_function_fdf> -> Ptr <gsl_vector> -> Ptr CDouble -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO  CInt)
+#field restart , FunPtr (Ptr () -> IO  CInt)
+#field free , FunPtr (Ptr () -> IO ())
+#stoptype
+
+#starttype gsl_multimin_fdfminimizer
+#field type , Ptr <gsl_multimin_fdfminimizer_type>
+#field fdf , Ptr <gsl_multimin_function_fdf>
+#field f , CDouble
+#field x , Ptr <gsl_vector>
+#field gradient , Ptr <gsl_vector>
+#field dx , Ptr <gsl_vector>
+#field state , Ptr ()
+#stoptype
+
+#ccall gsl_multimin_fdfminimizer_alloc , Ptr <gsl_multimin_fdfminimizer_type> -> CSize -> IO (Ptr <gsl_multimin_fdfminimizer>)
+#ccall gsl_multimin_fdfminimizer_set , Ptr <gsl_multimin_fdfminimizer> -> Ptr <gsl_multimin_function_fdf> -> Ptr <gsl_vector> -> CDouble -> CDouble -> IO CInt
+#ccall gsl_multimin_fdfminimizer_free , Ptr <gsl_multimin_fdfminimizer> -> IO ()
+#ccall gsl_multimin_fdfminimizer_name , Ptr <gsl_multimin_fdfminimizer> -> IO  CString
+#ccall gsl_multimin_fdfminimizer_iterate , Ptr <gsl_multimin_fdfminimizer> -> IO CInt
+#ccall gsl_multimin_fdfminimizer_restart , Ptr <gsl_multimin_fdfminimizer> -> IO CInt
+#ccall gsl_multimin_fdfminimizer_x , Ptr <gsl_multimin_fdfminimizer> -> IO (Ptr <gsl_vector>)
+#ccall gsl_multimin_fdfminimizer_dx , Ptr <gsl_multimin_fdfminimizer> -> IO (Ptr <gsl_vector>)
+#ccall gsl_multimin_fdfminimizer_gradient , Ptr <gsl_multimin_fdfminimizer> -> IO (Ptr <gsl_vector>)
+#ccall gsl_multimin_fdfminimizer_minimum , Ptr <gsl_multimin_fdfminimizer> -> IO CDouble
+
+#globalvar gsl_multimin_fdfminimizer_steepest_descent , Ptr gsl_multimin_fdfminimizer_type
+#globalvar gsl_multimin_fdfminimizer_conjugate_pr , Ptr gsl_multimin_fdfminimizer_type
+#globalvar gsl_multimin_fdfminimizer_conjugate_fr , Ptr gsl_multimin_fdfminimizer_type
+#globalvar gsl_multimin_fdfminimizer_vector_bfgs , Ptr gsl_multimin_fdfminimizer_type
+#globalvar gsl_multimin_fdfminimizer_vector_bfgs2 , Ptr gsl_multimin_fdfminimizer_type
+#globalvar gsl_multimin_fminimizer_nmsimplex , Ptr gsl_multimin_fminimizer_type
+#globalvar gsl_multimin_fminimizer_nmsimplex2 , Ptr gsl_multimin_fminimizer_type
+
diff --git a/src/Bindings/Gsl/MultidimensionalRootFinding.c b/src/Bindings/Gsl/MultidimensionalRootFinding.c
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/MultidimensionalRootFinding.c
@@ -0,0 +1,7 @@
+#include <bindings.cmacros.h>
+#include <gsl/gsl_multiroots.h>
+
+BC_INLINE3(GSL_MULTIROOT_FN_EVAL,gsl_multiroot_function*,gsl_vector*,gsl_vector*,int)
+BC_INLINE3(GSL_MULTIROOT_FN_EVAL_F,gsl_multiroot_function_fdf*,gsl_vector*,gsl_vector*,int)
+BC_INLINE3(GSL_MULTIROOT_FN_EVAL_DF,gsl_multiroot_function_fdf*,gsl_vector*,gsl_matrix*,int)
+BC_INLINE4(GSL_MULTIROOT_FN_EVAL_F_DF,gsl_multiroot_function_fdf*,gsl_vector*,gsl_vector*,gsl_matrix*,int)
diff --git a/src/Bindings/Gsl/MultidimensionalRootFinding.hsc b/src/Bindings/Gsl/MultidimensionalRootFinding.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/MultidimensionalRootFinding.hsc
@@ -0,0 +1,97 @@
+#include <bindings.dsl.h>
+#include <gsl/gsl_multiroots.h>
+
+-- | <http://www.gnu.org/software/gsl/manual/html_node/Multidimensional-Root_002dFinding.html>
+
+module Bindings.Gsl.MultidimensionalRootFinding where
+#strict_import
+import Bindings.Gsl.VectorsAndMatrices.DataTypes
+
+#starttype gsl_multiroot_function
+#field f , FunPtr ( Ptr <gsl_vector> -> Ptr () -> Ptr <gsl_vector> -> IO  CInt)
+#field n , CSize
+#field params , Ptr ()
+#stoptype
+
+#cinline GSL_MULTIROOT_FN_EVAL , Ptr <gsl_multiroot_function> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+
+#ccall gsl_multiroot_fdjacobian , Ptr <gsl_multiroot_function> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> CDouble -> Ptr <gsl_matrix> -> IO CInt
+
+#starttype gsl_multiroot_fsolver_type
+#field name , CString
+#field size , CSize
+#field alloc , FunPtr (Ptr () -> CSize -> IO  CInt)
+#field set , FunPtr (Ptr () -> Ptr <gsl_multiroot_function> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO  CInt)
+#field iterate , FunPtr (Ptr () -> Ptr <gsl_multiroot_function> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO  CInt)
+#field free , FunPtr (Ptr () -> IO ())
+#stoptype
+
+#starttype gsl_multiroot_fsolver
+#field type , Ptr <gsl_multiroot_fsolver_type>
+#field function , Ptr <gsl_multiroot_function>
+#field x , Ptr <gsl_vector>
+#field f , Ptr <gsl_vector>
+#field dx , Ptr <gsl_vector>
+#field state , Ptr ()
+#stoptype
+
+#ccall gsl_multiroot_fsolver_alloc , Ptr <gsl_multiroot_fsolver_type> -> CSize -> IO (Ptr <gsl_multiroot_fsolver>)
+#ccall gsl_multiroot_fsolver_free , Ptr <gsl_multiroot_fsolver> -> IO ()
+#ccall gsl_multiroot_fsolver_set , Ptr <gsl_multiroot_fsolver> -> Ptr <gsl_multiroot_function> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_multiroot_fsolver_iterate , Ptr <gsl_multiroot_fsolver> -> IO CInt
+#ccall gsl_multiroot_fsolver_name , Ptr <gsl_multiroot_fsolver> -> IO CString 
+#ccall gsl_multiroot_fsolver_root , Ptr <gsl_multiroot_fsolver> -> IO (Ptr <gsl_vector>)
+#ccall gsl_multiroot_fsolver_dx , Ptr <gsl_multiroot_fsolver> -> IO (Ptr <gsl_vector>)
+#ccall gsl_multiroot_fsolver_f , Ptr <gsl_multiroot_fsolver> -> IO (Ptr <gsl_vector>)
+
+#starttype gsl_multiroot_function_fdf
+#field f , FunPtr ( Ptr <gsl_vector> -> Ptr () -> Ptr <gsl_vector> -> IO  CInt)
+#field df , FunPtr ( Ptr <gsl_vector> -> Ptr () -> Ptr <gsl_matrix> -> IO  CInt)
+#field fdf , FunPtr ( Ptr <gsl_vector> -> Ptr () -> Ptr <gsl_vector> -> Ptr <gsl_matrix> -> IO  CInt)
+#field n , CSize
+#field params , Ptr ()
+#stoptype
+
+#cinline GSL_MULTIROOT_FN_EVAL_F , Ptr <gsl_multiroot_function_fdf> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#cinline GSL_MULTIROOT_FN_EVAL_DF , Ptr <gsl_multiroot_function_fdf> -> Ptr <gsl_vector> -> Ptr <gsl_matrix> -> IO CInt
+#cinline GSL_MULTIROOT_FN_EVAL_F_DF , Ptr <gsl_multiroot_function_fdf> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> Ptr <gsl_matrix> -> IO CInt
+
+#starttype gsl_multiroot_fdfsolver_type
+#field name , CString
+#field size , CSize
+#field alloc , FunPtr (Ptr () -> CSize -> IO  CInt)
+#field set , FunPtr (Ptr () -> Ptr <gsl_multiroot_function_fdf> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> Ptr <gsl_matrix> -> Ptr <gsl_vector> -> IO  CInt)
+#field iterate , FunPtr (Ptr () -> Ptr <gsl_multiroot_function_fdf> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> Ptr <gsl_matrix> -> Ptr <gsl_vector> -> IO  CInt)
+#field free , FunPtr (Ptr () -> IO ())
+#stoptype
+
+#starttype gsl_multiroot_fdfsolver
+#field type , Ptr <gsl_multiroot_fdfsolver_type>
+#field fdf , Ptr <gsl_multiroot_function_fdf>
+#field x , Ptr <gsl_vector>
+#field f , Ptr <gsl_vector>
+#field J , Ptr <gsl_matrix>
+#field dx , Ptr <gsl_vector>
+#field state , Ptr ()
+#stoptype
+
+#ccall gsl_multiroot_fdfsolver_alloc , Ptr <gsl_multiroot_fdfsolver_type> -> CSize -> IO (Ptr <gsl_multiroot_fdfsolver>)
+#ccall gsl_multiroot_fdfsolver_set , Ptr <gsl_multiroot_fdfsolver> -> Ptr <gsl_multiroot_function_fdf> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_multiroot_fdfsolver_iterate , Ptr <gsl_multiroot_fdfsolver> -> IO CInt
+#ccall gsl_multiroot_fdfsolver_free , Ptr <gsl_multiroot_fdfsolver> -> IO ()
+#ccall gsl_multiroot_fdfsolver_name , Ptr <gsl_multiroot_fdfsolver> -> IO CString 
+#ccall gsl_multiroot_fdfsolver_root , Ptr <gsl_multiroot_fdfsolver> -> IO (Ptr <gsl_vector>)
+#ccall gsl_multiroot_fdfsolver_dx , Ptr <gsl_multiroot_fdfsolver> -> IO (Ptr <gsl_vector>)
+#ccall gsl_multiroot_fdfsolver_f , Ptr <gsl_multiroot_fdfsolver> -> IO (Ptr <gsl_vector>)
+#ccall gsl_multiroot_test_delta , Ptr <gsl_vector> -> Ptr <gsl_vector> -> CDouble -> CDouble -> IO CInt
+#ccall gsl_multiroot_test_residual , Ptr <gsl_vector> -> CDouble -> IO CInt
+
+#globalvar gsl_multiroot_fsolver_dnewton , Ptr gsl_multiroot_fsolver_type
+#globalvar gsl_multiroot_fsolver_broyden , Ptr gsl_multiroot_fsolver_type
+#globalvar gsl_multiroot_fsolver_hybrid , Ptr gsl_multiroot_fsolver_type
+#globalvar gsl_multiroot_fsolver_hybrids , Ptr gsl_multiroot_fsolver_type
+#globalvar gsl_multiroot_fdfsolver_newton , Ptr gsl_multiroot_fdfsolver_type
+#globalvar gsl_multiroot_fdfsolver_gnewton , Ptr gsl_multiroot_fdfsolver_type
+#globalvar gsl_multiroot_fdfsolver_hybridj , Ptr gsl_multiroot_fdfsolver_type
+#globalvar gsl_multiroot_fdfsolver_hybridsj , Ptr gsl_multiroot_fdfsolver_type
+
diff --git a/src/Bindings/Gsl/Multisets.c b/src/Bindings/Gsl/Multisets.c
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/Multisets.c
@@ -0,0 +1,4 @@
+#include <bindings.cmacros.h>
+#include <gsl/gsl_multiset.h>
+
+BC_INLINE2(gsl_multiset_get,gsl_multiset*,size_t,size_t)
diff --git a/src/Bindings/Gsl/Multisets.hsc b/src/Bindings/Gsl/Multisets.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/Multisets.hsc
@@ -0,0 +1,37 @@
+#include <bindings.dsl.h>
+#include <gsl/gsl_multiset.h>
+
+-- | <http://www.gnu.org/software/gsl/manual/html_node/Multisets.html>
+
+module Bindings.Gsl.Multisets where
+#strict_import
+
+#starttype gsl_multiset
+#field n , CSize
+#field k , CSize
+#field data , Ptr CSize
+#stoptype
+
+#ccall gsl_multiset_alloc , CSize -> CSize -> IO (Ptr <gsl_multiset>)
+#ccall gsl_multiset_calloc , CSize -> CSize -> IO (Ptr <gsl_multiset>)
+#ccall gsl_multiset_init_first , Ptr <gsl_multiset> -> IO ()
+#ccall gsl_multiset_init_last , Ptr <gsl_multiset> -> IO ()
+#ccall gsl_multiset_free , Ptr <gsl_multiset> -> IO ()
+#ccall gsl_multiset_memcpy , Ptr <gsl_multiset> -> \
+    Ptr <gsl_multiset> -> IO CInt
+
+#cinline gsl_multiset_get , Ptr <gsl_multiset> -> CSize -> IO CSize
+
+#ccall gsl_multiset_n , Ptr <gsl_multiset> -> IO CSize
+#ccall gsl_multiset_k , Ptr <gsl_multiset> -> IO CSize
+#ccall gsl_multiset_data , Ptr <gsl_multiset> -> IO (Ptr CSize)
+#ccall gsl_multiset_valid , Ptr <gsl_multiset> -> IO CInt
+
+#ccall gsl_multiset_next , Ptr <gsl_multiset> -> IO CInt
+#ccall gsl_multiset_prev , Ptr <gsl_multiset> -> IO CInt
+
+#ccall gsl_multiset_fwrite , Ptr CFile -> Ptr <gsl_multiset> -> IO CInt
+#ccall gsl_multiset_fread , Ptr CFile -> Ptr <gsl_multiset> -> IO CInt
+#ccall gsl_multiset_fprintf , Ptr CFile -> Ptr <gsl_multiset> -> \
+    CString -> IO CInt
+#ccall gsl_multiset_fscanf , Ptr CFile -> Ptr <gsl_multiset> -> IO CInt
diff --git a/src/Bindings/Gsl/NTuples.hsc b/src/Bindings/Gsl/NTuples.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/NTuples.hsc
@@ -0,0 +1,33 @@
+#include <bindings.dsl.h>
+#include <gsl/gsl_ntuple.h>
+
+-- | <http://www.gnu.org/software/gsl/manual/html_node/N_002dtuples.html>
+
+module Bindings.Gsl.NTuples where
+#strict_import
+import Bindings.Gsl.Histograms
+
+#starttype gsl_ntuple
+#field file , Ptr CFile
+#field ntuple_data , Ptr ()
+#field size , CSize
+#stoptype
+
+#starttype gsl_ntuple_select_fn
+#field function , FunPtr (Ptr () -> Ptr () -> IO  CInt)
+#field params , Ptr ()
+#stoptype
+
+#starttype gsl_ntuple_value_fn
+#field function , FunPtr (Ptr () -> Ptr () -> IO  CDouble)
+#field params , Ptr ()
+#stoptype
+
+#ccall gsl_ntuple_open , CString -> Ptr () -> CSize -> IO (Ptr <gsl_ntuple>)
+#ccall gsl_ntuple_create , CString -> Ptr () -> CSize -> IO (Ptr <gsl_ntuple>)
+#ccall gsl_ntuple_write , Ptr <gsl_ntuple> -> IO CInt
+#ccall gsl_ntuple_read , Ptr <gsl_ntuple> -> IO CInt
+#ccall gsl_ntuple_bookdata , Ptr <gsl_ntuple> -> IO CInt
+#ccall gsl_ntuple_project , Ptr <gsl_histogram> -> Ptr <gsl_ntuple> -> Ptr <gsl_ntuple_value_fn> -> Ptr <gsl_ntuple_select_fn> -> IO CInt
+#ccall gsl_ntuple_close , Ptr <gsl_ntuple> -> IO CInt
+
diff --git a/src/Bindings/Gsl/NonlinearLeastSquaresFitting.c b/src/Bindings/Gsl/NonlinearLeastSquaresFitting.c
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/NonlinearLeastSquaresFitting.c
@@ -0,0 +1,7 @@
+#include <bindings.cmacros.h>
+#include <gsl/gsl_multifit_nlin.h>
+
+BC_INLINE3VOID(GSL_MULTIFIT_FN_EVAL,gsl_multifit_function*,gsl_vector*,gsl_vector*)
+BC_INLINE3(GSL_MULTIFIT_FN_EVAL_F,gsl_multifit_function_fdf*,gsl_vector*,gsl_vector*,int)
+BC_INLINE3(GSL_MULTIFIT_FN_EVAL_DF,gsl_multifit_function_fdf*,gsl_vector*,gsl_matrix*,int)
+BC_INLINE4(GSL_MULTIFIT_FN_EVAL_F_DF,gsl_multifit_function_fdf*,gsl_vector*,gsl_vector*,gsl_matrix*,int)
diff --git a/src/Bindings/Gsl/NonlinearLeastSquaresFitting.hsc b/src/Bindings/Gsl/NonlinearLeastSquaresFitting.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/NonlinearLeastSquaresFitting.hsc
@@ -0,0 +1,110 @@
+#include <bindings.dsl.h>
+#include <gsl/gsl_multifit_nlin.h>
+
+-- | <http://www.gnu.org/software/gsl/manual/html_node/Nonlinear-Least_002dSquares-Fitting.html>
+
+module Bindings.Gsl.NonlinearLeastSquaresFitting where
+#strict_import
+import Bindings.Gsl.VectorsAndMatrices.DataTypes
+
+#ccall gsl_multifit_gradient , Ptr <gsl_matrix> -> \
+    Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_multifit_covar , Ptr <gsl_matrix> -> CDouble -> \
+    Ptr <gsl_matrix> -> IO CInt
+
+#starttype gsl_multifit_function
+#field f , FunPtr (Ptr <gsl_vector> -> Ptr () -> Ptr <gsl_vector> -> IO ())
+#field n , CSize
+#field p , CSize
+#field params , Ptr ()
+#stoptype
+
+#cinline GSL_MULTIFIT_FN_EVAL , Ptr <gsl_multifit_function> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO ()
+
+#starttype gsl_multifit_fsolver_type
+#field name , CString
+#field size , CSize
+#field alloc , FunPtr (Ptr () -> CSize -> CSize -> IO CInt)
+#field set , FunPtr (Ptr () -> Ptr <gsl_multifit_function> -> \
+    Ptr <gsl_vector> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt)
+#field iterate , FunPtr (Ptr () -> Ptr <gsl_multifit_function> -> \
+    Ptr <gsl_vector> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt)
+#field free , FunPtr (Ptr () -> IO ())
+#stoptype
+
+#starttype gsl_multifit_fsolver
+#field type , Ptr <gsl_multifit_fsolver_type>
+#field function , Ptr <gsl_multifit_function>
+#field x , Ptr <gsl_vector>
+#field f , Ptr <gsl_vector>
+#field dx , Ptr <gsl_vector>
+#field state , Ptr ()
+#stoptype
+
+#ccall gsl_multifit_fsolver_alloc , Ptr <gsl_multifit_fsolver_type> -> \
+    CSize -> CSize -> IO (Ptr <gsl_multifit_fsolver>)
+#ccall gsl_multifit_fsolver_free , Ptr <gsl_multifit_fsolver> -> IO ()
+#ccall gsl_multifit_fsolver_set , Ptr <gsl_multifit_fsolver> -> \
+    Ptr <gsl_multifit_function> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_multifit_fsolver_iterate , Ptr <gsl_multifit_fsolver> -> IO CInt
+#ccall gsl_multifit_fsolver_name , Ptr <gsl_multifit_fsolver> -> IO CString
+#ccall gsl_multifit_fsolver_position , Ptr <gsl_multifit_fsolver> -> \
+    IO (Ptr <gsl_vector>)
+
+#starttype gsl_multifit_function_fdf
+#field f , FunPtr (Ptr <gsl_vector> -> Ptr () -> \
+    Ptr <gsl_vector> -> IO CInt)
+#field df , FunPtr (Ptr <gsl_vector> -> Ptr () -> \
+    Ptr <gsl_matrix> -> IO CInt)
+#field fdf , FunPtr (Ptr <gsl_vector> -> Ptr () -> Ptr <gsl_vector> -> \
+    Ptr <gsl_matrix> -> IO CInt)
+#field n , CSize
+#field p , CSize
+#field params , Ptr ()
+#stoptype
+
+#cinline GSL_MULTIFIT_FN_EVAL_F , Ptr <gsl_multifit_function_fdf> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#cinline GSL_MULTIFIT_FN_EVAL_DF , Ptr <gsl_multifit_function_fdf> -> Ptr <gsl_vector> -> Ptr <gsl_matrix> -> IO CInt
+#cinline GSL_MULTIFIT_FN_EVAL_F_DF , Ptr <gsl_multifit_function_fdf> -> Ptr <gsl_vector> -> Ptr <gsl_vector> -> Ptr <gsl_matrix> -> IO CInt
+
+#starttype gsl_multifit_fdfsolver_type
+#field name , CString
+#field size , CSize
+#field alloc , FunPtr (Ptr () -> CSize -> CSize -> IO CInt)
+#field set , FunPtr (Ptr () -> Ptr <gsl_multifit_function_fdf> -> \
+    Ptr <gsl_vector> -> Ptr <gsl_vector> -> Ptr <gsl_matrix> -> \
+    Ptr <gsl_vector> -> IO CInt)
+#field iterate , FunPtr (Ptr () -> Ptr <gsl_multifit_function_fdf> -> \
+    Ptr <gsl_vector> -> Ptr <gsl_vector> -> Ptr <gsl_matrix> -> \
+    Ptr <gsl_vector> -> IO CInt)
+#field free , FunPtr (Ptr () -> IO ())
+#stoptype
+
+#starttype gsl_multifit_fdfsolver
+#field type , Ptr <gsl_multifit_fdfsolver_type>
+#field fdf , Ptr <gsl_multifit_function_fdf>
+#field x , Ptr <gsl_vector>
+#field f , Ptr <gsl_vector>
+#field J , Ptr <gsl_matrix>
+#field dx , Ptr <gsl_vector>
+#field state , Ptr ()
+#stoptype
+
+#ccall gsl_multifit_fdfsolver_alloc , Ptr <gsl_multifit_fdfsolver_type> -> \
+    CSize -> CSize -> IO (Ptr <gsl_multifit_fdfsolver>)
+#ccall gsl_multifit_fdfsolver_set , Ptr <gsl_multifit_fdfsolver> -> \
+    Ptr <gsl_multifit_function_fdf> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_multifit_fdfsolver_iterate , Ptr <gsl_multifit_fdfsolver> -> \
+    IO CInt
+#ccall gsl_multifit_fdfsolver_free , Ptr <gsl_multifit_fdfsolver> -> IO ()
+#ccall gsl_multifit_fdfsolver_name , Ptr <gsl_multifit_fdfsolver> -> \
+    IO CString
+#ccall gsl_multifit_fdfsolver_position , Ptr <gsl_multifit_fdfsolver> -> \
+    IO (Ptr <gsl_vector>)
+#ccall gsl_multifit_test_delta , Ptr <gsl_vector> -> \
+    Ptr <gsl_vector> -> CDouble -> CDouble -> IO CInt
+#ccall gsl_multifit_test_gradient , Ptr <gsl_vector> -> CDouble -> IO CInt
+
+#globalvar gsl_multifit_fdfsolver_lmder , Ptr <gsl_multifit_fdfsolver_type>
+#globalvar gsl_multifit_fdfsolver_lmsder , Ptr <gsl_multifit_fdfsolver_type>
+
diff --git a/src/Bindings/Gsl/NumericalDifferentiation.hsc b/src/Bindings/Gsl/NumericalDifferentiation.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/NumericalDifferentiation.hsc
@@ -0,0 +1,13 @@
+#include <bindings.dsl.h>
+#include <gsl/gsl_deriv.h>
+
+-- | <http://www.gnu.org/software/gsl/manual/html_node/Numerical-Differentiation.html>
+
+module Bindings.Gsl.NumericalDifferentiation where
+#strict_import
+import Bindings.Gsl.MathematicalFunctions
+
+#ccall gsl_deriv_central , Ptr <gsl_function> -> CDouble -> CDouble -> Ptr CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_deriv_backward , Ptr <gsl_function> -> CDouble -> CDouble -> Ptr CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_deriv_forward , Ptr <gsl_function> -> CDouble -> CDouble -> Ptr CDouble -> Ptr CDouble -> IO CInt
+
diff --git a/src/Bindings/Gsl/NumericalIntegration.hsc b/src/Bindings/Gsl/NumericalIntegration.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/NumericalIntegration.hsc
@@ -0,0 +1,131 @@
+#include <bindings.dsl.h>
+#include <gsl/gsl_integration.h>
+
+-- | <http://www.gnu.org/software/gsl/manual/html_node/Numerical-Integration.html>
+
+module Bindings.Gsl.NumericalIntegration where
+#strict_import
+import Bindings.Gsl.MathematicalFunctions
+
+#starttype gsl_integration_workspace
+#field limit , CSize
+#field size , CSize
+#field nrmax , CSize
+#field i , CSize
+#field maximum_level , CSize
+#field alist , Ptr CDouble
+#field blist , Ptr CDouble
+#field rlist , Ptr CDouble
+#field elist , Ptr CDouble
+#field order , Ptr CSize
+#field level , Ptr CSize
+#stoptype
+
+#starttype gsl_integration_cquad_ival
+#field a , CDouble
+#field b , CDouble
+#array_field c , CDouble
+#array_field fx , CDouble
+#field igral , CDouble
+#field err , CDouble
+#field depth , CInt
+#field rdepth , CInt
+#field ndiv , CInt
+#stoptype
+
+#starttype gsl_integration_cquad_workspace
+#field size , CSize
+#field ivals , Ptr <gsl_integration_cquad_ival>
+#field heap , Ptr CSize
+#stoptype
+
+#ccall gsl_integration_workspace_alloc , CSize -> IO (Ptr <gsl_integration_workspace>)
+#ccall gsl_integration_workspace_free , Ptr <gsl_integration_workspace> -> IO ()
+
+#starttype gsl_integration_qaws_table
+#field alpha , CDouble
+#field beta , CDouble
+#field mu , CInt
+#field nu , CInt
+#array_field ri , CDouble
+#array_field rj , CDouble
+#array_field rg , CDouble
+#array_field rh , CDouble
+#stoptype
+
+#ccall gsl_integration_qaws_table_alloc , CDouble -> CDouble -> CInt -> CInt -> CInt -> IO (Ptr <gsl_integration_qaws_table>)
+#ccall gsl_integration_qaws_table_set , Ptr <gsl_integration_qaws_table> -> CDouble -> CDouble -> CInt -> CInt -> CInt -> IO CInt
+#ccall gsl_integration_qaws_table_free , Ptr <gsl_integration_qaws_table> -> IO ()
+
+#integral_t enum gsl_integration_qawo_enum
+#num GSL_INTEG_COSINE
+#num GSL_INTEG_SINE
+
+#starttype gsl_integration_qawo_table
+#field n , CSize
+#field omega , CDouble
+#field L , CDouble
+#field par , CDouble
+#field sine , <gsl_integration_qawo_enum>
+#field chebmo , Ptr CDouble
+#stoptype
+
+#ccall gsl_integration_qawo_table_alloc , CDouble -> CDouble -> <gsl_integration_qawo_enum> -> CSize -> IO (Ptr <gsl_integration_qawo_table>)
+#ccall gsl_integration_qawo_table_set , Ptr <gsl_integration_qawo_table> -> CDouble -> CDouble -> <gsl_integration_qawo_enum> -> IO CInt
+#ccall gsl_integration_qawo_table_set_length , Ptr <gsl_integration_qawo_table> -> CDouble -> IO CInt
+#ccall gsl_integration_qawo_table_free , Ptr <gsl_integration_qawo_table> -> IO ()
+
+#callback_t gsl_integration_rule , Ptr <gsl_function> -> CDouble -> CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> IO ()
+
+#ccall gsl_integration_qk15 , Ptr <gsl_function> -> CDouble -> CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> IO ()
+#ccall gsl_integration_qk21 , Ptr <gsl_function> -> CDouble -> CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> IO ()
+#ccall gsl_integration_qk31 , Ptr <gsl_function> -> CDouble -> CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> IO ()
+#ccall gsl_integration_qk41 , Ptr <gsl_function> -> CDouble -> CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> IO ()
+#ccall gsl_integration_qk51 , Ptr <gsl_function> -> CDouble -> CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> IO ()
+#ccall gsl_integration_qk61 , Ptr <gsl_function> -> CDouble -> CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> IO ()
+#ccall gsl_integration_qcheb , Ptr <gsl_function> -> CDouble -> CDouble -> Ptr CDouble -> Ptr CDouble -> IO ()
+
+#num GSL_INTEG_GAUSS15
+#num GSL_INTEG_GAUSS21
+#num GSL_INTEG_GAUSS31
+#num GSL_INTEG_GAUSS41
+#num GSL_INTEG_GAUSS51
+#num GSL_INTEG_GAUSS61
+
+#ccall gsl_integration_qk , CInt -> CInt -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr <gsl_function> -> CDouble -> CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> IO ()
+#ccall gsl_integration_qng , Ptr <gsl_function> -> CDouble -> CDouble -> CDouble -> CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CSize -> IO CInt
+#ccall gsl_integration_qag , Ptr <gsl_function> -> CDouble -> CDouble -> CDouble -> CDouble -> CSize -> CInt -> CInt -> Ptr <gsl_integration_workspace> -> Ptr CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_integration_qagi , Ptr <gsl_function> -> CDouble -> CDouble -> CSize -> Ptr <gsl_integration_workspace> -> Ptr CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_integration_qagiu , Ptr <gsl_function> -> CDouble -> CDouble -> CDouble -> CSize -> Ptr <gsl_integration_workspace> -> Ptr CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_integration_qagil , Ptr <gsl_function> -> CDouble -> CDouble -> CDouble -> CSize -> Ptr <gsl_integration_workspace> -> Ptr CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_integration_qags , Ptr <gsl_function> -> CDouble -> CDouble -> CDouble -> CDouble -> CSize -> Ptr <gsl_integration_workspace> -> Ptr CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_integration_qagp , Ptr <gsl_function> -> Ptr CDouble -> CSize -> CDouble -> CDouble -> CSize -> Ptr <gsl_integration_workspace> -> Ptr CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_integration_qawc , Ptr <gsl_function> -> CDouble -> CDouble -> CDouble -> CDouble -> CDouble -> CSize -> Ptr <gsl_integration_workspace> -> Ptr CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_integration_qaws , Ptr <gsl_function> -> CDouble -> CDouble -> Ptr <gsl_integration_qaws_table> -> CDouble -> CDouble -> CSize -> Ptr <gsl_integration_workspace> -> Ptr CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_integration_qawo , Ptr <gsl_function> -> CDouble -> CDouble -> CDouble -> CSize -> Ptr <gsl_integration_workspace> -> Ptr <gsl_integration_qawo_table> -> Ptr CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_integration_qawf , Ptr <gsl_function> -> CDouble -> CDouble -> CSize -> Ptr <gsl_integration_workspace> -> Ptr <gsl_integration_workspace> -> Ptr <gsl_integration_qawo_table> -> Ptr CDouble -> Ptr CDouble -> IO CInt
+
+#ccall gsl_integration_cquad_workspace_alloc , CSize -> \
+    IO (Ptr <gsl_integration_cquad_workspace>)
+#ccall gsl_integration_cquad_workspace_free , \
+    Ptr <gsl_integration_cquad_workspace> -> IO ()
+#ccall gsl_integration_cquad , Ptr <gsl_function> -> CDouble -> CDouble -> \
+    CDouble -> CDouble -> Ptr <gsl_integration_cquad_workspace> -> \
+    Ptr CDouble -> Ptr CDouble -> Ptr CSize  -> IO CInt
+
+#starttype gsl_integration_glfixed_table
+#field n , CSize
+#field x , Ptr CDouble
+#field w , Ptr CDouble
+#field precomputed , CInt
+#stoptype
+
+#ccall gsl_integration_glfixed_table_alloc , CSize -> \
+    IO (Ptr <gsl_integration_glfixed_table>)
+#ccall gsl_integration_glfixed , Ptr <gsl_function> -> CDouble -> CDouble -> \
+    Ptr <gsl_integration_glfixed_table>  -> IO CDouble
+#ccall gsl_integration_glfixed_point , CDouble -> CDouble -> CSize -> \
+    Ptr CDouble  -> Ptr CDouble -> Ptr <gsl_integration_glfixed_table> -> \
+    IO CInt
+#ccall gsl_integration_glfixed_table_free , \
+    Ptr <gsl_integration_glfixed_table> -> IO ()
diff --git a/src/Bindings/Gsl/OneDimensionalMinimization.hsc b/src/Bindings/Gsl/OneDimensionalMinimization.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/OneDimensionalMinimization.hsc
@@ -0,0 +1,49 @@
+#include <bindings.dsl.h>
+#include <gsl/gsl_min.h>
+
+-- | <http://www.gnu.org/software/gsl/manual/html_node/One-dimensional-Minimization.html>
+
+module Bindings.Gsl.OneDimensionalMinimization where
+#strict_import
+import Bindings.Gsl.MathematicalFunctions
+
+#starttype gsl_min_fminimizer_type
+#field name , CString
+#field size , CSize
+#field set , FunPtr (Ptr () -> Ptr <gsl_function> -> CDouble -> CDouble -> CDouble -> CDouble -> CDouble -> CDouble -> IO  CInt)
+#field iterate , FunPtr (Ptr () -> Ptr <gsl_function> -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> IO  CInt)
+#stoptype
+
+#starttype gsl_min_fminimizer
+#field type , Ptr <gsl_min_fminimizer_type>
+#field function , Ptr <gsl_function>
+#field x_minimum , CDouble
+#field x_lower , CDouble
+#field x_upper , CDouble
+#field f_minimum , CDouble
+#field f_lower , CDouble
+#field f_upper , CDouble
+#field state , Ptr ()
+#stoptype
+
+#ccall gsl_min_fminimizer_alloc , Ptr <gsl_min_fminimizer_type> -> IO (Ptr <gsl_min_fminimizer>)
+#ccall gsl_min_fminimizer_free , Ptr <gsl_min_fminimizer> -> IO ()
+#ccall gsl_min_fminimizer_set , Ptr <gsl_min_fminimizer> -> Ptr <gsl_function> -> CDouble -> CDouble -> CDouble -> IO CInt
+#ccall gsl_min_fminimizer_set_with_values , Ptr <gsl_min_fminimizer> -> Ptr <gsl_function> -> CDouble -> CDouble -> CDouble -> CDouble -> CDouble -> CDouble -> IO CInt
+#ccall gsl_min_fminimizer_iterate , Ptr <gsl_min_fminimizer> -> IO CInt
+#ccall gsl_min_fminimizer_name , Ptr <gsl_min_fminimizer> -> IO CString 
+#ccall gsl_min_fminimizer_x_minimum , Ptr <gsl_min_fminimizer> -> IO CDouble
+#ccall gsl_min_fminimizer_x_lower , Ptr <gsl_min_fminimizer> -> IO CDouble
+#ccall gsl_min_fminimizer_x_upper , Ptr <gsl_min_fminimizer> -> IO CDouble
+#ccall gsl_min_fminimizer_f_minimum , Ptr <gsl_min_fminimizer> -> IO CDouble
+#ccall gsl_min_fminimizer_f_lower , Ptr <gsl_min_fminimizer> -> IO CDouble
+#ccall gsl_min_fminimizer_f_upper , Ptr <gsl_min_fminimizer> -> IO CDouble
+#ccall gsl_min_test_interval , CDouble -> CDouble -> CDouble -> CDouble -> IO CInt
+
+#globalvar gsl_min_fminimizer_goldensection , Ptr gsl_min_fminimizer_type
+#globalvar gsl_min_fminimizer_brent , Ptr gsl_min_fminimizer_type
+
+#callback_t gsl_min_bracketing_function , Ptr <gsl_function> -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> CSize -> IO CInt
+
+#ccall gsl_min_find_bracket , Ptr <gsl_function> -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> CSize -> IO CInt
+
diff --git a/src/Bindings/Gsl/OneDimensionalRootFinding.hsc b/src/Bindings/Gsl/OneDimensionalRootFinding.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/OneDimensionalRootFinding.hsc
@@ -0,0 +1,64 @@
+#include <bindings.dsl.h>
+#include <gsl/gsl_roots.h>
+
+-- | <http://www.gnu.org/software/gsl/manual/html_node/One-dimensional-Root_002dFinding.html>
+
+module Bindings.Gsl.OneDimensionalRootFinding where
+#strict_import
+import Bindings.Gsl.MathematicalFunctions
+
+#starttype gsl_root_fsolver_type
+#field name , CString
+#field size , CSize
+#field set , FunPtr (Ptr () -> Ptr <gsl_function> -> Ptr CDouble -> CDouble -> CDouble -> IO  CInt)
+#field iterate , FunPtr (Ptr () -> Ptr <gsl_function> -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> IO  CInt)
+#stoptype
+
+#starttype gsl_root_fsolver
+#field type , Ptr <gsl_root_fsolver_type>
+#field function , Ptr <gsl_function>
+#field root , CDouble
+#field x_lower , CDouble
+#field x_upper , CDouble
+#field state , Ptr ()
+#stoptype
+
+#starttype gsl_root_fdfsolver_type
+#field name , CString
+#field size , CSize
+#field set , FunPtr (Ptr () -> Ptr <gsl_function_fdf> -> Ptr CDouble -> IO  CInt)
+#field iterate , FunPtr (Ptr () -> Ptr <gsl_function_fdf> -> Ptr CDouble -> IO  CInt)
+#stoptype
+
+#starttype gsl_root_fdfsolver
+#field type , Ptr <gsl_root_fdfsolver_type>
+#field fdf , Ptr <gsl_function_fdf>
+#field root , CDouble
+#field state , Ptr ()
+#stoptype
+
+#ccall gsl_root_fsolver_alloc , Ptr <gsl_root_fsolver_type> -> IO (Ptr <gsl_root_fsolver>)
+#ccall gsl_root_fsolver_free , Ptr <gsl_root_fsolver> -> IO ()
+#ccall gsl_root_fsolver_set , Ptr <gsl_root_fsolver> -> Ptr <gsl_function> -> CDouble -> CDouble -> IO CInt
+#ccall gsl_root_fsolver_iterate , Ptr <gsl_root_fsolver> -> IO CInt
+#ccall gsl_root_fsolver_name , Ptr <gsl_root_fsolver> -> IO CString 
+#ccall gsl_root_fsolver_root , Ptr <gsl_root_fsolver> -> IO CDouble
+#ccall gsl_root_fsolver_x_lower , Ptr <gsl_root_fsolver> -> IO CDouble
+#ccall gsl_root_fsolver_x_upper , Ptr <gsl_root_fsolver> -> IO CDouble
+#ccall gsl_root_fdfsolver_alloc , Ptr <gsl_root_fdfsolver_type> -> IO (Ptr <gsl_root_fdfsolver>)
+#ccall gsl_root_fdfsolver_set , Ptr <gsl_root_fdfsolver> -> Ptr <gsl_function_fdf> -> CDouble -> IO CInt
+#ccall gsl_root_fdfsolver_iterate , Ptr <gsl_root_fdfsolver> -> IO CInt
+#ccall gsl_root_fdfsolver_free , Ptr <gsl_root_fdfsolver> -> IO ()
+#ccall gsl_root_fdfsolver_name , Ptr <gsl_root_fdfsolver> -> IO CString 
+#ccall gsl_root_fdfsolver_root , Ptr <gsl_root_fdfsolver> -> IO CDouble
+#ccall gsl_root_test_interval , CDouble -> CDouble -> CDouble -> CDouble -> IO CInt
+#ccall gsl_root_test_residual , CDouble -> CDouble -> IO CInt
+#ccall gsl_root_test_delta , CDouble -> CDouble -> CDouble -> CDouble -> IO CInt
+
+#globalvar gsl_root_fsolver_bisection , Ptr <gsl_root_fsolver_type>
+#globalvar gsl_root_fsolver_brent , Ptr <gsl_root_fsolver_type>
+#globalvar gsl_root_fsolver_falsepos , Ptr <gsl_root_fsolver_type>
+#globalvar gsl_root_fdfsolver_newton , Ptr <gsl_root_fdfsolver_type>
+#globalvar gsl_root_fdfsolver_secant , Ptr <gsl_root_fdfsolver_type>
+#globalvar gsl_root_fdfsolver_steffenson , Ptr <gsl_root_fdfsolver_type>
+
diff --git a/src/Bindings/Gsl/OrdinaryDifferentialEquations.c b/src/Bindings/Gsl/OrdinaryDifferentialEquations.c
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/OrdinaryDifferentialEquations.c
@@ -0,0 +1,5 @@
+#include <bindings.cmacros.h>
+#include <gsl/gsl_odeiv2.h>
+
+BC_INLINE4(GSL_ODEIV_FN_EVAL,gsl_odeiv2_system*,double,double*,double*,int)
+BC_INLINE5(GSL_ODEIV_JA_EVAL,gsl_odeiv2_system*,double,double*,double*,double*,int)
diff --git a/src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc b/src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/OrdinaryDifferentialEquations.hsc
@@ -0,0 +1,125 @@
+#include <bindings.dsl.h>
+#include <gsl/gsl_odeiv2.h>
+
+-- | <http://www.gnu.org/software/gsl/manual/html_node/Ordinary-Differential-Equations.html>
+
+module Bindings.Gsl.OrdinaryDifferentialEquations where
+#strict_import
+
+#starttype gsl_odeiv2_system
+#field function , FunPtr (CDouble -> Ptr CDouble -> Ptr CDouble -> \
+    Ptr () -> IO CInt)
+#field jacobian , FunPtr (CDouble -> Ptr CDouble -> Ptr CDouble -> \
+    Ptr CDouble -> Ptr ()  -> IO CInt)
+#field dimension , CSize
+#field params , Ptr ()
+#stoptype
+
+#ccall gsl_odeiv2_step_alloc , Ptr <gsl_odeiv2_step_type> -> CSize -> IO (Ptr <gsl_odeiv2_step>)
+#ccall gsl_odeiv2_step_reset , Ptr <gsl_odeiv2_step> -> IO CInt
+#ccall gsl_odeiv2_step_free , Ptr <gsl_odeiv2_step> -> IO ()
+#ccall gsl_odeiv2_step_name , Ptr <gsl_odeiv2_step> -> IO CString
+#ccall gsl_odeiv2_step_order , Ptr <gsl_odeiv2_step> -> IO CUInt
+#ccall gsl_odeiv2_step_set_driver , Ptr <gsl_odeiv2_step> -> Ptr <gsl_odeiv2_driver> -> IO CInt
+#ccall gsl_odeiv2_step_apply , Ptr <gsl_odeiv2_step> -> CDouble -> CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr <gsl_odeiv2_system> -> IO CInt
+
+#globalvar gsl_odeiv2_step_rk2 , Ptr <gsl_odeiv2_step_type>
+#globalvar gsl_odeiv2_step_rk4 , Ptr <gsl_odeiv2_step_type>
+#globalvar gsl_odeiv2_step_rkf45 , Ptr <gsl_odeiv2_step_type>
+#globalvar gsl_odeiv2_step_rkck , Ptr <gsl_odeiv2_step_type>
+#globalvar gsl_odeiv2_step_rk8pd , Ptr <gsl_odeiv2_step_type>
+#globalvar gsl_odeiv2_step_rk1imp , Ptr <gsl_odeiv2_step_type>
+#globalvar gsl_odeiv2_step_rk2imp , Ptr <gsl_odeiv2_step_type>
+#globalvar gsl_odeiv2_step_rk4imp , Ptr <gsl_odeiv2_step_type>
+#globalvar gsl_odeiv2_step_bsimp , Ptr <gsl_odeiv2_step_type>
+#globalvar gsl_odeiv2_step_msadams , Ptr <gsl_odeiv2_step_type>
+#globalvar gsl_odeiv2_step_msbdf , Ptr <gsl_odeiv2_step_type>
+
+#ccall gsl_odeiv2_control_standard_new , CDouble -> CDouble -> CDouble -> CDouble -> IO (Ptr <gsl_odeiv2_control>)
+#ccall gsl_odeiv2_control_y_new , CDouble -> CDouble -> IO (Ptr <gsl_odeiv2_control>)
+#ccall gsl_odeiv2_control_yp_new , CDouble -> CDouble -> IO (Ptr <gsl_odeiv2_control>)
+#ccall gsl_odeiv2_control_scaled_new , CDouble -> CDouble -> CDouble -> CDouble -> Ptr CDouble -> CSize -> IO (Ptr <gsl_odeiv2_control>)
+#ccall gsl_odeiv2_control_alloc , Ptr <gsl_odeiv2_control_type> -> IO (Ptr <gsl_odeiv2_control>)
+#ccall gsl_odeiv2_control_init , Ptr <gsl_odeiv2_control> -> CDouble -> CDouble -> CDouble -> CDouble -> IO CInt
+#ccall gsl_odeiv2_control_free , Ptr <gsl_odeiv2_control> -> IO ()
+#ccall gsl_odeiv2_control_hadjust , Ptr <gsl_odeiv2_control> -> Ptr <gsl_odeiv2_step> -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr Double -> IO CInt
+#ccall gsl_odeiv2_control_name , Ptr <gsl_odeiv2_control> -> IO CString
+#ccall gsl_odeiv2_control_errlevel , Ptr <gsl_odeiv2_control> -> CDouble -> CDouble -> CDouble -> CSize -> Ptr Double -> IO CInt
+#ccall gsl_odeiv2_control_set_driver , Ptr <gsl_odeiv2_control> -> Ptr <gsl_odeiv2_driver> -> IO CInt
+
+#num GSL_ODEIV_HADJ_INC
+#num GSL_ODEIV_HADJ_NIL
+#num GSL_ODEIV_HADJ_DEC
+
+#ccall gsl_odeiv2_evolve_alloc , CSize -> IO (Ptr <gsl_odeiv2_evolve>)
+#ccall gsl_odeiv2_evolve_apply , Ptr <gsl_odeiv2_evolve> -> Ptr <gsl_odeiv2_control> -> Ptr <gsl_odeiv2_step> -> Ptr <gsl_odeiv2_system> -> Ptr Double -> CDouble -> Ptr Double -> Ptr CDouble -> IO CInt
+#ccall gsl_odeiv2_evolve_apply_fixed_step , Ptr <gsl_odeiv2_evolve> -> Ptr <gsl_odeiv2_control> -> Ptr <gsl_odeiv2_step> -> Ptr <gsl_odeiv2_system> -> Ptr CDouble -> CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_odeiv2_evolve_reset , Ptr <gsl_odeiv2_evolve> -> IO CInt
+#ccall gsl_odeiv2_evolve_free , Ptr <gsl_odeiv2_evolve> -> IO ()
+#ccall gsl_odeiv2_evolve_set_driver , Ptr <gsl_odeiv2_evolve> -> Ptr <gsl_odeiv2_driver> -> IO CInt
+
+#ccall gsl_odeiv2_driver_alloc_y_new , Ptr <gsl_odeiv2_system> -> Ptr <gsl_odeiv2_step_type> -> CDouble -> CDouble -> CDouble -> IO (Ptr <gsl_odeiv2_driver>)
+#ccall gsl_odeiv2_driver_alloc_yp_new , Ptr <gsl_odeiv2_system> -> Ptr <gsl_odeiv2_step_type> -> CDouble -> CDouble -> CDouble -> IO (Ptr <gsl_odeiv2_driver>)
+#ccall gsl_odeiv2_driver_alloc_standard_new , Ptr <gsl_odeiv2_system> -> Ptr <gsl_odeiv2_step_type> -> CDouble -> CDouble -> CDouble -> CDouble -> CDouble -> IO (Ptr <gsl_odeiv2_driver>)
+#ccall gsl_odeiv2_driver_alloc_scaled_new , Ptr <gsl_odeiv2_system> -> Ptr <gsl_odeiv2_step_type> -> CDouble -> CDouble -> CDouble -> CDouble -> CDouble -> Ptr CDouble -> IO (Ptr <gsl_odeiv2_driver>)
+#ccall gsl_odeiv2_driver_set_hmin , Ptr <gsl_odeiv2_driver> -> CDouble -> IO CInt
+#ccall gsl_odeiv2_driver_set_hmax , Ptr <gsl_odeiv2_driver> -> CDouble -> IO CInt
+#ccall gsl_odeiv2_driver_set_nmax , Ptr <gsl_odeiv2_driver> -> CULong -> IO CInt
+#ccall gsl_odeiv2_driver_apply , Ptr <gsl_odeiv2_driver> -> Ptr Double -> CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_odeiv2_driver_apply_fixed_step , Ptr <gsl_odeiv2_driver> -> Ptr Double -> CDouble -> CULong -> Ptr CDouble -> IO CInt
+#ccall gsl_odeiv2_driver_reset , Ptr <gsl_odeiv2_driver> -> IO CInt
+#ccall gsl_odeiv2_driver_free , Ptr <gsl_odeiv2_driver> -> IO ()
+
+#cinline GSL_ODEIV_FN_EVAL , Ptr <gsl_odeiv2_system> -> CDouble -> \
+    Ptr CDouble -> Ptr CDouble -> IO CInt
+#cinline GSL_ODEIV_JA_EVAL , Ptr <gsl_odeiv2_system> -> CDouble -> \
+    Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> IO CInt
+
+#starttype gsl_odeiv2_step
+#field type , Ptr <gsl_odeiv2_step_type>
+#field dimension , CSize
+#field state , Ptr ()
+#stoptype
+
+#starttype gsl_odeiv2_control
+#field type , Ptr <gsl_odeiv2_control_type>
+#field state , Ptr ()
+#stoptype
+
+#starttype gsl_odeiv2_evolve
+#field dimension , CSize
+#field y0 , Ptr CDouble
+#field yerr , Ptr CDouble
+#field dydt_in , Ptr CDouble
+#field dydt_out , Ptr CDouble
+#field last_step , CDouble 
+#field count , CULong 
+#field failed_steps , CULong 
+#field driver , Ptr <gsl_odeiv2_driver>
+#stoptype
+
+#starttype gsl_odeiv2_driver
+#field sys , Ptr <gsl_odeiv2_system>
+#field s , Ptr <gsl_odeiv2_step>
+#field c , Ptr <gsl_odeiv2_control>
+#field e , Ptr <gsl_odeiv2_evolve>
+#field h , CDouble
+#field hmin , CDouble
+#field hmax , CDouble
+#field n , CULong
+#field nmax , CULong
+#stoptype
+
+#opaque_t gsl_odeiv2_step_type
+
+#starttype gsl_odeiv2_control_type
+#field name , CString
+#field alloc , FunPtr (IO (Ptr ()))
+#field init , FunPtr (Ptr ()-> CDouble-> CDouble-> CDouble-> CDouble -> IO CInt)
+#field hadjust , FunPtr (Ptr () ->  CSize ->  CUInt ->  Ptr CDouble -> \
+    Ptr CDouble ->  Ptr CDouble ->  Ptr Double -> IO CInt)
+#field errlevel , FunPtr (Ptr () ->  CDouble ->  CDouble ->  CDouble -> \
+    CSize ->  Ptr CDouble -> IO CInt)
+#field set_driver , FunPtr (Ptr () ->  Ptr <gsl_odeiv2_driver> -> IO CInt)
+#field free , FunPtr (Ptr () -> IO ())
+#stoptype
diff --git a/src/Bindings/Gsl/Permutations.hsc b/src/Bindings/Gsl/Permutations.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/Permutations.hsc
@@ -0,0 +1,95 @@
+#include <bindings.dsl.h>
+#include <gsl/gsl_permutation.h>
+
+-- | <http://www.gnu.org/software/gsl/manual/html_node/Permutation-Examples.html>
+
+module Bindings.Gsl.Permutations where
+#strict_import
+import Bindings.Gsl.VectorsAndMatrices.DataTypes
+
+#starttype gsl_permutation
+#field size , CSize
+#field data , Ptr CSize
+#stoptype
+
+#ccall gsl_permutation_alloc , CSize -> IO (Ptr <gsl_permutation>)
+#ccall gsl_permutation_calloc , CSize -> IO (Ptr <gsl_permutation>)
+#ccall gsl_permutation_init , Ptr <gsl_permutation> -> IO ()
+#ccall gsl_permutation_free , Ptr <gsl_permutation> -> IO ()
+#ccall gsl_permutation_memcpy , Ptr <gsl_permutation> -> Ptr <gsl_permutation> -> IO CInt
+#ccall gsl_permutation_fread , Ptr CFile -> Ptr <gsl_permutation> -> IO CInt
+#ccall gsl_permutation_fwrite , Ptr CFile -> Ptr <gsl_permutation> -> IO CInt
+#ccall gsl_permutation_fscanf , Ptr CFile -> Ptr <gsl_permutation> -> IO CInt
+#ccall gsl_permutation_fprintf , Ptr CFile -> Ptr <gsl_permutation> -> CString -> IO CInt
+#ccall gsl_permutation_size , Ptr <gsl_permutation> -> IO CSize
+#ccall gsl_permutation_data , Ptr <gsl_permutation> -> IO (Ptr CSize)
+#ccall gsl_permutation_swap , Ptr <gsl_permutation> -> CSize -> CSize -> IO CInt
+#ccall gsl_permutation_valid , Ptr <gsl_permutation> -> IO CInt
+#ccall gsl_permutation_reverse , Ptr <gsl_permutation> -> IO ()
+#ccall gsl_permutation_inverse , Ptr <gsl_permutation> -> Ptr <gsl_permutation> -> IO CInt
+#ccall gsl_permutation_next , Ptr <gsl_permutation> -> IO CInt
+#ccall gsl_permutation_prev , Ptr <gsl_permutation> -> IO CInt
+#ccall gsl_permutation_mul , Ptr <gsl_permutation> -> Ptr <gsl_permutation> -> Ptr <gsl_permutation> -> IO CInt
+#ccall gsl_permutation_linear_to_canonical , Ptr <gsl_permutation> -> Ptr <gsl_permutation> -> IO CInt
+#ccall gsl_permutation_canonical_to_linear , Ptr <gsl_permutation> -> Ptr <gsl_permutation> -> IO CInt
+#ccall gsl_permutation_inversions , Ptr <gsl_permutation> -> IO CSize
+#ccall gsl_permutation_linear_cycles , Ptr <gsl_permutation> -> IO CSize
+#ccall gsl_permutation_canonical_cycles , Ptr <gsl_permutation> -> IO CSize
+#ccall gsl_permutation_get , Ptr <gsl_permutation> -> CSize -> IO CSize
+#ccall gsl_permute_char , Ptr CSize -> CString -> CSize -> CSize -> IO CInt
+#ccall gsl_permute_char_inverse , Ptr CSize -> CString -> CSize -> CSize -> IO CInt
+#ccall gsl_permute_complex , Ptr CSize -> Ptr CDouble -> CSize -> CSize -> IO CInt
+#ccall gsl_permute_complex_inverse , Ptr CSize -> Ptr CDouble -> CSize -> CSize -> IO CInt
+#ccall gsl_permute_complex_float , Ptr CSize -> Ptr CFloat -> CSize -> CSize -> IO CInt
+#ccall gsl_permute_complex_float_inverse , Ptr CSize -> Ptr CFloat -> CSize -> CSize -> IO CInt
+-- #ccall gsl_permute_complex_long_double , Ptr CSize -> Ptr CLDouble -> CSize -> CSize -> IO CInt
+-- #ccall gsl_permute_complex_long_double_inverse , Ptr CSize -> Ptr CLDouble -> CSize -> CSize -> IO CInt
+#ccall gsl_permute , Ptr CSize -> Ptr CDouble -> CSize -> CSize -> IO CInt
+#ccall gsl_permute_inverse , Ptr CSize -> Ptr CDouble -> CSize -> CSize -> IO CInt
+#ccall gsl_permute_float , Ptr CSize -> Ptr CFloat -> CSize -> CSize -> IO CInt
+#ccall gsl_permute_float_inverse , Ptr CSize -> Ptr CFloat -> CSize -> CSize -> IO CInt
+#ccall gsl_permute_int , Ptr CSize -> Ptr CInt -> CSize -> CSize -> IO CInt
+#ccall gsl_permute_int_inverse , Ptr CSize -> Ptr CInt -> CSize -> CSize -> IO CInt
+-- #ccall gsl_permute_long_double , Ptr CSize -> Ptr CLDouble -> CSize -> CSize -> IO CInt
+-- #ccall gsl_permute_long_double_inverse , Ptr CSize -> Ptr CLDouble -> CSize -> CSize -> IO CInt
+#ccall gsl_permute_long , Ptr CSize -> Ptr CLong -> CSize -> CSize -> IO CInt
+#ccall gsl_permute_long_inverse , Ptr CSize -> Ptr CLong -> CSize -> CSize -> IO CInt
+#ccall gsl_permute_short , Ptr CSize -> Ptr CShort -> CSize -> CSize -> IO CInt
+#ccall gsl_permute_short_inverse , Ptr CSize -> Ptr CShort -> CSize -> CSize -> IO CInt
+#ccall gsl_permute_uchar , Ptr CSize -> Ptr CUChar -> CSize -> CSize -> IO CInt
+#ccall gsl_permute_uchar_inverse , Ptr CSize -> Ptr CUChar -> CSize -> CSize -> IO CInt
+#ccall gsl_permute_uint , Ptr CSize -> Ptr CUInt -> CSize -> CSize -> IO CInt
+#ccall gsl_permute_uint_inverse , Ptr CSize -> Ptr CUInt -> CSize -> CSize -> IO CInt
+#ccall gsl_permute_ulong , Ptr CSize -> Ptr CULong -> CSize -> CSize -> IO CInt
+#ccall gsl_permute_ulong_inverse , Ptr CSize -> Ptr CULong -> CSize -> CSize -> IO CInt
+#ccall gsl_permute_ushort , Ptr CSize -> Ptr CUShort -> CSize -> CSize -> IO CInt
+#ccall gsl_permute_ushort_inverse , Ptr CSize -> Ptr CUShort -> CSize -> CSize -> IO CInt
+#ccall gsl_permute_vector_char , Ptr <gsl_permutation> -> Ptr <gsl_vector_char> -> IO CInt
+#ccall gsl_permute_vector_char_inverse , Ptr <gsl_permutation> -> Ptr <gsl_vector_char> -> IO CInt
+#ccall gsl_permute_vector_complex , Ptr <gsl_permutation> -> Ptr <gsl_vector_complex> -> IO CInt
+#ccall gsl_permute_vector_complex_inverse , Ptr <gsl_permutation> -> Ptr <gsl_vector_complex> -> IO CInt
+#ccall gsl_permute_vector_complex_float , Ptr <gsl_permutation> -> Ptr <gsl_vector_complex_float> -> IO CInt
+#ccall gsl_permute_vector_complex_float_inverse , Ptr <gsl_permutation> -> Ptr <gsl_vector_complex_float> -> IO CInt
+-- #ccall gsl_permute_vector_complex_long_double , Ptr <gsl_permutation> -> Ptr <gsl_vector_complex_long_double> -> IO CInt
+-- #ccall gsl_permute_vector_complex_long_double_inverse , Ptr <gsl_permutation> -> Ptr <gsl_vector_complex_long_double> -> IO CInt
+#ccall gsl_permute_vector , Ptr <gsl_permutation> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_permute_vector_inverse , Ptr <gsl_permutation> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_permute_vector_float , Ptr <gsl_permutation> -> Ptr <gsl_vector_float> -> IO CInt
+#ccall gsl_permute_vector_float_inverse , Ptr <gsl_permutation> -> Ptr <gsl_vector_float> -> IO CInt
+#ccall gsl_permute_vector_int , Ptr <gsl_permutation> -> Ptr <gsl_vector_int> -> IO CInt
+#ccall gsl_permute_vector_int_inverse , Ptr <gsl_permutation> -> Ptr <gsl_vector_int> -> IO CInt
+-- #ccall gsl_permute_vector_long_double , Ptr <gsl_permutation> -> Ptr <gsl_vector_long_double> -> IO CInt
+-- #ccall gsl_permute_vector_long_double_inverse , Ptr <gsl_permutation> -> Ptr <gsl_vector_long_double> -> IO CInt
+#ccall gsl_permute_vector_long , Ptr <gsl_permutation> -> Ptr <gsl_vector_long> -> IO CInt
+#ccall gsl_permute_vector_long_inverse , Ptr <gsl_permutation> -> Ptr <gsl_vector_long> -> IO CInt
+#ccall gsl_permute_vector_short , Ptr <gsl_permutation> -> Ptr <gsl_vector_short> -> IO CInt
+#ccall gsl_permute_vector_short_inverse , Ptr <gsl_permutation> -> Ptr <gsl_vector_short> -> IO CInt
+#ccall gsl_permute_vector_uchar , Ptr <gsl_permutation> -> Ptr <gsl_vector_uchar> -> IO CInt
+#ccall gsl_permute_vector_uchar_inverse , Ptr <gsl_permutation> -> Ptr <gsl_vector_uchar> -> IO CInt
+#ccall gsl_permute_vector_uint , Ptr <gsl_permutation> -> Ptr <gsl_vector_uint> -> IO CInt
+#ccall gsl_permute_vector_uint_inverse , Ptr <gsl_permutation> -> Ptr <gsl_vector_uint> -> IO CInt
+#ccall gsl_permute_vector_ulong , Ptr <gsl_permutation> -> Ptr <gsl_vector_ulong> -> IO CInt
+#ccall gsl_permute_vector_ulong_inverse , Ptr <gsl_permutation> -> Ptr <gsl_vector_ulong> -> IO CInt
+#ccall gsl_permute_vector_ushort , Ptr <gsl_permutation> -> Ptr <gsl_vector_ushort> -> IO CInt
+#ccall gsl_permute_vector_ushort_inverse , Ptr <gsl_permutation> -> Ptr <gsl_vector_ushort> -> IO CInt
+
diff --git a/src/Bindings/Gsl/PhysicalConstants.hsc b/src/Bindings/Gsl/PhysicalConstants.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/PhysicalConstants.hsc
@@ -0,0 +1,411 @@
+#include <bindings.dsl.h>
+#include <gsl/gsl_const.h>
+
+-- | <http://www.gnu.org/software/gsl/manual/html_node/Physical-Constants.html>
+
+module Bindings.Gsl.PhysicalConstants where
+#strict_import
+
+#fractional GSL_CONST_CGS_ACRE
+#fractional GSL_CONST_CGSM_ACRE
+#fractional GSL_CONST_MKS_ACRE
+#fractional GSL_CONST_MKSA_ACRE
+#fractional GSL_CONST_CGS_ANGSTROM
+#fractional GSL_CONST_CGSM_ANGSTROM
+#fractional GSL_CONST_MKS_ANGSTROM
+#fractional GSL_CONST_MKSA_ANGSTROM
+#fractional GSL_CONST_CGS_ASTRONOMICAL_UNIT
+#fractional GSL_CONST_CGSM_ASTRONOMICAL_UNIT
+#fractional GSL_CONST_MKS_ASTRONOMICAL_UNIT
+#fractional GSL_CONST_MKSA_ASTRONOMICAL_UNIT
+#fractional GSL_CONST_NUM_ATTO
+#fractional GSL_CONST_NUM_AVOGADRO
+#fractional GSL_CONST_CGS_BAR
+#fractional GSL_CONST_CGSM_BAR
+#fractional GSL_CONST_MKS_BAR
+#fractional GSL_CONST_MKSA_BAR
+#fractional GSL_CONST_CGS_BARN
+#fractional GSL_CONST_CGSM_BARN
+#fractional GSL_CONST_MKS_BARN
+#fractional GSL_CONST_MKSA_BARN
+#fractional GSL_CONST_MKS_BOHR_MAGNETON
+#fractional GSL_CONST_MKSA_BOHR_MAGNETON
+#fractional GSL_CONST_CGS_BOHR_RADIUS
+#fractional GSL_CONST_CGSM_BOHR_RADIUS
+#fractional GSL_CONST_MKS_BOHR_RADIUS
+#fractional GSL_CONST_MKSA_BOHR_RADIUS
+#fractional GSL_CONST_CGS_BOLTZMANN
+#fractional GSL_CONST_CGSM_BOLTZMANN
+#fractional GSL_CONST_MKS_BOLTZMANN
+#fractional GSL_CONST_MKSA_BOLTZMANN
+#fractional GSL_CONST_CGS_BTU
+#fractional GSL_CONST_CGSM_BTU
+#fractional GSL_CONST_MKS_BTU
+#fractional GSL_CONST_MKSA_BTU
+#fractional GSL_CONST_CGS_CALORIE
+#fractional GSL_CONST_CGSM_CALORIE
+#fractional GSL_CONST_MKS_CALORIE
+#fractional GSL_CONST_MKSA_CALORIE
+#fractional GSL_CONST_CGS_CANADIAN_GALLON
+#fractional GSL_CONST_CGSM_CANADIAN_GALLON
+#fractional GSL_CONST_MKS_CANADIAN_GALLON
+#fractional GSL_CONST_MKSA_CANADIAN_GALLON
+#fractional GSL_CONST_CGS_CARAT
+#fractional GSL_CONST_CGSM_CARAT
+#fractional GSL_CONST_MKS_CARAT
+#fractional GSL_CONST_MKSA_CARAT
+#fractional GSL_CONST_CGS_CUP
+#fractional GSL_CONST_CGSM_CUP
+#fractional GSL_CONST_MKS_CUP
+#fractional GSL_CONST_MKSA_CUP
+#fractional GSL_CONST_CGS_CURIE
+#fractional GSL_CONST_CGSM_CURIE
+#fractional GSL_CONST_MKS_CURIE
+#fractional GSL_CONST_MKSA_CURIE
+#fractional GSL_CONST_CGS_DAY
+#fractional GSL_CONST_CGSM_DAY
+#fractional GSL_CONST_MKS_DAY
+#fractional GSL_CONST_MKSA_DAY
+#fractional GSL_CONST_MKS_DEBYE
+#fractional GSL_CONST_MKSA_DEBYE
+#fractional GSL_CONST_CGS_DYNE
+#fractional GSL_CONST_CGSM_DYNE
+#fractional GSL_CONST_MKS_DYNE
+#fractional GSL_CONST_MKSA_DYNE
+#fractional GSL_CONST_MKS_ELECTRON_CHARGE
+#fractional GSL_CONST_MKSA_ELECTRON_CHARGE
+#fractional GSL_CONST_MKS_ELECTRON_MAGNETIC_MOMENT
+#fractional GSL_CONST_MKSA_ELECTRON_MAGNETIC_MOMENT
+#fractional GSL_CONST_CGS_ELECTRON_VOLT
+#fractional GSL_CONST_CGSM_ELECTRON_VOLT
+#fractional GSL_CONST_MKS_ELECTRON_VOLT
+#fractional GSL_CONST_MKSA_ELECTRON_VOLT
+#fractional GSL_CONST_CGS_ERG
+#fractional GSL_CONST_CGSM_ERG
+#fractional GSL_CONST_MKS_ERG
+#fractional GSL_CONST_MKSA_ERG
+#fractional GSL_CONST_NUM_EXA
+#fractional GSL_CONST_MKS_FARADAY
+#fractional GSL_CONST_MKSA_FARADAY
+#fractional GSL_CONST_CGS_FATHOM
+#fractional GSL_CONST_CGSM_FATHOM
+#fractional GSL_CONST_MKS_FATHOM
+#fractional GSL_CONST_MKSA_FATHOM
+#fractional GSL_CONST_NUM_FEMTO
+#fractional GSL_CONST_NUM_FINE_STRUCTURE
+#fractional GSL_CONST_CGS_FLUID_OUNCE
+#fractional GSL_CONST_CGSM_FLUID_OUNCE
+#fractional GSL_CONST_MKS_FLUID_OUNCE
+#fractional GSL_CONST_MKSA_FLUID_OUNCE
+#fractional GSL_CONST_CGS_FOOT
+#fractional GSL_CONST_CGSM_FOOT
+#fractional GSL_CONST_MKS_FOOT
+#fractional GSL_CONST_MKSA_FOOT
+#fractional GSL_CONST_CGS_FOOTCANDLE
+#fractional GSL_CONST_CGSM_FOOTCANDLE
+#fractional GSL_CONST_MKS_FOOTCANDLE
+#fractional GSL_CONST_MKSA_FOOTCANDLE
+#fractional GSL_CONST_CGS_FOOTLAMBERT
+#fractional GSL_CONST_CGSM_FOOTLAMBERT
+#fractional GSL_CONST_MKS_FOOTLAMBERT
+#fractional GSL_CONST_MKSA_FOOTLAMBERT
+#fractional GSL_CONST_MKS_GAUSS
+#fractional GSL_CONST_MKSA_GAUSS
+#fractional GSL_CONST_NUM_GIGA
+#fractional GSL_CONST_CGS_GRAM_FORCE
+#fractional GSL_CONST_CGSM_GRAM_FORCE
+#fractional GSL_CONST_MKS_GRAM_FORCE
+#fractional GSL_CONST_MKSA_GRAM_FORCE
+#fractional GSL_CONST_CGS_GRAVITATIONAL_CONSTANT
+#fractional GSL_CONST_CGSM_GRAVITATIONAL_CONSTANT
+#fractional GSL_CONST_MKS_GRAVITATIONAL_CONSTANT
+#fractional GSL_CONST_MKSA_GRAVITATIONAL_CONSTANT
+#fractional GSL_CONST_CGS_GRAV_ACCEL
+#fractional GSL_CONST_CGSM_GRAV_ACCEL
+#fractional GSL_CONST_MKS_GRAV_ACCEL
+#fractional GSL_CONST_MKSA_GRAV_ACCEL
+#fractional GSL_CONST_CGS_HECTARE
+#fractional GSL_CONST_CGSM_HECTARE
+#fractional GSL_CONST_MKS_HECTARE
+#fractional GSL_CONST_MKSA_HECTARE
+#fractional GSL_CONST_CGS_HORSEPOWER
+#fractional GSL_CONST_CGSM_HORSEPOWER
+#fractional GSL_CONST_MKS_HORSEPOWER
+#fractional GSL_CONST_MKSA_HORSEPOWER
+#fractional GSL_CONST_CGS_HOUR
+#fractional GSL_CONST_CGSM_HOUR
+#fractional GSL_CONST_MKS_HOUR
+#fractional GSL_CONST_MKSA_HOUR
+#fractional GSL_CONST_CGS_INCH
+#fractional GSL_CONST_CGSM_INCH
+#fractional GSL_CONST_MKS_INCH
+#fractional GSL_CONST_MKSA_INCH
+#fractional GSL_CONST_CGS_INCH_OF_MERCURY
+#fractional GSL_CONST_CGSM_INCH_OF_MERCURY
+#fractional GSL_CONST_MKS_INCH_OF_MERCURY
+#fractional GSL_CONST_MKSA_INCH_OF_MERCURY
+#fractional GSL_CONST_CGS_INCH_OF_WATER
+#fractional GSL_CONST_CGSM_INCH_OF_WATER
+#fractional GSL_CONST_MKS_INCH_OF_WATER
+#fractional GSL_CONST_MKSA_INCH_OF_WATER
+#fractional GSL_CONST_CGS_JOULE
+#fractional GSL_CONST_CGSM_JOULE
+#fractional GSL_CONST_MKS_JOULE
+#fractional GSL_CONST_MKSA_JOULE
+#fractional GSL_CONST_NUM_KILO
+#fractional GSL_CONST_CGS_KILOMETERS_PER_HOUR
+#fractional GSL_CONST_CGSM_KILOMETERS_PER_HOUR
+#fractional GSL_CONST_MKS_KILOMETERS_PER_HOUR
+#fractional GSL_CONST_MKSA_KILOMETERS_PER_HOUR
+#fractional GSL_CONST_CGS_KILOPOUND_FORCE
+#fractional GSL_CONST_CGSM_KILOPOUND_FORCE
+#fractional GSL_CONST_MKS_KILOPOUND_FORCE
+#fractional GSL_CONST_MKSA_KILOPOUND_FORCE
+#fractional GSL_CONST_CGS_KNOT
+#fractional GSL_CONST_CGSM_KNOT
+#fractional GSL_CONST_MKS_KNOT
+#fractional GSL_CONST_MKSA_KNOT
+#fractional GSL_CONST_CGS_LAMBERT
+#fractional GSL_CONST_CGSM_LAMBERT
+#fractional GSL_CONST_MKS_LAMBERT
+#fractional GSL_CONST_MKSA_LAMBERT
+#fractional GSL_CONST_CGS_LIGHT_YEAR
+#fractional GSL_CONST_CGSM_LIGHT_YEAR
+#fractional GSL_CONST_MKS_LIGHT_YEAR
+#fractional GSL_CONST_MKSA_LIGHT_YEAR
+#fractional GSL_CONST_CGS_LITER
+#fractional GSL_CONST_CGSM_LITER
+#fractional GSL_CONST_MKS_LITER
+#fractional GSL_CONST_MKSA_LITER
+#fractional GSL_CONST_CGS_LUMEN
+#fractional GSL_CONST_CGSM_LUMEN
+#fractional GSL_CONST_MKS_LUMEN
+#fractional GSL_CONST_MKSA_LUMEN
+#fractional GSL_CONST_CGS_LUX
+#fractional GSL_CONST_CGSM_LUX
+#fractional GSL_CONST_MKS_LUX
+#fractional GSL_CONST_MKSA_LUX
+#fractional GSL_CONST_CGS_MASS_ELECTRON
+#fractional GSL_CONST_CGSM_MASS_ELECTRON
+#fractional GSL_CONST_MKS_MASS_ELECTRON
+#fractional GSL_CONST_MKSA_MASS_ELECTRON
+#fractional GSL_CONST_CGS_MASS_MUON
+#fractional GSL_CONST_CGSM_MASS_MUON
+#fractional GSL_CONST_MKS_MASS_MUON
+#fractional GSL_CONST_MKSA_MASS_MUON
+#fractional GSL_CONST_CGS_MASS_NEUTRON
+#fractional GSL_CONST_CGSM_MASS_NEUTRON
+#fractional GSL_CONST_MKS_MASS_NEUTRON
+#fractional GSL_CONST_MKSA_MASS_NEUTRON
+#fractional GSL_CONST_CGS_MASS_PROTON
+#fractional GSL_CONST_CGSM_MASS_PROTON
+#fractional GSL_CONST_MKS_MASS_PROTON
+#fractional GSL_CONST_MKSA_MASS_PROTON
+#fractional GSL_CONST_NUM_MEGA
+#fractional GSL_CONST_CGS_METER_OF_MERCURY
+#fractional GSL_CONST_CGSM_METER_OF_MERCURY
+#fractional GSL_CONST_MKS_METER_OF_MERCURY
+#fractional GSL_CONST_MKSA_METER_OF_MERCURY
+#fractional GSL_CONST_CGS_METRIC_TON
+#fractional GSL_CONST_CGSM_METRIC_TON
+#fractional GSL_CONST_MKS_METRIC_TON
+#fractional GSL_CONST_MKSA_METRIC_TON
+#fractional GSL_CONST_NUM_MICRO
+#fractional GSL_CONST_CGS_MICRON
+#fractional GSL_CONST_CGSM_MICRON
+#fractional GSL_CONST_MKS_MICRON
+#fractional GSL_CONST_MKSA_MICRON
+#fractional GSL_CONST_CGS_MIL
+#fractional GSL_CONST_CGSM_MIL
+#fractional GSL_CONST_MKS_MIL
+#fractional GSL_CONST_MKSA_MIL
+#fractional GSL_CONST_CGS_MILE
+#fractional GSL_CONST_CGSM_MILE
+#fractional GSL_CONST_MKS_MILE
+#fractional GSL_CONST_MKSA_MILE
+#fractional GSL_CONST_CGS_MILES_PER_HOUR
+#fractional GSL_CONST_CGSM_MILES_PER_HOUR
+#fractional GSL_CONST_MKS_MILES_PER_HOUR
+#fractional GSL_CONST_MKSA_MILES_PER_HOUR
+#fractional GSL_CONST_NUM_MILLI
+#fractional GSL_CONST_CGS_MINUTE
+#fractional GSL_CONST_CGSM_MINUTE
+#fractional GSL_CONST_MKS_MINUTE
+#fractional GSL_CONST_MKSA_MINUTE
+#fractional GSL_CONST_CGS_MOLAR_GAS
+#fractional GSL_CONST_CGSM_MOLAR_GAS
+#fractional GSL_CONST_MKS_MOLAR_GAS
+#fractional GSL_CONST_MKSA_MOLAR_GAS
+#fractional GSL_CONST_NUM_NANO
+#fractional GSL_CONST_CGS_NAUTICAL_MILE
+#fractional GSL_CONST_CGSM_NAUTICAL_MILE
+#fractional GSL_CONST_MKS_NAUTICAL_MILE
+#fractional GSL_CONST_MKSA_NAUTICAL_MILE
+#fractional GSL_CONST_CGS_NEWTON
+#fractional GSL_CONST_CGSM_NEWTON
+#fractional GSL_CONST_MKS_NEWTON
+#fractional GSL_CONST_MKSA_NEWTON
+#fractional GSL_CONST_MKS_NUCLEAR_MAGNETON
+#fractional GSL_CONST_MKSA_NUCLEAR_MAGNETON
+#fractional GSL_CONST_CGS_OUNCE_MASS
+#fractional GSL_CONST_CGSM_OUNCE_MASS
+#fractional GSL_CONST_MKS_OUNCE_MASS
+#fractional GSL_CONST_MKSA_OUNCE_MASS
+#fractional GSL_CONST_CGS_PARSEC
+#fractional GSL_CONST_CGSM_PARSEC
+#fractional GSL_CONST_MKS_PARSEC
+#fractional GSL_CONST_MKSA_PARSEC
+#fractional GSL_CONST_NUM_PETA
+#fractional GSL_CONST_CGS_PHOT
+#fractional GSL_CONST_CGSM_PHOT
+#fractional GSL_CONST_MKS_PHOT
+#fractional GSL_CONST_MKSA_PHOT
+#fractional GSL_CONST_NUM_PICO
+#fractional GSL_CONST_CGS_PINT
+#fractional GSL_CONST_CGSM_PINT
+#fractional GSL_CONST_MKS_PINT
+#fractional GSL_CONST_MKSA_PINT
+#fractional GSL_CONST_CGS_PLANCKS_CONSTANT_H
+#fractional GSL_CONST_CGSM_PLANCKS_CONSTANT_H
+#fractional GSL_CONST_MKS_PLANCKS_CONSTANT_H
+#fractional GSL_CONST_MKSA_PLANCKS_CONSTANT_H
+#fractional GSL_CONST_CGS_PLANCKS_CONSTANT_HBAR
+#fractional GSL_CONST_CGSM_PLANCKS_CONSTANT_HBAR
+#fractional GSL_CONST_MKS_PLANCKS_CONSTANT_HBAR
+#fractional GSL_CONST_MKSA_PLANCKS_CONSTANT_HBAR
+#fractional GSL_CONST_CGS_POINT
+#fractional GSL_CONST_CGSM_POINT
+#fractional GSL_CONST_MKS_POINT
+#fractional GSL_CONST_MKSA_POINT
+#fractional GSL_CONST_CGS_POISE
+#fractional GSL_CONST_CGSM_POISE
+#fractional GSL_CONST_MKS_POISE
+#fractional GSL_CONST_MKSA_POISE
+#fractional GSL_CONST_CGS_POUNDAL
+#fractional GSL_CONST_CGSM_POUNDAL
+#fractional GSL_CONST_MKS_POUNDAL
+#fractional GSL_CONST_MKSA_POUNDAL
+#fractional GSL_CONST_CGS_POUND_FORCE
+#fractional GSL_CONST_CGSM_POUND_FORCE
+#fractional GSL_CONST_MKS_POUND_FORCE
+#fractional GSL_CONST_MKSA_POUND_FORCE
+#fractional GSL_CONST_CGS_POUND_MASS
+#fractional GSL_CONST_CGSM_POUND_MASS
+#fractional GSL_CONST_MKS_POUND_MASS
+#fractional GSL_CONST_MKSA_POUND_MASS
+#fractional GSL_CONST_MKS_PROTON_MAGNETIC_MOMENT
+#fractional GSL_CONST_MKSA_PROTON_MAGNETIC_MOMENT
+#fractional GSL_CONST_CGS_PSI
+#fractional GSL_CONST_CGSM_PSI
+#fractional GSL_CONST_MKS_PSI
+#fractional GSL_CONST_MKSA_PSI
+#fractional GSL_CONST_CGS_QUART
+#fractional GSL_CONST_CGSM_QUART
+#fractional GSL_CONST_MKS_QUART
+#fractional GSL_CONST_MKSA_QUART
+#fractional GSL_CONST_CGS_RAD
+#fractional GSL_CONST_CGSM_RAD
+#fractional GSL_CONST_MKS_RAD
+#fractional GSL_CONST_MKSA_RAD
+#fractional GSL_CONST_CGS_ROENTGEN
+#fractional GSL_CONST_CGSM_ROENTGEN
+#fractional GSL_CONST_MKS_ROENTGEN
+#fractional GSL_CONST_MKSA_ROENTGEN
+#fractional GSL_CONST_CGS_RYDBERG
+#fractional GSL_CONST_CGSM_RYDBERG
+#fractional GSL_CONST_MKS_RYDBERG
+#fractional GSL_CONST_MKSA_RYDBERG
+#fractional GSL_CONST_CGS_SOLAR_MASS
+#fractional GSL_CONST_CGSM_SOLAR_MASS
+#fractional GSL_CONST_MKS_SOLAR_MASS
+#fractional GSL_CONST_MKSA_SOLAR_MASS
+#fractional GSL_CONST_CGS_SPEED_OF_LIGHT
+#fractional GSL_CONST_CGSM_SPEED_OF_LIGHT
+#fractional GSL_CONST_MKS_SPEED_OF_LIGHT
+#fractional GSL_CONST_MKSA_SPEED_OF_LIGHT
+#fractional GSL_CONST_CGS_STANDARD_GAS_VOLUME
+#fractional GSL_CONST_CGSM_STANDARD_GAS_VOLUME
+#fractional GSL_CONST_MKS_STANDARD_GAS_VOLUME
+#fractional GSL_CONST_MKSA_STANDARD_GAS_VOLUME
+#fractional GSL_CONST_CGS_STD_ATMOSPHERE
+#fractional GSL_CONST_CGSM_STD_ATMOSPHERE
+#fractional GSL_CONST_MKS_STD_ATMOSPHERE
+#fractional GSL_CONST_MKSA_STD_ATMOSPHERE
+#fractional GSL_CONST_CGS_STEFAN_BOLTZMANN_CONSTANT
+#fractional GSL_CONST_CGSM_STEFAN_BOLTZMANN_CONSTANT
+#fractional GSL_CONST_MKS_STEFAN_BOLTZMANN_CONSTANT
+#fractional GSL_CONST_MKSA_STEFAN_BOLTZMANN_CONSTANT
+#fractional GSL_CONST_CGS_STILB
+#fractional GSL_CONST_CGSM_STILB
+#fractional GSL_CONST_MKS_STILB
+#fractional GSL_CONST_MKSA_STILB
+#fractional GSL_CONST_CGS_STOKES
+#fractional GSL_CONST_CGSM_STOKES
+#fractional GSL_CONST_MKS_STOKES
+#fractional GSL_CONST_MKSA_STOKES
+#fractional GSL_CONST_CGS_TABLESPOON
+#fractional GSL_CONST_CGSM_TABLESPOON
+#fractional GSL_CONST_MKS_TABLESPOON
+#fractional GSL_CONST_MKSA_TABLESPOON
+#fractional GSL_CONST_CGS_TEASPOON
+#fractional GSL_CONST_CGSM_TEASPOON
+#fractional GSL_CONST_MKS_TEASPOON
+#fractional GSL_CONST_MKSA_TEASPOON
+#fractional GSL_CONST_NUM_TERA
+#fractional GSL_CONST_CGS_TEXPOINT
+#fractional GSL_CONST_CGSM_TEXPOINT
+#fractional GSL_CONST_MKS_TEXPOINT
+#fractional GSL_CONST_MKSA_TEXPOINT
+#fractional GSL_CONST_CGS_THERM
+#fractional GSL_CONST_CGSM_THERM
+#fractional GSL_CONST_MKS_THERM
+#fractional GSL_CONST_MKSA_THERM
+#fractional GSL_CONST_CGS_THOMSON_CROSS_SECTION
+#fractional GSL_CONST_CGSM_THOMSON_CROSS_SECTION
+#fractional GSL_CONST_MKS_THOMSON_CROSS_SECTION
+#fractional GSL_CONST_MKSA_THOMSON_CROSS_SECTION
+#fractional GSL_CONST_CGS_TON
+#fractional GSL_CONST_CGSM_TON
+#fractional GSL_CONST_MKS_TON
+#fractional GSL_CONST_MKSA_TON
+#fractional GSL_CONST_CGS_TORR
+#fractional GSL_CONST_CGSM_TORR
+#fractional GSL_CONST_MKS_TORR
+#fractional GSL_CONST_MKSA_TORR
+#fractional GSL_CONST_CGS_TROY_OUNCE
+#fractional GSL_CONST_CGSM_TROY_OUNCE
+#fractional GSL_CONST_MKS_TROY_OUNCE
+#fractional GSL_CONST_MKSA_TROY_OUNCE
+#fractional GSL_CONST_CGS_UK_GALLON
+#fractional GSL_CONST_CGSM_UK_GALLON
+#fractional GSL_CONST_MKS_UK_GALLON
+#fractional GSL_CONST_MKSA_UK_GALLON
+#fractional GSL_CONST_CGS_UK_TON
+#fractional GSL_CONST_CGSM_UK_TON
+#fractional GSL_CONST_MKS_UK_TON
+#fractional GSL_CONST_MKSA_UK_TON
+#fractional GSL_CONST_CGS_UNIFIED_ATOMIC_MASS
+#fractional GSL_CONST_CGSM_UNIFIED_ATOMIC_MASS
+#fractional GSL_CONST_MKS_UNIFIED_ATOMIC_MASS
+#fractional GSL_CONST_MKSA_UNIFIED_ATOMIC_MASS
+#fractional GSL_CONST_CGS_US_GALLON
+#fractional GSL_CONST_CGSM_US_GALLON
+#fractional GSL_CONST_MKS_US_GALLON
+#fractional GSL_CONST_MKSA_US_GALLON
+#fractional GSL_CONST_MKS_VACUUM_PERMEABILITY
+#fractional GSL_CONST_MKSA_VACUUM_PERMEABILITY
+#fractional GSL_CONST_MKS_VACUUM_PERMITTIVITY
+#fractional GSL_CONST_MKSA_VACUUM_PERMITTIVITY
+#fractional GSL_CONST_CGS_WEEK
+#fractional GSL_CONST_CGSM_WEEK
+#fractional GSL_CONST_MKS_WEEK
+#fractional GSL_CONST_MKSA_WEEK
+#fractional GSL_CONST_CGS_YARD
+#fractional GSL_CONST_CGSM_YARD
+#fractional GSL_CONST_MKS_YARD
+#fractional GSL_CONST_MKSA_YARD
+#fractional GSL_CONST_NUM_YOCTO
+#fractional GSL_CONST_NUM_YOTTA
+#fractional GSL_CONST_NUM_ZEPTO
+#fractional GSL_CONST_NUM_ZETTA
+
diff --git a/src/Bindings/Gsl/Polynomials.hsc b/src/Bindings/Gsl/Polynomials.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/Polynomials.hsc
@@ -0,0 +1,27 @@
+#include <bindings.dsl.h>
+#include <gsl/gsl_poly.h>
+
+-- | <http://www.gnu.org/software/gsl/manual/html_node/Polynomials.html>
+
+module Bindings.Gsl.Polynomials where
+#strict_import
+import Bindings.Gsl.ComplexNumbers
+
+#ccall gsl_poly_eval , Ptr CDouble -> CInt -> CInt -> CDouble -> IO CDouble
+-- ccall gsl_poly_complex_eval , Ptr CDouble -> CInt -> CInt -> <gsl_complex> -> IO <gsl_complex>
+-- ccall gsl_complex_poly_complex_eval , Ptr <gsl_complex> -> CInt -> CInt -> <gsl_complex> -> IO <gsl_complex>
+#ccall gsl_poly_dd_taylor , Ptr CDouble -> CDouble -> Ptr CDouble -> Ptr CDouble -> CSize -> Ptr CDouble -> IO CInt
+#ccall gsl_poly_solve_quadratic , CDouble -> CDouble -> CDouble -> Ptr CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_poly_complex_solve_quadratic , CDouble -> CDouble -> CDouble -> Ptr <gsl_complex> -> Ptr <gsl_complex> -> IO CInt
+#ccall gsl_poly_solve_cubic , CDouble -> CDouble -> CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_poly_complex_solve_cubic , CDouble -> CDouble -> CDouble -> Ptr <gsl_complex> -> Ptr <gsl_complex> -> Ptr <gsl_complex> -> IO CInt
+
+#starttype gsl_poly_complex_workspace
+#field nc , CSize
+#field matrix , Ptr CDouble
+#stoptype
+
+#ccall gsl_poly_complex_workspace_alloc , CSize -> IO (Ptr <gsl_poly_complex_workspace>)
+#ccall gsl_poly_complex_workspace_free , Ptr <gsl_poly_complex_workspace> -> IO ()
+#ccall gsl_poly_complex_solve , Ptr CDouble -> CSize -> Ptr <gsl_poly_complex_workspace> -> <gsl_complex_packed_ptr> -> IO CInt
+
diff --git a/src/Bindings/Gsl/QuasiRandomSequences.hsc b/src/Bindings/Gsl/QuasiRandomSequences.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/QuasiRandomSequences.hsc
@@ -0,0 +1,38 @@
+#include <bindings.dsl.h>
+#include <gsl/gsl_qrng.h>
+
+-- | <http://www.gnu.org/software/gsl/manual/html_node/Quasi_002dRandom-Sequences.html>
+
+module Bindings.Gsl.QuasiRandomSequences where
+#strict_import
+
+#starttype gsl_qrng_type
+#field name , CString
+#field max_dimension , CUInt
+#field state_size , FunPtr (CUInt -> IO  CSize)
+#field init_state , FunPtr (Ptr () -> CUInt -> IO  CInt)
+#field get , FunPtr (Ptr () -> CUInt -> Ptr CDouble -> IO  CInt)
+#stoptype
+
+#starttype gsl_qrng
+#field type , Ptr <gsl_qrng_type>
+#field dimension , CUInt
+#field state_size , CSize
+#field state , Ptr ()
+#stoptype
+
+#globalvar gsl_qrng_niederreiter_2 , Ptr gsl_qrng_type
+#globalvar gsl_qrng_sobol , Ptr gsl_qrng_type
+#globalvar gsl_qrng_halton , Ptr gsl_qrng_type
+#globalvar gsl_qrng_reversehalton , Ptr gsl_qrng_type
+
+#ccall gsl_qrng_alloc , Ptr <gsl_qrng_type> -> CUInt -> IO (Ptr <gsl_qrng>)
+#ccall gsl_qrng_memcpy , Ptr <gsl_qrng> -> Ptr <gsl_qrng> -> IO CInt
+#ccall gsl_qrng_clone , Ptr <gsl_qrng> -> IO (Ptr <gsl_qrng>)
+#ccall gsl_qrng_free , Ptr <gsl_qrng> -> IO ()
+#ccall gsl_qrng_init , Ptr <gsl_qrng> -> IO ()
+#ccall gsl_qrng_name , Ptr <gsl_qrng> -> IO CString 
+#ccall gsl_qrng_size , Ptr <gsl_qrng> -> IO CSize
+#ccall gsl_qrng_state , Ptr <gsl_qrng> -> IO (Ptr ())
+#ccall gsl_qrng_get , Ptr <gsl_qrng> -> Ptr CDouble -> IO CInt
+
diff --git a/src/Bindings/Gsl/RandomNumberDistributions.hsc b/src/Bindings/Gsl/RandomNumberDistributions.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/RandomNumberDistributions.hsc
@@ -0,0 +1,199 @@
+#include <bindings.dsl.h>
+#include <gsl/gsl_randist.h>
+#include <gsl/gsl_cdf.h>
+
+-- | <http://www.gnu.org/software/gsl/manual/html_node/Random-Number-Distributions.html>
+
+module Bindings.Gsl.RandomNumberDistributions where
+#strict_import
+import Bindings.Gsl.RandomNumberGeneration
+
+#ccall gsl_ran_bernoulli , Ptr <gsl_rng> -> CDouble -> IO CUInt
+#ccall gsl_ran_bernoulli_pdf , CUInt -> CDouble -> IO CDouble
+#ccall gsl_ran_beta , Ptr <gsl_rng> -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_ran_beta_pdf , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_ran_binomial , Ptr <gsl_rng> -> CDouble -> CUInt -> IO CUInt
+#ccall gsl_ran_binomial_knuth , Ptr <gsl_rng> -> CDouble -> CUInt -> IO CUInt
+#ccall gsl_ran_binomial_tpe , Ptr <gsl_rng> -> CDouble -> CUInt -> IO CUInt
+#ccall gsl_ran_binomial_pdf , CUInt -> CDouble -> CUInt -> IO CDouble
+#ccall gsl_ran_exponential , Ptr <gsl_rng> -> CDouble -> IO CDouble
+#ccall gsl_ran_exponential_pdf , CDouble -> CDouble -> IO CDouble
+#ccall gsl_ran_exppow , Ptr <gsl_rng> -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_ran_exppow_pdf , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_ran_cauchy , Ptr <gsl_rng> -> CDouble -> IO CDouble
+#ccall gsl_ran_cauchy_pdf , CDouble -> CDouble -> IO CDouble
+#ccall gsl_ran_chisq , Ptr <gsl_rng> -> CDouble -> IO CDouble
+#ccall gsl_ran_chisq_pdf , CDouble -> CDouble -> IO CDouble
+#ccall gsl_ran_dirichlet , Ptr <gsl_rng> -> CSize -> Ptr CDouble -> Ptr CDouble -> IO ()
+#ccall gsl_ran_dirichlet_pdf , CSize -> Ptr CDouble -> Ptr CDouble -> IO CDouble
+#ccall gsl_ran_dirichlet_lnpdf , CSize -> Ptr CDouble -> Ptr CDouble -> IO CDouble
+#ccall gsl_ran_erlang , Ptr <gsl_rng> -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_ran_erlang_pdf , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_ran_fdist , Ptr <gsl_rng> -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_ran_fdist_pdf , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_ran_flat , Ptr <gsl_rng> -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_ran_flat_pdf , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_ran_gamma , Ptr <gsl_rng> -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_ran_gamma_int , Ptr <gsl_rng> -> CUInt -> IO CDouble
+#ccall gsl_ran_gamma_pdf , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_ran_gamma_mt , Ptr <gsl_rng> -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_ran_gamma_knuth , Ptr <gsl_rng> -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_ran_gaussian , Ptr <gsl_rng> -> CDouble -> IO CDouble
+#ccall gsl_ran_gaussian_ratio_method , Ptr <gsl_rng> -> CDouble -> IO CDouble
+#ccall gsl_ran_gaussian_ziggurat , Ptr <gsl_rng> -> CDouble -> IO CDouble
+#ccall gsl_ran_gaussian_pdf , CDouble -> CDouble -> IO CDouble
+#ccall gsl_ran_ugaussian , Ptr <gsl_rng> -> IO CDouble
+#ccall gsl_ran_ugaussian_ratio_method , Ptr <gsl_rng> -> IO CDouble
+#ccall gsl_ran_ugaussian_pdf , CDouble -> IO CDouble
+#ccall gsl_ran_gaussian_tail , Ptr <gsl_rng> -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_ran_gaussian_tail_pdf , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_ran_ugaussian_tail , Ptr <gsl_rng> -> CDouble -> IO CDouble
+#ccall gsl_ran_ugaussian_tail_pdf , CDouble -> CDouble -> IO CDouble
+#ccall gsl_ran_bivariate_gaussian , Ptr <gsl_rng> -> CDouble -> CDouble -> CDouble -> Ptr CDouble -> Ptr CDouble -> IO ()
+#ccall gsl_ran_bivariate_gaussian_pdf , CDouble -> CDouble -> CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_ran_landau , Ptr <gsl_rng> -> IO CDouble
+#ccall gsl_ran_landau_pdf , CDouble -> IO CDouble
+#ccall gsl_ran_geometric , Ptr <gsl_rng> -> CDouble -> IO CUInt
+#ccall gsl_ran_geometric_pdf , CUInt -> CDouble -> IO CDouble
+#ccall gsl_ran_hypergeometric , Ptr <gsl_rng> -> CUInt -> CUInt -> CUInt -> IO CUInt
+#ccall gsl_ran_hypergeometric_pdf , CUInt -> CUInt -> CUInt -> CUInt -> IO CDouble
+#ccall gsl_ran_gumbel1 , Ptr <gsl_rng> -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_ran_gumbel1_pdf , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_ran_gumbel2 , Ptr <gsl_rng> -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_ran_gumbel2_pdf , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_ran_logistic , Ptr <gsl_rng> -> CDouble -> IO CDouble
+#ccall gsl_ran_logistic_pdf , CDouble -> CDouble -> IO CDouble
+#ccall gsl_ran_lognormal , Ptr <gsl_rng> -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_ran_lognormal_pdf , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_ran_logarithmic , Ptr <gsl_rng> -> CDouble -> IO CUInt
+#ccall gsl_ran_logarithmic_pdf , CUInt -> CDouble -> IO CDouble
+#ccall gsl_ran_multinomial , Ptr <gsl_rng> -> CSize -> CUInt -> Ptr CDouble -> Ptr CUInt  -> IO ()
+#ccall gsl_ran_multinomial_pdf , CSize -> Ptr CDouble -> Ptr CUInt  -> IO CDouble
+#ccall gsl_ran_multinomial_lnpdf , CSize -> Ptr CDouble -> Ptr CUInt  -> IO CDouble
+#ccall gsl_ran_negative_binomial , Ptr <gsl_rng> -> CDouble -> CDouble -> IO CUInt
+#ccall gsl_ran_negative_binomial_pdf , CUInt -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_ran_pascal , Ptr <gsl_rng> -> CDouble -> CUInt -> IO CUInt
+#ccall gsl_ran_pascal_pdf , CUInt -> CDouble -> CUInt -> IO CDouble
+#ccall gsl_ran_pareto , Ptr <gsl_rng> -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_ran_pareto_pdf , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_ran_poisson , Ptr <gsl_rng> -> CDouble -> IO CUInt
+#ccall gsl_ran_poisson_array , Ptr <gsl_rng> -> CSize -> Ptr CUInt -> CDouble -> IO ()
+#ccall gsl_ran_poisson_pdf , CUInt -> CDouble -> IO CDouble
+#ccall gsl_ran_rayleigh , Ptr <gsl_rng> -> CDouble -> IO CDouble
+#ccall gsl_ran_rayleigh_pdf , CDouble -> CDouble -> IO CDouble
+#ccall gsl_ran_rayleigh_tail , Ptr <gsl_rng> -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_ran_rayleigh_tail_pdf , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_ran_tdist , Ptr <gsl_rng> -> CDouble -> IO CDouble
+#ccall gsl_ran_tdist_pdf , CDouble -> CDouble -> IO CDouble
+#ccall gsl_ran_laplace , Ptr <gsl_rng> -> CDouble -> IO CDouble
+#ccall gsl_ran_laplace_pdf , CDouble -> CDouble -> IO CDouble
+#ccall gsl_ran_levy , Ptr <gsl_rng> -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_ran_levy_skew , Ptr <gsl_rng> -> CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_ran_weibull , Ptr <gsl_rng> -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_ran_weibull_pdf , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_ran_dir_2d , Ptr <gsl_rng> -> Ptr CDouble -> Ptr CDouble -> IO ()
+#ccall gsl_ran_dir_2d_trig_method , Ptr <gsl_rng> -> Ptr CDouble -> Ptr CDouble -> IO ()
+#ccall gsl_ran_dir_3d , Ptr <gsl_rng> -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> IO ()
+#ccall gsl_ran_dir_nd , Ptr <gsl_rng> -> CSize -> Ptr CDouble -> IO ()
+#ccall gsl_ran_shuffle , Ptr <gsl_rng> -> Ptr () -> CSize -> CSize -> IO ()
+#ccall gsl_ran_choose , Ptr <gsl_rng> -> Ptr () -> CSize -> Ptr () -> CSize -> CSize -> IO CInt
+#ccall gsl_ran_sample , Ptr <gsl_rng> -> Ptr () -> CSize -> Ptr () -> CSize -> CSize -> IO ()
+
+#starttype gsl_ran_discrete_t
+#field K , CSize
+#field A , Ptr CSize
+#field F , Ptr CDouble
+#stoptype
+
+#ccall gsl_ran_discrete_preproc , CSize -> Ptr CDouble -> IO (Ptr <gsl_ran_discrete_t>)
+#ccall gsl_ran_discrete_free , Ptr <gsl_ran_discrete_t> -> IO ()
+#ccall gsl_ran_discrete , Ptr <gsl_rng> -> Ptr <gsl_ran_discrete_t> -> IO CSize
+#ccall gsl_ran_discrete_pdf , CSize -> Ptr <gsl_ran_discrete_t> -> IO CDouble
+
+#ccall gsl_cdf_ugaussian_P , CDouble -> IO CDouble
+#ccall gsl_cdf_ugaussian_Q , CDouble -> IO CDouble
+#ccall gsl_cdf_ugaussian_Pinv , CDouble -> IO CDouble
+#ccall gsl_cdf_ugaussian_Qinv , CDouble -> IO CDouble
+#ccall gsl_cdf_gaussian_P , CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_gaussian_Q , CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_gaussian_Pinv , CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_gaussian_Qinv , CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_gamma_P , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_gamma_Q , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_gamma_Pinv , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_gamma_Qinv , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_cauchy_P , CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_cauchy_Q , CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_cauchy_Pinv , CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_cauchy_Qinv , CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_laplace_P , CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_laplace_Q , CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_laplace_Pinv , CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_laplace_Qinv , CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_rayleigh_P , CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_rayleigh_Q , CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_rayleigh_Pinv , CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_rayleigh_Qinv , CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_chisq_P , CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_chisq_Q , CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_chisq_Pinv , CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_chisq_Qinv , CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_exponential_P , CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_exponential_Q , CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_exponential_Pinv , CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_exponential_Qinv , CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_exppow_P , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_exppow_Q , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_tdist_P , CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_tdist_Q , CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_tdist_Pinv , CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_tdist_Qinv , CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_fdist_P , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_fdist_Q , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_fdist_Pinv , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_fdist_Qinv , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_beta_P , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_beta_Q , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_beta_Pinv , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_beta_Qinv , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_flat_P , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_flat_Q , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_flat_Pinv , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_flat_Qinv , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_lognormal_P , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_lognormal_Q , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_lognormal_Pinv , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_lognormal_Qinv , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_gumbel1_P , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_gumbel1_Q , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_gumbel1_Pinv , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_gumbel1_Qinv , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_gumbel2_P , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_gumbel2_Q , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_gumbel2_Pinv , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_gumbel2_Qinv , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_weibull_P , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_weibull_Q , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_weibull_Pinv , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_weibull_Qinv , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_pareto_P , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_pareto_Q , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_pareto_Pinv , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_pareto_Qinv , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_logistic_P , CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_logistic_Q , CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_logistic_Pinv , CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_logistic_Qinv , CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_binomial_P , CUInt -> CDouble -> CUInt -> IO CDouble
+#ccall gsl_cdf_binomial_Q , CUInt -> CDouble -> CUInt -> IO CDouble
+#ccall gsl_cdf_poisson_P , CUInt -> CDouble -> IO CDouble
+#ccall gsl_cdf_poisson_Q , CUInt -> CDouble -> IO CDouble
+#ccall gsl_cdf_geometric_P , CUInt -> CDouble -> IO CDouble
+#ccall gsl_cdf_geometric_Q , CUInt -> CDouble -> IO CDouble
+#ccall gsl_cdf_negative_binomial_P , CUInt -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_negative_binomial_Q , CUInt -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_cdf_pascal_P , CUInt -> CDouble -> CUInt -> IO CDouble
+#ccall gsl_cdf_pascal_Q , CUInt -> CDouble -> CUInt -> IO CDouble
+#ccall gsl_cdf_hypergeometric_P , CUInt -> CUInt -> CUInt -> CUInt -> IO CDouble
+#ccall gsl_cdf_hypergeometric_Q , CUInt -> CUInt -> CUInt -> CUInt -> IO CDouble
+
diff --git a/src/Bindings/Gsl/RandomNumberGeneration.hsc b/src/Bindings/Gsl/RandomNumberGeneration.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/RandomNumberGeneration.hsc
@@ -0,0 +1,110 @@
+#include <bindings.dsl.h>
+#include <gsl/gsl_rng.h>
+
+-- | <http://www.gnu.org/software/gsl/manual/html_node/Random-Number-Generation.html>
+
+module Bindings.Gsl.RandomNumberGeneration where
+#strict_import
+
+#starttype gsl_rng_type
+#field name , CString
+#field max , CULong
+#field min , CULong
+#field size , CSize
+#field set , FunPtr (Ptr () -> CULong -> IO ())
+#field get , FunPtr (Ptr () -> IO  CULong)
+#field get_double , FunPtr (Ptr () -> IO  CDouble)
+#stoptype
+
+#starttype gsl_rng
+#field type , Ptr <gsl_rng_type>
+#field state , Ptr ()
+#stoptype
+
+#globalvar gsl_rng_borosh13 , Ptr gsl_rng_type
+#globalvar gsl_rng_coveyou , Ptr gsl_rng_type
+#globalvar gsl_rng_cmrg , Ptr gsl_rng_type
+#globalvar gsl_rng_fishman18 , Ptr gsl_rng_type
+#globalvar gsl_rng_fishman20 , Ptr gsl_rng_type
+#globalvar gsl_rng_fishman2x , Ptr gsl_rng_type
+#globalvar gsl_rng_gfsr4 , Ptr gsl_rng_type
+#globalvar gsl_rng_knuthran , Ptr gsl_rng_type
+#globalvar gsl_rng_knuthran2 , Ptr gsl_rng_type
+#globalvar gsl_rng_knuthran2002 , Ptr gsl_rng_type
+#globalvar gsl_rng_lecuyer21 , Ptr gsl_rng_type
+#globalvar gsl_rng_minstd , Ptr gsl_rng_type
+#globalvar gsl_rng_mrg , Ptr gsl_rng_type
+#globalvar gsl_rng_mt19937 , Ptr gsl_rng_type
+#globalvar gsl_rng_mt19937_1999 , Ptr gsl_rng_type
+#globalvar gsl_rng_mt19937_1998 , Ptr gsl_rng_type
+#globalvar gsl_rng_r250 , Ptr gsl_rng_type
+#globalvar gsl_rng_ran0 , Ptr gsl_rng_type
+#globalvar gsl_rng_ran1 , Ptr gsl_rng_type
+#globalvar gsl_rng_ran2 , Ptr gsl_rng_type
+#globalvar gsl_rng_ran3 , Ptr gsl_rng_type
+#globalvar gsl_rng_rand , Ptr gsl_rng_type
+#globalvar gsl_rng_rand48 , Ptr gsl_rng_type
+#globalvar gsl_rng_random128_bsd , Ptr gsl_rng_type
+#globalvar gsl_rng_random128_glibc2 , Ptr gsl_rng_type
+#globalvar gsl_rng_random128_libc5 , Ptr gsl_rng_type
+#globalvar gsl_rng_random256_bsd , Ptr gsl_rng_type
+#globalvar gsl_rng_random256_glibc2 , Ptr gsl_rng_type
+#globalvar gsl_rng_random256_libc5 , Ptr gsl_rng_type
+#globalvar gsl_rng_random32_bsd , Ptr gsl_rng_type
+#globalvar gsl_rng_random32_glibc2 , Ptr gsl_rng_type
+#globalvar gsl_rng_random32_libc5 , Ptr gsl_rng_type
+#globalvar gsl_rng_random64_bsd , Ptr gsl_rng_type
+#globalvar gsl_rng_random64_glibc2 , Ptr gsl_rng_type
+#globalvar gsl_rng_random64_libc5 , Ptr gsl_rng_type
+#globalvar gsl_rng_random8_bsd , Ptr gsl_rng_type
+#globalvar gsl_rng_random8_glibc2 , Ptr gsl_rng_type
+#globalvar gsl_rng_random8_libc5 , Ptr gsl_rng_type
+#globalvar gsl_rng_random_bsd , Ptr gsl_rng_type
+#globalvar gsl_rng_random_glibc2 , Ptr gsl_rng_type
+#globalvar gsl_rng_random_libc5 , Ptr gsl_rng_type
+#globalvar gsl_rng_randu , Ptr gsl_rng_type
+#globalvar gsl_rng_ranf , Ptr gsl_rng_type
+#globalvar gsl_rng_ranlux , Ptr gsl_rng_type
+#globalvar gsl_rng_ranlux389 , Ptr gsl_rng_type
+#globalvar gsl_rng_ranlxd1 , Ptr gsl_rng_type
+#globalvar gsl_rng_ranlxd2 , Ptr gsl_rng_type
+#globalvar gsl_rng_ranlxs0 , Ptr gsl_rng_type
+#globalvar gsl_rng_ranlxs1 , Ptr gsl_rng_type
+#globalvar gsl_rng_ranlxs2 , Ptr gsl_rng_type
+#globalvar gsl_rng_ranmar , Ptr gsl_rng_type
+#globalvar gsl_rng_slatec , Ptr gsl_rng_type
+#globalvar gsl_rng_taus , Ptr gsl_rng_type
+#globalvar gsl_rng_taus2 , Ptr gsl_rng_type
+#globalvar gsl_rng_taus113 , Ptr gsl_rng_type
+#globalvar gsl_rng_transputer , Ptr gsl_rng_type
+#globalvar gsl_rng_tt800 , Ptr gsl_rng_type
+#globalvar gsl_rng_uni , Ptr gsl_rng_type
+#globalvar gsl_rng_uni32 , Ptr gsl_rng_type
+#globalvar gsl_rng_vax , Ptr gsl_rng_type
+#globalvar gsl_rng_waterman14 , Ptr gsl_rng_type
+#globalvar gsl_rng_zuf , Ptr gsl_rng_type
+
+#ccall gsl_rng_types_setup , IO (Ptr (Ptr <gsl_rng_type>))
+
+#globalvar gsl_rng_default , Ptr gsl_rng_type
+#globalvar gsl_rng_default_seed , CULong
+
+#ccall gsl_rng_alloc , Ptr <gsl_rng_type> -> IO (Ptr <gsl_rng>)
+#ccall gsl_rng_memcpy , Ptr <gsl_rng> -> Ptr <gsl_rng> -> IO CInt
+#ccall gsl_rng_clone , Ptr <gsl_rng> -> IO (Ptr <gsl_rng>)
+#ccall gsl_rng_free , Ptr <gsl_rng> -> IO ()
+#ccall gsl_rng_set , Ptr <gsl_rng> -> CULong -> IO ()
+#ccall gsl_rng_max , Ptr <gsl_rng> -> IO CULong
+#ccall gsl_rng_min , Ptr <gsl_rng> -> IO CULong
+#ccall gsl_rng_name , Ptr <gsl_rng> -> IO CString
+#ccall gsl_rng_fread , Ptr CFile -> Ptr <gsl_rng> -> IO CInt
+#ccall gsl_rng_fwrite , Ptr CFile -> Ptr <gsl_rng> -> IO CInt
+#ccall gsl_rng_size , Ptr <gsl_rng> -> IO CSize
+#ccall gsl_rng_state , Ptr <gsl_rng> -> IO (Ptr ())
+#ccall gsl_rng_print_state , Ptr <gsl_rng> -> IO ()
+#ccall gsl_rng_env_setup , IO (Ptr <gsl_rng_type>)
+#ccall gsl_rng_get , Ptr <gsl_rng> -> IO CULong
+#ccall gsl_rng_uniform , Ptr <gsl_rng> -> IO CDouble
+#ccall gsl_rng_uniform_pos , Ptr <gsl_rng> -> IO CDouble
+#ccall gsl_rng_uniform_int , Ptr <gsl_rng> -> CULong -> IO CULong
+
diff --git a/src/Bindings/Gsl/SeriesAcceleration.hsc b/src/Bindings/Gsl/SeriesAcceleration.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/SeriesAcceleration.hsc
@@ -0,0 +1,41 @@
+#include <bindings.dsl.h>
+#include <gsl/gsl_sum.h>
+
+-- | <http://www.gnu.org/software/gsl/manual/html_node/Series-Acceleration.html>
+
+module Bindings.Gsl.SeriesAcceleration where
+#strict_import
+
+#starttype gsl_sum_levin_u_workspace
+#field size , CSize
+#field i , CSize
+#field terms_used , CSize
+#field sum_plain , CDouble
+#field q_num , Ptr CDouble
+#field q_den , Ptr CDouble
+#field dq_num , Ptr CDouble
+#field dq_den , Ptr CDouble
+#field dsum , Ptr CDouble
+#stoptype
+
+#ccall gsl_sum_levin_u_alloc , CSize -> IO (Ptr <gsl_sum_levin_u_workspace>)
+#ccall gsl_sum_levin_u_free , Ptr <gsl_sum_levin_u_workspace> -> IO ()
+#ccall gsl_sum_levin_u_accel , Ptr CDouble -> CSize -> Ptr <gsl_sum_levin_u_workspace> -> Ptr CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_sum_levin_u_minmax , Ptr CDouble -> CSize -> CSize -> CSize -> Ptr <gsl_sum_levin_u_workspace> -> Ptr CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_sum_levin_u_step , CDouble -> CSize -> CSize -> Ptr <gsl_sum_levin_u_workspace> -> Ptr CDouble -> IO CInt
+
+#starttype gsl_sum_levin_utrunc_workspace
+#field size , CSize
+#field i , CSize
+#field terms_used , CSize
+#field sum_plain , CDouble
+#field q_num , Ptr CDouble
+#field q_den , Ptr CDouble
+#field dsum , Ptr CDouble
+#stoptype
+
+#ccall gsl_sum_levin_utrunc_alloc , CSize -> IO (Ptr <gsl_sum_levin_utrunc_workspace>)
+#ccall gsl_sum_levin_utrunc_free , Ptr <gsl_sum_levin_utrunc_workspace> -> IO ()
+#ccall gsl_sum_levin_utrunc_accel , Ptr CDouble -> CSize -> Ptr <gsl_sum_levin_utrunc_workspace> -> Ptr CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_sum_levin_utrunc_minmax , Ptr CDouble -> CSize -> CSize -> CSize -> Ptr <gsl_sum_levin_utrunc_workspace> -> Ptr CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_sum_levin_utrunc_step , CDouble -> CSize -> Ptr <gsl_sum_levin_utrunc_workspace> -> Ptr CDouble -> IO CInt
diff --git a/src/Bindings/Gsl/SimulatedAnnealing.hsc b/src/Bindings/Gsl/SimulatedAnnealing.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/SimulatedAnnealing.hsc
@@ -0,0 +1,31 @@
+#include <bindings.dsl.h>
+#include <gsl/gsl_siman.h>
+
+-- | <http://www.gnu.org/software/gsl/manual/html_node/Simulated-Annealing.html>
+
+module Bindings.Gsl.SimulatedAnnealing where
+#strict_import
+import Bindings.Gsl.RandomNumberGeneration
+
+#callback_t gsl_siman_Efunc_t , Ptr () -> IO CDouble
+#callback_t gsl_siman_step_t , Ptr <gsl_rng> -> Ptr () -> CDouble -> IO ()
+#callback_t gsl_siman_metric_t , Ptr () -> Ptr () -> IO CDouble
+
+#callback_t gsl_siman_print_t , FunPtr (Ptr () -> IO ())
+#callback_t gsl_siman_copy_t , FunPtr (Ptr () -> Ptr () -> IO ())
+#callback_t gsl_siman_copy_construct_t , FunPtr (Ptr () -> IO (Ptr ()))
+#callback_t gsl_siman_destroy_t , FunPtr (Ptr () -> IO ())
+
+#starttype gsl_siman_params_t
+#field n_tries , CInt
+#field iters_fixed_T , CInt
+#field step_size , CDouble
+#field k , CDouble
+#field t_initial , CDouble
+#field mu_t , CDouble
+#field t_min , CDouble
+#stoptype
+
+-- ccall gsl_siman_solve , Ptr <gsl_rng> -> Ptr () -> <gsl_siman_Efunc_t> -> <gsl_siman_step_t> -> <gsl_siman_metric_t> -> <gsl_siman_print_t> -> <gsl_siman_copy_t> -> <gsl_siman_copy_construct_t> -> <gsl_siman_destroy_t> -> CSize -> <gsl_siman_params_t> -> IO ()
+-- ccall gsl_siman_solve_many , Ptr <gsl_rng> -> Ptr () -> <gsl_siman_Efunc_t> -> <gsl_siman_step_t> -> <gsl_siman_metric_t> -> <gsl_siman_print_t> -> CSize -> <gsl_siman_params_t> -> IO ()
+
diff --git a/src/Bindings/Gsl/Sorting.hsc b/src/Bindings/Gsl/Sorting.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/Sorting.hsc
@@ -0,0 +1,148 @@
+#include <bindings.dsl.h>
+#include <gsl/gsl_heapsort.h>
+
+-- | <http://www.gnu.org/software/gsl/manual/html_node/Sorting.html>
+
+module Bindings.Gsl.Sorting where
+#strict_import
+import Bindings.Gsl.VectorsAndMatrices.DataTypes
+import Bindings.Gsl.Permutations
+
+#callback_t gsl_comparison_fn_t , FunPtr ( Ptr () -> Ptr () -> IO CInt)
+
+#ccall gsl_heapsort , Ptr () -> CSize -> CSize -> <gsl_comparison_fn_t> -> IO ()
+#ccall gsl_heapsort_index , Ptr CSize -> Ptr () -> CSize -> CSize -> <gsl_comparison_fn_t> -> IO CInt
+
+#ccall gsl_sort_char , CString -> CSize -> CSize -> IO ()
+#ccall gsl_sort_char_index , Ptr CSize -> CString -> CSize -> CSize -> IO ()
+#ccall gsl_sort_char_smallest , CString -> CSize -> CString -> CSize -> CSize -> IO CInt
+#ccall gsl_sort_char_smallest_index , Ptr CSize -> CSize -> CString -> CSize -> CSize -> IO CInt
+#ccall gsl_sort_char_largest , CString -> CSize -> CString -> CSize -> CSize -> IO CInt
+#ccall gsl_sort_char_largest_index , Ptr CSize -> CSize -> CString -> CSize -> CSize -> IO CInt
+#ccall gsl_sort , Ptr CDouble -> CSize -> CSize -> IO ()
+#ccall gsl_sort_index , Ptr CSize -> Ptr CDouble -> CSize -> CSize -> IO ()
+#ccall gsl_sort_smallest , Ptr CDouble -> CSize -> Ptr CDouble -> CSize -> CSize -> IO CInt
+#ccall gsl_sort_smallest_index , Ptr CSize -> CSize -> Ptr CDouble -> CSize -> CSize -> IO CInt
+#ccall gsl_sort_largest , Ptr CDouble -> CSize -> Ptr CDouble -> CSize -> CSize -> IO CInt
+#ccall gsl_sort_largest_index , Ptr CSize -> CSize -> Ptr CDouble -> CSize -> CSize -> IO CInt
+#ccall gsl_sort_float , Ptr CFloat -> CSize -> CSize -> IO ()
+#ccall gsl_sort_float_index , Ptr CSize -> Ptr CFloat -> CSize -> CSize -> IO ()
+#ccall gsl_sort_float_smallest , Ptr CFloat -> CSize -> Ptr CFloat -> CSize -> CSize -> IO CInt
+#ccall gsl_sort_float_smallest_index , Ptr CSize -> CSize -> Ptr CFloat -> CSize -> CSize -> IO CInt
+#ccall gsl_sort_float_largest , Ptr CFloat -> CSize -> Ptr CFloat -> CSize -> CSize -> IO CInt
+#ccall gsl_sort_float_largest_index , Ptr CSize -> CSize -> Ptr CFloat -> CSize -> CSize -> IO CInt
+#ccall gsl_sort_int , Ptr CInt -> CSize -> CSize -> IO ()
+#ccall gsl_sort_int_index , Ptr CSize -> Ptr CInt -> CSize -> CSize -> IO ()
+#ccall gsl_sort_int_smallest , Ptr CInt -> CSize -> Ptr CInt -> CSize -> CSize -> IO CInt
+#ccall gsl_sort_int_smallest_index , Ptr CSize -> CSize -> Ptr CInt -> CSize -> CSize -> IO CInt
+#ccall gsl_sort_int_largest , Ptr CInt -> CSize -> Ptr CInt -> CSize -> CSize -> IO CInt
+#ccall gsl_sort_int_largest_index , Ptr CSize -> CSize -> Ptr CInt -> CSize -> CSize -> IO CInt
+-- #ccall gsl_sort_long_double , Ptr CLDouble -> CSize -> CSize -> IO ()
+-- #ccall gsl_sort_long_double_index , Ptr CSize -> Ptr CLDouble -> CSize -> CSize -> IO ()
+-- #ccall gsl_sort_long_double_smallest , Ptr CLDouble -> CSize -> Ptr CLDouble -> CSize -> CSize -> IO CInt
+-- #ccall gsl_sort_long_double_smallest_index , Ptr CSize -> CSize -> Ptr CLDouble -> CSize -> CSize -> IO CInt
+-- #ccall gsl_sort_long_double_largest , Ptr CLDouble -> CSize -> Ptr CLDouble -> CSize -> CSize -> IO CInt
+-- #ccall gsl_sort_long_double_largest_index , Ptr CSize -> CSize -> Ptr CLDouble -> CSize -> CSize -> IO CInt
+#ccall gsl_sort_long , Ptr CLong -> CSize -> CSize -> IO ()
+#ccall gsl_sort_long_index , Ptr CSize -> Ptr CLong -> CSize -> CSize -> IO ()
+#ccall gsl_sort_long_smallest , Ptr CLong -> CSize -> Ptr CLong -> CSize -> CSize -> IO CInt
+#ccall gsl_sort_long_smallest_index , Ptr CSize -> CSize -> Ptr CLong -> CSize -> CSize -> IO CInt
+#ccall gsl_sort_long_largest , Ptr CLong -> CSize -> Ptr CLong -> CSize -> CSize -> IO CInt
+#ccall gsl_sort_long_largest_index , Ptr CSize -> CSize -> Ptr CLong -> CSize -> CSize -> IO CInt
+#ccall gsl_sort_short , Ptr CShort -> CSize -> CSize -> IO ()
+#ccall gsl_sort_short_index , Ptr CSize -> Ptr CShort -> CSize -> CSize -> IO ()
+#ccall gsl_sort_short_smallest , Ptr CShort -> CSize -> Ptr CShort -> CSize -> CSize -> IO CInt
+#ccall gsl_sort_short_smallest_index , Ptr CSize -> CSize -> Ptr CShort -> CSize -> CSize -> IO CInt
+#ccall gsl_sort_short_largest , Ptr CShort -> CSize -> Ptr CShort -> CSize -> CSize -> IO CInt
+#ccall gsl_sort_short_largest_index , Ptr CSize -> CSize -> Ptr CShort -> CSize -> CSize -> IO CInt
+#ccall gsl_sort_uchar , Ptr CUChar -> CSize -> CSize -> IO ()
+#ccall gsl_sort_uchar_index , Ptr CSize -> Ptr CUChar -> CSize -> CSize -> IO ()
+#ccall gsl_sort_uchar_smallest , Ptr CUChar -> CSize -> Ptr CUChar -> CSize -> CSize -> IO CInt
+#ccall gsl_sort_uchar_smallest_index , Ptr CSize -> CSize -> Ptr CUChar -> CSize -> CSize -> IO CInt
+#ccall gsl_sort_uchar_largest , Ptr CUChar -> CSize -> Ptr CUChar -> CSize -> CSize -> IO CInt
+#ccall gsl_sort_uchar_largest_index , Ptr CSize -> CSize -> Ptr CUChar -> CSize -> CSize -> IO CInt
+#ccall gsl_sort_uint , Ptr CUInt -> CSize -> CSize -> IO ()
+#ccall gsl_sort_uint_index , Ptr CSize -> Ptr CUInt -> CSize -> CSize -> IO ()
+#ccall gsl_sort_uint_smallest , Ptr CUInt -> CSize -> Ptr CUInt -> CSize -> CSize -> IO CInt
+#ccall gsl_sort_uint_smallest_index , Ptr CSize -> CSize -> Ptr CUInt -> CSize -> CSize -> IO CInt
+#ccall gsl_sort_uint_largest , Ptr CUInt -> CSize -> Ptr CUInt -> CSize -> CSize -> IO CInt
+#ccall gsl_sort_uint_largest_index , Ptr CSize -> CSize -> Ptr CUInt -> CSize -> CSize -> IO CInt
+#ccall gsl_sort_ulong , Ptr CULong -> CSize -> CSize -> IO ()
+#ccall gsl_sort_ulong_index , Ptr CSize -> Ptr CULong -> CSize -> CSize -> IO ()
+#ccall gsl_sort_ulong_smallest , Ptr CULong -> CSize -> Ptr CULong -> CSize -> CSize -> IO CInt
+#ccall gsl_sort_ulong_smallest_index , Ptr CSize -> CSize -> Ptr CULong -> CSize -> CSize -> IO CInt
+#ccall gsl_sort_ulong_largest , Ptr CULong -> CSize -> Ptr CULong -> CSize -> CSize -> IO CInt
+#ccall gsl_sort_ulong_largest_index , Ptr CSize -> CSize -> Ptr CULong -> CSize -> CSize -> IO CInt
+#ccall gsl_sort_ushort , Ptr CUShort -> CSize -> CSize -> IO ()
+#ccall gsl_sort_ushort_index , Ptr CSize -> Ptr CUShort -> CSize -> CSize -> IO ()
+#ccall gsl_sort_ushort_smallest , Ptr CUShort -> CSize -> Ptr CUShort -> CSize -> CSize -> IO CInt
+#ccall gsl_sort_ushort_smallest_index , Ptr CSize -> CSize -> Ptr CUShort -> CSize -> CSize -> IO CInt
+#ccall gsl_sort_ushort_largest , Ptr CUShort -> CSize -> Ptr CUShort -> CSize -> CSize -> IO CInt
+#ccall gsl_sort_ushort_largest_index , Ptr CSize -> CSize -> Ptr CUShort -> CSize -> CSize -> IO CInt
+#ccall gsl_sort_vector_char , Ptr <gsl_vector_char> -> IO ()
+#ccall gsl_sort_vector_char_index , Ptr <gsl_permutation> -> Ptr <gsl_vector_char> -> IO CInt
+#ccall gsl_sort_vector_char_smallest , CString -> CSize -> Ptr <gsl_vector_char> -> IO CInt
+#ccall gsl_sort_vector_char_largest , CString -> CSize -> Ptr <gsl_vector_char> -> IO CInt
+#ccall gsl_sort_vector_char_smallest_index , Ptr CSize -> CSize -> Ptr <gsl_vector_char> -> IO CInt
+#ccall gsl_sort_vector_char_largest_index , Ptr CSize -> CSize -> Ptr <gsl_vector_char> -> IO CInt
+#ccall gsl_sort_vector , Ptr <gsl_vector> -> IO ()
+#ccall gsl_sort_vector_index , Ptr <gsl_permutation> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_sort_vector_smallest , Ptr CDouble -> CSize -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_sort_vector_largest , Ptr CDouble -> CSize -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_sort_vector_smallest_index , Ptr CSize -> CSize -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_sort_vector_largest_index , Ptr CSize -> CSize -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_sort_vector_float , Ptr <gsl_vector_float> -> IO ()
+#ccall gsl_sort_vector_float_index , Ptr <gsl_permutation> -> Ptr <gsl_vector_float> -> IO CInt
+#ccall gsl_sort_vector_float_smallest , Ptr CFloat -> CSize -> Ptr <gsl_vector_float> -> IO CInt
+#ccall gsl_sort_vector_float_largest , Ptr CFloat -> CSize -> Ptr <gsl_vector_float> -> IO CInt
+#ccall gsl_sort_vector_float_smallest_index , Ptr CSize -> CSize -> Ptr <gsl_vector_float> -> IO CInt
+#ccall gsl_sort_vector_float_largest_index , Ptr CSize -> CSize -> Ptr <gsl_vector_float> -> IO CInt
+#ccall gsl_sort_vector_int , Ptr <gsl_vector_int> -> IO ()
+#ccall gsl_sort_vector_int_index , Ptr <gsl_permutation> -> Ptr <gsl_vector_int> -> IO CInt
+#ccall gsl_sort_vector_int_smallest , Ptr CInt -> CSize -> Ptr <gsl_vector_int> -> IO CInt
+#ccall gsl_sort_vector_int_largest , Ptr CInt -> CSize -> Ptr <gsl_vector_int> -> IO CInt
+#ccall gsl_sort_vector_int_smallest_index , Ptr CSize -> CSize -> Ptr <gsl_vector_int> -> IO CInt
+#ccall gsl_sort_vector_int_largest_index , Ptr CSize -> CSize -> Ptr <gsl_vector_int> -> IO CInt
+-- #ccall gsl_sort_vector_long_double , Ptr <gsl_vector_long_double> -> IO ()
+-- #ccall gsl_sort_vector_long_double_index , Ptr <gsl_permutation> -> Ptr <gsl_vector_long_double> -> IO CInt
+-- #ccall gsl_sort_vector_long_double_smallest , Ptr CLDouble -> CSize -> Ptr <gsl_vector_long_double> -> IO CInt
+-- #ccall gsl_sort_vector_long_double_largest , Ptr CLDouble -> CSize -> Ptr <gsl_vector_long_double> -> IO CInt
+-- #ccall gsl_sort_vector_long_double_smallest_index , Ptr CSize -> CSize -> Ptr <gsl_vector_long_double> -> IO CInt
+-- #ccall gsl_sort_vector_long_double_largest_index , Ptr CSize -> CSize -> Ptr <gsl_vector_long_double> -> IO CInt
+#ccall gsl_sort_vector_long , Ptr <gsl_vector_long> -> IO ()
+#ccall gsl_sort_vector_long_index , Ptr <gsl_permutation> -> Ptr <gsl_vector_long> -> IO CInt
+#ccall gsl_sort_vector_long_smallest , Ptr CLong -> CSize -> Ptr <gsl_vector_long> -> IO CInt
+#ccall gsl_sort_vector_long_largest , Ptr CLong -> CSize -> Ptr <gsl_vector_long> -> IO CInt
+#ccall gsl_sort_vector_long_smallest_index , Ptr CSize -> CSize -> Ptr <gsl_vector_long> -> IO CInt
+#ccall gsl_sort_vector_long_largest_index , Ptr CSize -> CSize -> Ptr <gsl_vector_long> -> IO CInt
+#ccall gsl_sort_vector_short , Ptr <gsl_vector_short> -> IO ()
+#ccall gsl_sort_vector_short_index , Ptr <gsl_permutation> -> Ptr <gsl_vector_short> -> IO CInt
+#ccall gsl_sort_vector_short_smallest , Ptr CShort -> CSize -> Ptr <gsl_vector_short> -> IO CInt
+#ccall gsl_sort_vector_short_largest , Ptr CShort -> CSize -> Ptr <gsl_vector_short> -> IO CInt
+#ccall gsl_sort_vector_short_smallest_index , Ptr CSize -> CSize -> Ptr <gsl_vector_short> -> IO CInt
+#ccall gsl_sort_vector_short_largest_index , Ptr CSize -> CSize -> Ptr <gsl_vector_short> -> IO CInt
+#ccall gsl_sort_vector_uchar , Ptr <gsl_vector_uchar> -> IO ()
+#ccall gsl_sort_vector_uchar_index , Ptr <gsl_permutation> -> Ptr <gsl_vector_uchar> -> IO CInt
+#ccall gsl_sort_vector_uchar_smallest , Ptr CUChar -> CSize -> Ptr <gsl_vector_uchar> -> IO CInt
+#ccall gsl_sort_vector_uchar_largest , Ptr CUChar -> CSize -> Ptr <gsl_vector_uchar> -> IO CInt
+#ccall gsl_sort_vector_uchar_smallest_index , Ptr CSize -> CSize -> Ptr <gsl_vector_uchar> -> IO CInt
+#ccall gsl_sort_vector_uchar_largest_index , Ptr CSize -> CSize -> Ptr <gsl_vector_uchar> -> IO CInt
+#ccall gsl_sort_vector_uint , Ptr <gsl_vector_uint> -> IO ()
+#ccall gsl_sort_vector_uint_index , Ptr <gsl_permutation> -> Ptr <gsl_vector_uint> -> IO CInt
+#ccall gsl_sort_vector_uint_smallest , Ptr CUInt -> CSize -> Ptr <gsl_vector_uint> -> IO CInt
+#ccall gsl_sort_vector_uint_largest , Ptr CUInt -> CSize -> Ptr <gsl_vector_uint> -> IO CInt
+#ccall gsl_sort_vector_uint_smallest_index , Ptr CSize -> CSize -> Ptr <gsl_vector_uint> -> IO CInt
+#ccall gsl_sort_vector_uint_largest_index , Ptr CSize -> CSize -> Ptr <gsl_vector_uint> -> IO CInt
+#ccall gsl_sort_vector_ulong , Ptr <gsl_vector_ulong> -> IO ()
+#ccall gsl_sort_vector_ulong_index , Ptr <gsl_permutation> -> Ptr <gsl_vector_ulong> -> IO CInt
+#ccall gsl_sort_vector_ulong_smallest , Ptr CULong -> CSize -> Ptr <gsl_vector_ulong> -> IO CInt
+#ccall gsl_sort_vector_ulong_largest , Ptr CULong -> CSize -> Ptr <gsl_vector_ulong> -> IO CInt
+#ccall gsl_sort_vector_ulong_smallest_index , Ptr CSize -> CSize -> Ptr <gsl_vector_ulong> -> IO CInt
+#ccall gsl_sort_vector_ulong_largest_index , Ptr CSize -> CSize -> Ptr <gsl_vector_ulong> -> IO CInt
+#ccall gsl_sort_vector_ushort , Ptr <gsl_vector_ushort> -> IO ()
+#ccall gsl_sort_vector_ushort_index , Ptr <gsl_permutation> -> Ptr <gsl_vector_ushort> -> IO CInt
+#ccall gsl_sort_vector_ushort_smallest , Ptr CUShort -> CSize -> Ptr <gsl_vector_ushort> -> IO CInt
+#ccall gsl_sort_vector_ushort_largest , Ptr CUShort -> CSize -> Ptr <gsl_vector_ushort> -> IO CInt
+#ccall gsl_sort_vector_ushort_smallest_index , Ptr CSize -> CSize -> Ptr <gsl_vector_ushort> -> IO CInt
+#ccall gsl_sort_vector_ushort_largest_index , Ptr CSize -> CSize -> Ptr <gsl_vector_ushort> -> IO CInt
+
diff --git a/src/Bindings/Gsl/SpecialFunctions.c b/src/Bindings/Gsl/SpecialFunctions.c
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/SpecialFunctions.c
@@ -0,0 +1,4 @@
+#include <bindings.cmacros.h>
+#include <gsl/gsl_sf.h>
+
+BC_INLINE1(GSL_MODE_PREC,gsl_mode_t,unsigned)
diff --git a/src/Bindings/Gsl/SpecialFunctions.hsc b/src/Bindings/Gsl/SpecialFunctions.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/SpecialFunctions.hsc
@@ -0,0 +1,547 @@
+#include <bindings.dsl.h>
+#include <gsl/gsl_sf.h>
+
+-- | <http://www.gnu.org/software/gsl/manual/html_node/Special-Functions.html>
+
+module Bindings.Gsl.SpecialFunctions where
+#strict_import
+import Bindings.Gsl.Eigensystems
+import Bindings.Gsl.VectorsAndMatrices.DataTypes
+
+#integral_t gsl_mode_t
+
+#fractional GSL_PREC_DOUBLE
+#fractional GSL_PREC_SINGLE
+#fractional GSL_PREC_APPROX
+
+#cinline GSL_MODE_PREC , <gsl_mode_t> -> CUInt
+
+#num GSL_MODE_DEFAULT
+
+#fractional GSL_SF_GAMMA_XMAX
+#num GSL_SF_FACT_NMAX
+#num GSL_SF_DOUBLEFACT_NMAX
+#num GSL_SF_MATHIEU_COEFF
+
+#starttype gsl_sf_mathieu_workspace
+#field size , CSize
+#field even_order , CSize
+#field odd_order , CSize
+#field extra_values , CInt
+#field qa , CDouble
+#field qb , CDouble
+#field aa , Ptr CDouble
+#field bb , Ptr CDouble
+#field dd , Ptr CDouble
+#field ee , Ptr CDouble
+#field tt , Ptr CDouble
+#field e2 , Ptr CDouble
+#field zz , Ptr CDouble
+#field eval , Ptr <gsl_vector>
+#field evec , Ptr <gsl_matrix>
+#field wmat , Ptr <gsl_eigen_symmv_workspace>
+#stoptype
+
+#starttype gsl_sf_result
+#field val , CDouble
+#field err , CDouble
+#stoptype
+
+#starttype gsl_sf_result_e10
+#field val , CDouble
+#field err , CDouble
+#field e10 , CInt
+#stoptype
+
+#ccall gsl_sf_airy_Ai , CDouble -> <gsl_mode_t> -> IO CDouble
+#ccall gsl_sf_airy_Ai_deriv , CDouble -> <gsl_mode_t> -> IO CDouble
+#ccall gsl_sf_airy_Ai_deriv_e , CDouble -> <gsl_mode_t> -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_airy_Ai_deriv_scaled , CDouble -> <gsl_mode_t> -> IO CDouble
+#ccall gsl_sf_airy_Ai_deriv_scaled_e , CDouble -> <gsl_mode_t> -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_airy_Ai_e , CDouble -> <gsl_mode_t> -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_airy_Ai_scaled , CDouble -> <gsl_mode_t> -> IO CDouble
+#ccall gsl_sf_airy_Ai_scaled_e , CDouble -> <gsl_mode_t> -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_airy_Bi , CDouble -> <gsl_mode_t> -> IO CDouble
+#ccall gsl_sf_airy_Bi_deriv , CDouble -> <gsl_mode_t> -> IO CDouble
+#ccall gsl_sf_airy_Bi_deriv_e , CDouble -> <gsl_mode_t> -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_airy_Bi_deriv_scaled , CDouble -> <gsl_mode_t> -> IO CDouble
+#ccall gsl_sf_airy_Bi_deriv_scaled_e , CDouble -> <gsl_mode_t> -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_airy_Bi_e , CDouble -> <gsl_mode_t> -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_airy_Bi_scaled , CDouble -> <gsl_mode_t> -> IO CDouble
+#ccall gsl_sf_airy_Bi_scaled_e , CDouble -> <gsl_mode_t> -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_airy_zero_Ai , CUInt -> IO CDouble
+#ccall gsl_sf_airy_zero_Ai_deriv , CUInt -> IO CDouble
+#ccall gsl_sf_airy_zero_Ai_deriv_e , CUInt -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_airy_zero_Ai_e , CUInt -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_airy_zero_Bi , CUInt -> IO CDouble
+#ccall gsl_sf_airy_zero_Bi_deriv , CUInt -> IO CDouble
+#ccall gsl_sf_airy_zero_Bi_deriv_e , CUInt -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_airy_zero_Bi_e , CUInt -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_angle_restrict_pos , CDouble -> IO CDouble
+#ccall gsl_sf_angle_restrict_pos_e , Ptr CDouble -> IO CInt
+#ccall gsl_sf_angle_restrict_pos_err_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_angle_restrict_symm , CDouble -> IO CDouble
+#ccall gsl_sf_angle_restrict_symm_e , Ptr CDouble -> IO CInt
+#ccall gsl_sf_angle_restrict_symm_err_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_atanint , CDouble -> IO CDouble
+#ccall gsl_sf_atanint_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_bessel_I0 , CDouble -> IO CDouble
+#ccall gsl_sf_bessel_I0_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_bessel_i0_scaled , CDouble -> IO CDouble
+#ccall gsl_sf_bessel_I0_scaled , CDouble -> IO CDouble
+#ccall gsl_sf_bessel_i0_scaled_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_bessel_I0_scaled_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_bessel_I1 , CDouble -> IO CDouble
+#ccall gsl_sf_bessel_I1_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_bessel_i1_scaled , CDouble -> IO CDouble
+#ccall gsl_sf_bessel_I1_scaled , CDouble -> IO CDouble
+#ccall gsl_sf_bessel_i1_scaled_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_bessel_I1_scaled_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_bessel_i2_scaled , CDouble -> IO CDouble
+#ccall gsl_sf_bessel_i2_scaled_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_bessel_il_scaled_array , CInt -> CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_sf_bessel_il_scaled , CInt -> CDouble -> IO CDouble
+#ccall gsl_sf_bessel_il_scaled_e , CInt -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_bessel_In_array , CInt -> CInt -> CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_sf_bessel_In , CInt -> CDouble -> IO CDouble
+#ccall gsl_sf_bessel_In_e , CInt -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_bessel_In_scaled_array , CInt -> CInt -> CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_sf_bessel_In_scaled , CInt -> CDouble -> IO CDouble
+#ccall gsl_sf_bessel_In_scaled_e , CInt -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_bessel_Inu , CDouble -> CDouble -> IO CDouble
+#ccall gsl_sf_bessel_Inu_e , CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_bessel_Inu_scaled , CDouble -> CDouble -> IO CDouble
+#ccall gsl_sf_bessel_Inu_scaled_e , CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_bessel_j0 , CDouble -> IO CDouble
+#ccall gsl_sf_bessel_J0 , CDouble -> IO CDouble
+#ccall gsl_sf_bessel_j0_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_bessel_J0_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_bessel_j1 , CDouble -> IO CDouble
+#ccall gsl_sf_bessel_J1 , CDouble -> IO CDouble
+#ccall gsl_sf_bessel_j1_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_bessel_J1_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_bessel_j2 , CDouble -> IO CDouble
+#ccall gsl_sf_bessel_j2_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_bessel_jl_array , CInt -> CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_sf_bessel_jl , CInt -> CDouble -> IO CDouble
+#ccall gsl_sf_bessel_jl_e , CInt -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_bessel_jl_steed_array , CInt -> CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_sf_bessel_Jn_array , CInt -> CInt -> CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_sf_bessel_Jn , CInt -> CDouble -> IO CDouble
+#ccall gsl_sf_bessel_Jn_e , CInt -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_bessel_Jnu , CDouble -> CDouble -> IO CDouble
+#ccall gsl_sf_bessel_Jnu_e , CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_bessel_K0 , CDouble -> IO CDouble
+#ccall gsl_sf_bessel_K0_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_bessel_k0_scaled , CDouble -> IO CDouble
+#ccall gsl_sf_bessel_K0_scaled , CDouble -> IO CDouble
+#ccall gsl_sf_bessel_k0_scaled_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_bessel_K0_scaled_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_bessel_K1 , CDouble -> IO CDouble
+#ccall gsl_sf_bessel_K1_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_bessel_k1_scaled , CDouble -> IO CDouble
+#ccall gsl_sf_bessel_K1_scaled , CDouble -> IO CDouble
+#ccall gsl_sf_bessel_k1_scaled_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_bessel_K1_scaled_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_bessel_k2_scaled , CDouble -> IO CDouble
+#ccall gsl_sf_bessel_k2_scaled_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_bessel_kl_scaled_array , CInt -> CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_sf_bessel_kl_scaled , CInt -> CDouble -> IO CDouble
+#ccall gsl_sf_bessel_kl_scaled_e , CInt -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_bessel_Kn_array , CInt -> CInt -> CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_sf_bessel_Kn , CInt -> CDouble -> IO CDouble
+#ccall gsl_sf_bessel_Kn_e , CInt -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_bessel_Kn_scaled_array , CInt -> CInt -> CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_sf_bessel_Kn_scaled , CInt -> CDouble -> IO CDouble
+#ccall gsl_sf_bessel_Kn_scaled_e , CInt -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_bessel_Knu , CDouble -> CDouble -> IO CDouble
+#ccall gsl_sf_bessel_Knu_e , CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_bessel_Knu_scaled , CDouble -> CDouble -> IO CDouble
+#ccall gsl_sf_bessel_Knu_scaled_e , CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_bessel_lnKnu , CDouble -> CDouble -> IO CDouble
+#ccall gsl_sf_bessel_lnKnu_e , CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_bessel_sequence_Jnu_e , CDouble -> <gsl_mode_t> -> CSize -> Ptr CDouble -> IO CInt
+#ccall gsl_sf_bessel_y0 , CDouble -> IO CDouble
+#ccall gsl_sf_bessel_Y0 , CDouble -> IO CDouble
+#ccall gsl_sf_bessel_y0_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_bessel_Y0_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_bessel_y1 , CDouble -> IO CDouble
+#ccall gsl_sf_bessel_Y1 , CDouble -> IO CDouble
+#ccall gsl_sf_bessel_y1_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_bessel_Y1_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_bessel_y2 , CDouble -> IO CDouble
+#ccall gsl_sf_bessel_y2_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_bessel_yl_array , CInt -> CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_sf_bessel_yl , CInt -> CDouble -> IO CDouble
+#ccall gsl_sf_bessel_yl_e , CInt -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_bessel_Yn_array , CInt -> CInt -> CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_sf_bessel_Yn , CInt -> CDouble -> IO CDouble
+#ccall gsl_sf_bessel_Yn_e , CInt -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_bessel_Ynu , CDouble -> CDouble -> IO CDouble
+#ccall gsl_sf_bessel_Ynu_e , CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_bessel_zero_J0 , CUInt -> IO CDouble
+#ccall gsl_sf_bessel_zero_J0_e , CUInt -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_bessel_zero_J1 , CUInt -> IO CDouble
+#ccall gsl_sf_bessel_zero_J1_e , CUInt -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_bessel_zero_Jnu , CDouble -> CUInt -> IO CDouble
+#ccall gsl_sf_bessel_zero_Jnu_e , CDouble -> CUInt -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_beta , CDouble -> CDouble -> IO CDouble
+#ccall gsl_sf_beta_e , CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_beta_inc , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_sf_beta_inc_e , CDouble -> CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_Chi , CDouble -> IO CDouble
+#ccall gsl_sf_Chi_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_choose , CUInt -> CUInt -> IO CDouble
+#ccall gsl_sf_choose_e , CUInt -> CUInt -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_Ci , CDouble -> IO CDouble
+#ccall gsl_sf_Ci_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_clausen , CDouble -> IO CDouble
+#ccall gsl_sf_clausen_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_complex_cos_e , CDouble -> CDouble -> Ptr <gsl_sf_result> -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_complex_dilog_e , CDouble -> CDouble -> Ptr <gsl_sf_result> -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_complex_dilog_xy_e , CDouble -> CDouble -> Ptr <gsl_sf_result> -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_complex_log_e , CDouble -> CDouble -> Ptr <gsl_sf_result> -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_complex_logsin_e , CDouble -> CDouble -> Ptr <gsl_sf_result> -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_complex_psi_e , CDouble -> CDouble -> Ptr <gsl_sf_result> -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_complex_sin_e , CDouble -> CDouble -> Ptr <gsl_sf_result> -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_complex_spence_xy_e , CDouble -> CDouble -> Ptr <gsl_sf_result> -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_conicalP_0 , CDouble -> CDouble -> IO CDouble
+#ccall gsl_sf_conicalP_0_e , CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_conicalP_1 , CDouble -> CDouble -> IO CDouble
+#ccall gsl_sf_conicalP_1_e , CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_conicalP_cyl_reg , CInt -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_sf_conicalP_cyl_reg_e , CInt -> CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_conicalP_half , CDouble -> CDouble -> IO CDouble
+#ccall gsl_sf_conicalP_half_e , CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_conicalP_mhalf , CDouble -> CDouble -> IO CDouble
+#ccall gsl_sf_conicalP_mhalf_e , CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_conicalP_sph_reg , CInt -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_sf_conicalP_sph_reg_e , CInt -> CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_cos , CDouble -> IO CDouble
+#ccall gsl_sf_cos_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_cos_err_e , CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_coulomb_CL_array , CDouble -> CInt -> CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_sf_coulomb_CL_e , CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_coulomb_wave_F_array , CDouble -> CInt -> CDouble -> CDouble -> Ptr CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_sf_coulomb_wave_FG_array , CDouble -> CInt -> CDouble -> CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_sf_coulomb_wave_FG_e , CDouble -> CDouble -> CDouble -> CInt -> Ptr <gsl_sf_result> -> Ptr <gsl_sf_result> -> Ptr <gsl_sf_result> -> Ptr <gsl_sf_result> -> Ptr CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_sf_coulomb_wave_FGp_array , CDouble -> CInt -> CDouble -> CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_sf_coulomb_wave_sphF_array , CDouble -> CInt -> CDouble -> CDouble -> Ptr CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_sf_coupling_3j , CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO CDouble
+#ccall gsl_sf_coupling_3j_e , CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_coupling_6j , CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO CDouble
+#ccall gsl_sf_coupling_6j_e , CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_coupling_9j , CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO CDouble
+#ccall gsl_sf_coupling_9j_e , CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_coupling_RacahW , CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO CDouble
+#ccall gsl_sf_coupling_RacahW_e , CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_dawson , CDouble -> IO CDouble
+#ccall gsl_sf_dawson_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_debye_1 , CDouble -> IO CDouble
+#ccall gsl_sf_debye_1_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_debye_2 , CDouble -> IO CDouble
+#ccall gsl_sf_debye_2_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_debye_3 , CDouble -> IO CDouble
+#ccall gsl_sf_debye_3_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_debye_4 , CDouble -> IO CDouble
+#ccall gsl_sf_debye_4_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_debye_5 , CDouble -> IO CDouble
+#ccall gsl_sf_debye_5_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_debye_6 , CDouble -> IO CDouble
+#ccall gsl_sf_debye_6_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_dilog , CDouble -> IO CDouble
+#ccall gsl_sf_dilog_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_doublefact , CUInt -> IO CDouble
+#ccall gsl_sf_doublefact_e , CUInt -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_ellint_D , CDouble -> CDouble -> CDouble -> <gsl_mode_t> -> IO CDouble
+#ccall gsl_sf_ellint_Dcomp , CDouble -> <gsl_mode_t> -> IO CDouble
+#ccall gsl_sf_ellint_Dcomp_e , CDouble -> <gsl_mode_t> -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_ellint_D_e , CDouble -> CDouble -> CDouble -> <gsl_mode_t> -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_ellint_E , CDouble -> CDouble -> <gsl_mode_t> -> IO CDouble
+#ccall gsl_sf_ellint_Ecomp , CDouble -> <gsl_mode_t> -> IO CDouble
+#ccall gsl_sf_ellint_Ecomp_e , CDouble -> <gsl_mode_t> -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_ellint_E_e , CDouble -> CDouble -> <gsl_mode_t> -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_ellint_F , CDouble -> CDouble -> <gsl_mode_t> -> IO CDouble
+#ccall gsl_sf_ellint_F_e , CDouble -> CDouble -> <gsl_mode_t> -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_ellint_Kcomp , CDouble -> <gsl_mode_t> -> IO CDouble
+#ccall gsl_sf_ellint_Kcomp_e , CDouble -> <gsl_mode_t> -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_ellint_P , CDouble -> CDouble -> CDouble -> <gsl_mode_t> -> IO CDouble
+#ccall gsl_sf_ellint_Pcomp , CDouble -> CDouble -> <gsl_mode_t> -> IO CDouble
+#ccall gsl_sf_ellint_Pcomp_e , CDouble -> CDouble -> <gsl_mode_t> -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_ellint_P_e , CDouble -> CDouble -> CDouble -> <gsl_mode_t> -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_ellint_RC , CDouble -> CDouble -> <gsl_mode_t> -> IO CDouble
+#ccall gsl_sf_ellint_RC_e , CDouble -> CDouble -> <gsl_mode_t> -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_ellint_RD , CDouble -> CDouble -> CDouble -> <gsl_mode_t> -> IO CDouble
+#ccall gsl_sf_ellint_RD_e , CDouble -> CDouble -> CDouble -> <gsl_mode_t> -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_ellint_RF , CDouble -> CDouble -> CDouble -> <gsl_mode_t> -> IO CDouble
+#ccall gsl_sf_ellint_RF_e , CDouble -> CDouble -> CDouble -> <gsl_mode_t> -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_ellint_RJ , CDouble -> CDouble -> CDouble -> CDouble -> <gsl_mode_t> -> IO CDouble
+#ccall gsl_sf_ellint_RJ_e , CDouble -> CDouble -> CDouble -> CDouble -> <gsl_mode_t> -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_elljac_e , CDouble -> CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_sf_erfc , CDouble -> IO CDouble
+#ccall gsl_sf_erf , CDouble -> IO CDouble
+#ccall gsl_sf_erfc_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_erf_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_erf_Q , CDouble -> IO CDouble
+#ccall gsl_sf_erf_Q_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_erf_Z , CDouble -> IO CDouble
+#ccall gsl_sf_erf_Z_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_eta , CDouble -> IO CDouble
+#ccall gsl_sf_eta_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_eta_int , CInt -> IO CDouble
+#ccall gsl_sf_eta_int_e , CInt -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_exp , CDouble -> IO CDouble
+#ccall gsl_sf_exp_e10_e , CDouble -> Ptr <gsl_sf_result_e10> -> IO CInt
+#ccall gsl_sf_exp_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_exp_err_e10_e , CDouble -> CDouble -> Ptr <gsl_sf_result_e10> -> IO CInt
+#ccall gsl_sf_exp_err_e , CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_expint_3 , CDouble -> IO CDouble
+#ccall gsl_sf_expint_3_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_expint_E1 , CDouble -> IO CDouble
+#ccall gsl_sf_expint_E1_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_expint_E1_scaled , CDouble -> IO CDouble
+#ccall gsl_sf_expint_E1_scaled_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_expint_E2 , CDouble -> IO CDouble
+#ccall gsl_sf_expint_E2_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_expint_E2_scaled , CDouble -> IO CDouble
+#ccall gsl_sf_expint_E2_scaled_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_expint_Ei , CDouble -> IO CDouble
+#ccall gsl_sf_expint_Ei_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_expint_Ei_scaled , CDouble -> IO CDouble
+#ccall gsl_sf_expint_Ei_scaled_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_expint_En , CInt -> CDouble -> IO CDouble
+#ccall gsl_sf_expint_En_e , CInt -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_expint_En_scaled , CInt -> CDouble -> IO CDouble
+#ccall gsl_sf_expint_En_scaled_e , CInt -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_expm1 , CDouble -> IO CDouble
+#ccall gsl_sf_expm1_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_exp_mult , CDouble -> CDouble -> IO CDouble
+#ccall gsl_sf_exp_mult_e10_e , CDouble -> CDouble -> Ptr <gsl_sf_result_e10> -> IO CInt
+#ccall gsl_sf_exp_mult_e , CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_exp_mult_err_e10_e , CDouble -> CDouble -> CDouble -> CDouble -> Ptr <gsl_sf_result_e10> -> IO CInt
+#ccall gsl_sf_exp_mult_err_e , CDouble -> CDouble -> CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_exprel_2 , CDouble -> IO CDouble
+#ccall gsl_sf_exprel_2_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_exprel , CDouble -> IO CDouble
+#ccall gsl_sf_exprel_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_exprel_n_CF_e , CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_exprel_n , CInt -> CDouble -> IO CDouble
+#ccall gsl_sf_exprel_n_e , CInt -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_fact , CUInt -> IO CDouble
+#ccall gsl_sf_fact_e , CUInt -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_fermi_dirac_0 , CDouble -> IO CDouble
+#ccall gsl_sf_fermi_dirac_0_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_fermi_dirac_1 , CDouble -> IO CDouble
+#ccall gsl_sf_fermi_dirac_1_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_fermi_dirac_2 , CDouble -> IO CDouble
+#ccall gsl_sf_fermi_dirac_2_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_fermi_dirac_3half , CDouble -> IO CDouble
+#ccall gsl_sf_fermi_dirac_3half_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_fermi_dirac_half , CDouble -> IO CDouble
+#ccall gsl_sf_fermi_dirac_half_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_fermi_dirac_inc_0 , CDouble -> CDouble -> IO CDouble
+#ccall gsl_sf_fermi_dirac_inc_0_e , CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_fermi_dirac_int , CInt -> CDouble -> IO CDouble
+#ccall gsl_sf_fermi_dirac_int_e , CInt -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_fermi_dirac_m1 , CDouble -> IO CDouble
+#ccall gsl_sf_fermi_dirac_m1_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_fermi_dirac_mhalf , CDouble -> IO CDouble
+#ccall gsl_sf_fermi_dirac_mhalf_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_gamma , CDouble -> IO CDouble
+#ccall gsl_sf_gamma_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_gamma_inc , CDouble -> CDouble -> IO CDouble
+#ccall gsl_sf_gamma_inc_e , CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_gamma_inc_P , CDouble -> CDouble -> IO CDouble
+#ccall gsl_sf_gamma_inc_P_e , CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_gamma_inc_Q , CDouble -> CDouble -> IO CDouble
+#ccall gsl_sf_gamma_inc_Q_e , CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_gammainv , CDouble -> IO CDouble
+#ccall gsl_sf_gammainv_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_gammastar , CDouble -> IO CDouble
+#ccall gsl_sf_gammastar_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_gegenpoly_1 , CDouble -> CDouble -> IO CDouble
+#ccall gsl_sf_gegenpoly_1_e , CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_gegenpoly_2 , CDouble -> CDouble -> IO CDouble
+#ccall gsl_sf_gegenpoly_2_e , CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_gegenpoly_3 , CDouble -> CDouble -> IO CDouble
+#ccall gsl_sf_gegenpoly_3_e , CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_gegenpoly_array , CInt -> CDouble -> CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_sf_gegenpoly_n , CInt -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_sf_gegenpoly_n_e , CInt -> CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_hazard , CDouble -> IO CDouble
+#ccall gsl_sf_hazard_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_hydrogenicR_1 , CDouble -> CDouble -> IO CDouble
+#ccall gsl_sf_hydrogenicR_1_e , CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_hydrogenicR , CInt -> CInt -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_sf_hydrogenicR_e , CInt -> CInt -> CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_hyperg_0F1 , CDouble -> CDouble -> IO CDouble
+#ccall gsl_sf_hyperg_0F1_e , CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_hyperg_1F1 , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_sf_hyperg_1F1_e , CDouble -> CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_hyperg_1F1_int , CInt -> CInt -> CDouble -> IO CDouble
+#ccall gsl_sf_hyperg_1F1_int_e , CInt -> CInt -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_hyperg_2F0 , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_sf_hyperg_2F0_e , CDouble -> CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_hyperg_2F1 , CDouble -> CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_sf_hyperg_2F1_conj , CDouble -> CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_sf_hyperg_2F1_conj_e , CDouble -> CDouble -> CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_hyperg_2F1_conj_renorm , CDouble -> CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_sf_hyperg_2F1_conj_renorm_e , CDouble -> CDouble -> CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_hyperg_2F1_e , CDouble -> CDouble -> CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_hyperg_2F1_renorm , CDouble -> CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_sf_hyperg_2F1_renorm_e , CDouble -> CDouble -> CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_hyperg_U , CDouble -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_sf_hyperg_U_e10_e , CDouble -> CDouble -> CDouble -> Ptr <gsl_sf_result_e10> -> IO CInt
+#ccall gsl_sf_hyperg_U_e , CDouble -> CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_hyperg_U_int , CInt -> CInt -> CDouble -> IO CDouble
+#ccall gsl_sf_hyperg_U_int_e10_e , CInt -> CInt -> CDouble -> Ptr <gsl_sf_result_e10> -> IO CInt
+#ccall gsl_sf_hyperg_U_int_e , CInt -> CInt -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_hypot , CDouble -> CDouble -> IO CDouble
+#ccall gsl_sf_hypot_e , CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_hzeta , CDouble -> CDouble -> IO CDouble
+#ccall gsl_sf_hzeta_e , CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_laguerre_1 , CDouble -> CDouble -> IO CDouble
+#ccall gsl_sf_laguerre_1_e , CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_laguerre_2 , CDouble -> CDouble -> IO CDouble
+#ccall gsl_sf_laguerre_2_e , CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_laguerre_3 , CDouble -> CDouble -> IO CDouble
+#ccall gsl_sf_laguerre_3_e , CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_laguerre_n , CInt -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_sf_laguerre_n_e , CInt -> CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_lambert_W0 , CDouble -> IO CDouble
+#ccall gsl_sf_lambert_W0_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_lambert_Wm1 , CDouble -> IO CDouble
+#ccall gsl_sf_lambert_Wm1_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_legendre_array_size , CInt -> CInt -> IO CInt
+#ccall gsl_sf_legendre_H3d_0 , CDouble -> CDouble -> IO CDouble
+#ccall gsl_sf_legendre_H3d_0_e , CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_legendre_H3d_1 , CDouble -> CDouble -> IO CDouble
+#ccall gsl_sf_legendre_H3d_1_e , CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_legendre_H3d_array , CInt -> CDouble -> CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_sf_legendre_H3d , CInt -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_sf_legendre_H3d_e , CInt -> CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_legendre_P1 , CDouble -> IO CDouble
+#ccall gsl_sf_legendre_P1_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_legendre_P2 , CDouble -> IO CDouble
+#ccall gsl_sf_legendre_P2_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_legendre_P3 , CDouble -> IO CDouble
+#ccall gsl_sf_legendre_P3_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_legendre_Pl_array , CInt -> CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_sf_legendre_Pl , CInt -> CDouble -> IO CDouble
+#ccall gsl_sf_legendre_Pl_deriv_array , CInt -> CDouble -> Ptr CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_sf_legendre_Pl_e , CInt -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_legendre_Plm_array , CInt -> CInt -> CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_sf_legendre_Plm , CInt -> CInt -> CDouble -> IO CDouble
+#ccall gsl_sf_legendre_Plm_deriv_array , CInt -> CInt -> CDouble -> Ptr CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_sf_legendre_Plm_e , CInt -> CInt -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_legendre_Q0 , CDouble -> IO CDouble
+#ccall gsl_sf_legendre_Q0_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_legendre_Q1 , CDouble -> IO CDouble
+#ccall gsl_sf_legendre_Q1_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_legendre_Ql , CInt -> CDouble -> IO CDouble
+#ccall gsl_sf_legendre_Ql_e , CInt -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_legendre_sphPlm_array , CInt -> CInt -> CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_sf_legendre_sphPlm , CInt -> CInt -> CDouble -> IO CDouble
+#ccall gsl_sf_legendre_sphPlm_deriv_array , CInt -> CInt -> CDouble -> Ptr CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_sf_legendre_sphPlm_e , CInt -> CInt -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_lnbeta , CDouble -> CDouble -> IO CDouble
+#ccall gsl_sf_lnbeta_e , CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_lnbeta_sgn_e , CDouble -> CDouble -> Ptr <gsl_sf_result> -> Ptr CDouble -> IO CInt
+#ccall gsl_sf_lnchoose , CUInt -> CUInt -> IO CDouble
+#ccall gsl_sf_lnchoose_e , CUInt -> CUInt -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_lncosh , CDouble -> IO CDouble
+#ccall gsl_sf_lncosh_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_lndoublefact , CUInt -> IO CDouble
+#ccall gsl_sf_lndoublefact_e , CUInt -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_lnfact , CUInt -> IO CDouble
+#ccall gsl_sf_lnfact_e , CUInt -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_lngamma , CDouble -> IO CDouble
+#ccall gsl_sf_lngamma_complex_e , CDouble -> CDouble -> Ptr <gsl_sf_result> -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_lngamma_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_lngamma_sgn_e , CDouble -> Ptr <gsl_sf_result> -> Ptr CDouble -> IO CInt
+#ccall gsl_sf_lnpoch , CDouble -> CDouble -> IO CDouble
+#ccall gsl_sf_lnpoch_e , CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_lnpoch_sgn_e , CDouble -> CDouble -> Ptr <gsl_sf_result> -> Ptr CDouble -> IO CInt
+#ccall gsl_sf_lnsinh , CDouble -> IO CDouble
+#ccall gsl_sf_lnsinh_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_log_1plusx , CDouble -> IO CDouble
+#ccall gsl_sf_log_1plusx_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_log_1plusx_mx , CDouble -> IO CDouble
+#ccall gsl_sf_log_1plusx_mx_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_log_abs , CDouble -> IO CDouble
+#ccall gsl_sf_log_abs_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_log , CDouble -> IO CDouble
+#ccall gsl_sf_log_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_log_erfc , CDouble -> IO CDouble
+#ccall gsl_sf_log_erfc_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_mathieu_a_array , CInt -> CInt -> CDouble -> Ptr <gsl_sf_mathieu_workspace> -> Ptr CDouble -> IO CInt
+#ccall gsl_sf_mathieu_a , CInt -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_mathieu_a_coeff , CInt -> CDouble -> CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_sf_mathieu_alloc , CSize -> CDouble -> IO (Ptr gsl_sf_mathieu_workspace)
+#ccall gsl_sf_mathieu_b_array , CInt -> CInt -> CDouble -> Ptr <gsl_sf_mathieu_workspace> -> Ptr CDouble -> IO CInt
+#ccall gsl_sf_mathieu_b , CInt -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_mathieu_b_coeff , CInt -> CDouble -> CDouble -> Ptr CDouble -> IO CInt
+#ccall gsl_sf_mathieu_ce_array , CInt -> CInt -> CDouble -> CDouble -> Ptr <gsl_sf_mathieu_workspace> -> Ptr CDouble -> IO CInt
+#ccall gsl_sf_mathieu_ce , CInt -> CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_mathieu_free , Ptr <gsl_sf_mathieu_workspace> -> IO ()
+#ccall gsl_sf_mathieu_Mc_array , CInt -> CInt -> CInt -> CDouble -> CDouble -> Ptr <gsl_sf_mathieu_workspace> -> Ptr CDouble -> IO CInt
+#ccall gsl_sf_mathieu_Mc , CInt -> CInt -> CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_mathieu_Ms_array , CInt -> CInt -> CInt -> CDouble -> CDouble -> Ptr <gsl_sf_mathieu_workspace> -> Ptr CDouble -> IO CInt
+#ccall gsl_sf_mathieu_Ms , CInt -> CInt -> CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_mathieu_se_array , CInt -> CInt -> CDouble -> CDouble -> Ptr <gsl_sf_mathieu_workspace> -> Ptr CDouble -> IO CInt
+#ccall gsl_sf_mathieu_se , CInt -> CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_multiply , CDouble -> CDouble -> IO CDouble
+#ccall gsl_sf_multiply_e , CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_multiply_err_e , CDouble -> CDouble -> CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_poch , CDouble -> CDouble -> IO CDouble
+#ccall gsl_sf_poch_e , CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_pochrel , CDouble -> CDouble -> IO CDouble
+#ccall gsl_sf_pochrel_e , CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_polar_to_rect , CDouble -> CDouble -> Ptr <gsl_sf_result> -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_pow_int , CDouble -> CInt -> IO CDouble
+#ccall gsl_sf_pow_int_e , CDouble -> CInt -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_psi_1 , CDouble -> IO CDouble
+#ccall gsl_sf_psi_1_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_psi_1_int , CInt -> IO CDouble
+#ccall gsl_sf_psi_1_int_e , CInt -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_psi_1piy , CDouble -> IO CDouble
+#ccall gsl_sf_psi_1piy_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_psi , CDouble -> IO CDouble
+#ccall gsl_sf_psi_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_psi_int , CInt -> IO CDouble
+#ccall gsl_sf_psi_int_e , CInt -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_psi_n , CInt -> CDouble -> IO CDouble
+#ccall gsl_sf_psi_n_e , CInt -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_rect_to_polar , CDouble -> CDouble -> Ptr <gsl_sf_result> -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_result_smash_e , Ptr <gsl_sf_result_e10> -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_Shi , CDouble -> IO CDouble
+#ccall gsl_sf_Shi_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_Si , CDouble -> IO CDouble
+#ccall gsl_sf_Si_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_sinc , CDouble -> IO CDouble
+#ccall gsl_sf_sin , CDouble -> IO CDouble
+#ccall gsl_sf_sinc_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_sin_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_sin_err_e , CDouble -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_synchrotron_1 , CDouble -> IO CDouble
+#ccall gsl_sf_synchrotron_1_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_synchrotron_2 , CDouble -> IO CDouble
+#ccall gsl_sf_synchrotron_2_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_taylorcoeff , CInt -> CDouble -> IO CDouble
+#ccall gsl_sf_taylorcoeff_e , CInt -> CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_transport_2 , CDouble -> IO CDouble
+#ccall gsl_sf_transport_2_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_transport_3 , CDouble -> IO CDouble
+#ccall gsl_sf_transport_3_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_transport_4 , CDouble -> IO CDouble
+#ccall gsl_sf_transport_4_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_transport_5 , CDouble -> IO CDouble
+#ccall gsl_sf_transport_5_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_zeta , CDouble -> IO CDouble
+#ccall gsl_sf_zeta_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_zeta_int , CInt -> IO CDouble
+#ccall gsl_sf_zeta_int_e , CInt -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_zetam1 , CDouble -> IO CDouble
+#ccall gsl_sf_zetam1_e , CDouble -> Ptr <gsl_sf_result> -> IO CInt
+#ccall gsl_sf_zetam1_int , CInt -> IO CDouble
+#ccall gsl_sf_zetam1_int_e , CInt -> Ptr <gsl_sf_result> -> IO CInt
diff --git a/src/Bindings/Gsl/Statistics.hsc b/src/Bindings/Gsl/Statistics.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/Statistics.hsc
@@ -0,0 +1,384 @@
+#include <bindings.dsl.h>
+#include <gsl/gsl_statistics.h>
+
+-- | <http://www.gnu.org/software/gsl/manual/html_node/Statistics.html>
+
+module Bindings.Gsl.Statistics where
+#strict_import
+
+#ccall gsl_stats_char_mean , CString -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_char_variance , CString -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_char_sd , CString -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_char_variance_with_fixed_mean , CString -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_char_sd_with_fixed_mean , CString -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_char_tss , CString -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_char_tss_m , CString -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_char_absdev , CString -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_char_skew , CString -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_char_kurtosis , CString -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_char_lag1_autocorrelation , CString -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_char_covariance , CString -> CSize -> CString -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_char_correlation , CString -> CSize -> CString -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_char_variance_m , CString -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_char_sd_m , CString -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_char_absdev_m , CString -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_char_skew_m_sd , CString -> CSize -> CSize -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_stats_char_kurtosis_m_sd , CString -> CSize -> CSize -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_stats_char_lag1_autocorrelation_m , CString -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_char_covariance_m , CString -> CSize -> CString -> CSize -> CSize -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_stats_char_pvariance , CString -> CSize -> CSize -> CString -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_char_ttest , CString -> CSize -> CSize -> CString -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_char_max , CString -> CSize -> CSize -> IO CChar
+#ccall gsl_stats_char_min , CString -> CSize -> CSize -> IO CChar
+#ccall gsl_stats_char_minmax , CString -> CString -> CString -> CSize -> CSize -> IO ()
+#ccall gsl_stats_char_max_index , CString -> CSize -> CSize -> IO CSize
+#ccall gsl_stats_char_min_index , CString -> CSize -> CSize -> IO CSize
+#ccall gsl_stats_char_minmax_index , Ptr CSize -> Ptr CSize -> CString -> CSize -> CSize -> IO ()
+#ccall gsl_stats_char_median_from_sorted_data , CString -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_char_quantile_from_sorted_data , CString -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_mean , Ptr CDouble -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_variance , Ptr CDouble -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_sd , Ptr CDouble -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_variance_with_fixed_mean , Ptr CDouble -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_sd_with_fixed_mean , Ptr CDouble -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_tss , Ptr CDouble -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_tss_m , Ptr CDouble -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_absdev , Ptr CDouble -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_skew , Ptr CDouble -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_kurtosis , Ptr CDouble -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_lag1_autocorrelation , Ptr CDouble -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_covariance , Ptr CDouble -> CSize -> Ptr CDouble -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_correlation , Ptr CDouble -> CSize -> Ptr CDouble -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_variance_m , Ptr CDouble -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_sd_m , Ptr CDouble -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_absdev_m , Ptr CDouble -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_skew_m_sd , Ptr CDouble -> CSize -> CSize -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_stats_kurtosis_m_sd , Ptr CDouble -> CSize -> CSize -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_stats_lag1_autocorrelation_m , Ptr CDouble -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_covariance_m , Ptr CDouble -> CSize -> Ptr CDouble -> CSize -> CSize -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_stats_wmean , Ptr CDouble -> CSize -> Ptr CDouble -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_wvariance , Ptr CDouble -> CSize -> Ptr CDouble -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_wsd , Ptr CDouble -> CSize -> Ptr CDouble -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_wvariance_with_fixed_mean , Ptr CDouble -> CSize -> Ptr CDouble -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_wsd_with_fixed_mean , Ptr CDouble -> CSize -> Ptr CDouble -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_wtss , Ptr CDouble -> CSize -> Ptr CDouble -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_wtss_m , Ptr CDouble -> CSize -> Ptr CDouble -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_wabsdev , Ptr CDouble -> CSize -> Ptr CDouble -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_wskew , Ptr CDouble -> CSize -> Ptr CDouble -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_wkurtosis , Ptr CDouble -> CSize -> Ptr CDouble -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_wvariance_m , Ptr CDouble -> CSize -> Ptr CDouble -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_wsd_m , Ptr CDouble -> CSize -> Ptr CDouble -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_wabsdev_m , Ptr CDouble -> CSize -> Ptr CDouble -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_wskew_m_sd , Ptr CDouble -> CSize -> Ptr CDouble -> CSize -> CSize -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_stats_wkurtosis_m_sd , Ptr CDouble -> CSize -> Ptr CDouble -> CSize -> CSize -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_stats_pvariance , Ptr CDouble -> CSize -> CSize -> Ptr CDouble -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_ttest , Ptr CDouble -> CSize -> CSize -> Ptr CDouble -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_max , Ptr CDouble -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_min , Ptr CDouble -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_minmax , Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> CSize -> CSize -> IO ()
+#ccall gsl_stats_max_index , Ptr CDouble -> CSize -> CSize -> IO CSize
+#ccall gsl_stats_min_index , Ptr CDouble -> CSize -> CSize -> IO CSize
+#ccall gsl_stats_minmax_index , Ptr CSize -> Ptr CSize -> Ptr CDouble -> CSize -> CSize -> IO ()
+#ccall gsl_stats_median_from_sorted_data , Ptr CDouble -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_quantile_from_sorted_data , Ptr CDouble -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_float_mean , Ptr CFloat -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_float_variance , Ptr CFloat -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_float_sd , Ptr CFloat -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_float_variance_with_fixed_mean , Ptr CFloat -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_float_sd_with_fixed_mean , Ptr CFloat -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_float_tss , Ptr CFloat -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_float_tss_m , Ptr CFloat -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_float_absdev , Ptr CFloat -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_float_skew , Ptr CFloat -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_float_kurtosis , Ptr CFloat -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_float_lag1_autocorrelation , Ptr CFloat -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_float_covariance , Ptr CFloat -> CSize -> Ptr CFloat -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_float_correlation , Ptr CFloat -> CSize -> Ptr CFloat -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_float_variance_m , Ptr CFloat -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_float_sd_m , Ptr CFloat -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_float_absdev_m , Ptr CFloat -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_float_skew_m_sd , Ptr CFloat -> CSize -> CSize -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_stats_float_kurtosis_m_sd , Ptr CFloat -> CSize -> CSize -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_stats_float_lag1_autocorrelation_m , Ptr CFloat -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_float_covariance_m , Ptr CFloat -> CSize -> Ptr CFloat -> CSize -> CSize -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_stats_float_wmean , Ptr CFloat -> CSize -> Ptr CFloat -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_float_wvariance , Ptr CFloat -> CSize -> Ptr CFloat -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_float_wsd , Ptr CFloat -> CSize -> Ptr CFloat -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_float_wvariance_with_fixed_mean , Ptr CFloat -> CSize -> Ptr CFloat -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_float_wsd_with_fixed_mean , Ptr CFloat -> CSize -> Ptr CFloat -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_float_wtss , Ptr CFloat -> CSize -> Ptr CFloat -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_float_wtss_m , Ptr CFloat -> CSize -> Ptr CFloat -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_float_wabsdev , Ptr CFloat -> CSize -> Ptr CFloat -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_float_wskew , Ptr CFloat -> CSize -> Ptr CFloat -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_float_wkurtosis , Ptr CFloat -> CSize -> Ptr CFloat -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_float_wvariance_m , Ptr CFloat -> CSize -> Ptr CFloat -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_float_wsd_m , Ptr CFloat -> CSize -> Ptr CFloat -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_float_wabsdev_m , Ptr CFloat -> CSize -> Ptr CFloat -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_float_wskew_m_sd , Ptr CFloat -> CSize -> Ptr CFloat -> CSize -> CSize -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_stats_float_wkurtosis_m_sd , Ptr CFloat -> CSize -> Ptr CFloat -> CSize -> CSize -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_stats_float_pvariance , Ptr CFloat -> CSize -> CSize -> Ptr CFloat -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_float_ttest , Ptr CFloat -> CSize -> CSize -> Ptr CFloat -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_float_max , Ptr CFloat -> CSize -> CSize -> IO CFloat
+#ccall gsl_stats_float_min , Ptr CFloat -> CSize -> CSize -> IO CFloat
+#ccall gsl_stats_float_minmax , Ptr CFloat -> Ptr CFloat -> Ptr CFloat -> CSize -> CSize -> IO ()
+#ccall gsl_stats_float_max_index , Ptr CFloat -> CSize -> CSize -> IO CSize
+#ccall gsl_stats_float_min_index , Ptr CFloat -> CSize -> CSize -> IO CSize
+#ccall gsl_stats_float_minmax_index , Ptr CSize -> Ptr CSize -> Ptr CFloat -> CSize -> CSize -> IO ()
+#ccall gsl_stats_float_median_from_sorted_data , Ptr CFloat -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_float_quantile_from_sorted_data , Ptr CFloat -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_int_mean , Ptr CInt -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_int_variance , Ptr CInt -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_int_sd , Ptr CInt -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_int_variance_with_fixed_mean , Ptr CInt -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_int_sd_with_fixed_mean , Ptr CInt -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_int_tss , Ptr CInt -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_int_tss_m , Ptr CInt -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_int_absdev , Ptr CInt -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_int_skew , Ptr CInt -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_int_kurtosis , Ptr CInt -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_int_lag1_autocorrelation , Ptr CInt -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_int_covariance , Ptr CInt -> CSize -> Ptr CInt -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_int_correlation , Ptr CInt -> CSize -> Ptr CInt -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_int_variance_m , Ptr CInt -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_int_sd_m , Ptr CInt -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_int_absdev_m , Ptr CInt -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_int_skew_m_sd , Ptr CInt -> CSize -> CSize -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_stats_int_kurtosis_m_sd , Ptr CInt -> CSize -> CSize -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_stats_int_lag1_autocorrelation_m , Ptr CInt -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_int_covariance_m , Ptr CInt -> CSize -> Ptr CInt -> CSize -> CSize -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_stats_int_pvariance , Ptr CInt -> CSize -> CSize -> Ptr CInt -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_int_ttest , Ptr CInt -> CSize -> CSize -> Ptr CInt -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_int_max , Ptr CInt -> CSize -> CSize -> IO CInt
+#ccall gsl_stats_int_min , Ptr CInt -> CSize -> CSize -> IO CInt
+#ccall gsl_stats_int_minmax , Ptr CInt -> Ptr CInt -> Ptr CInt -> CSize -> CSize -> IO ()
+#ccall gsl_stats_int_max_index , Ptr CInt -> CSize -> CSize -> IO CSize
+#ccall gsl_stats_int_min_index , Ptr CInt -> CSize -> CSize -> IO CSize
+#ccall gsl_stats_int_minmax_index , Ptr CSize -> Ptr CSize -> Ptr CInt -> CSize -> CSize -> IO ()
+#ccall gsl_stats_int_median_from_sorted_data , Ptr CInt -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_int_quantile_from_sorted_data , Ptr CInt -> CSize -> CSize -> CDouble -> IO CDouble
+-- #ccall gsl_stats_long_double_mean , Ptr CLDouble -> CSize -> CSize -> IO CDouble
+-- #ccall gsl_stats_long_double_variance , Ptr CLDouble -> CSize -> CSize -> IO CDouble
+-- #ccall gsl_stats_long_double_sd , Ptr CLDouble -> CSize -> CSize -> IO CDouble
+-- #ccall gsl_stats_long_double_variance_with_fixed_mean , Ptr CLDouble -> CSize -> CSize -> CDouble -> IO CDouble
+-- #ccall gsl_stats_long_double_sd_with_fixed_mean , Ptr CLDouble -> CSize -> CSize -> CDouble -> IO CDouble
+-- #ccall gsl_stats_long_double_tss , Ptr CLDouble -> CSize -> CSize -> IO CDouble
+-- #ccall gsl_stats_long_double_tss_m , Ptr CLDouble -> CSize -> CSize -> CDouble -> IO CDouble
+-- #ccall gsl_stats_long_double_absdev , Ptr CLDouble -> CSize -> CSize -> IO CDouble
+-- #ccall gsl_stats_long_double_skew , Ptr CLDouble -> CSize -> CSize -> IO CDouble
+-- #ccall gsl_stats_long_double_kurtosis , Ptr CLDouble -> CSize -> CSize -> IO CDouble
+-- #ccall gsl_stats_long_double_lag1_autocorrelation , Ptr CLDouble -> CSize -> CSize -> IO CDouble
+-- #ccall gsl_stats_long_double_covariance , Ptr CLDouble -> CSize -> Ptr CLDouble -> CSize -> CSize -> IO CDouble
+-- #ccall gsl_stats_long_double_correlation , Ptr CLDouble -> CSize -> Ptr CLDouble -> CSize -> CSize -> IO CDouble
+-- #ccall gsl_stats_long_double_variance_m , Ptr CLDouble -> CSize -> CSize -> CDouble -> IO CDouble
+-- #ccall gsl_stats_long_double_sd_m , Ptr CLDouble -> CSize -> CSize -> CDouble -> IO CDouble
+-- #ccall gsl_stats_long_double_absdev_m , Ptr CLDouble -> CSize -> CSize -> CDouble -> IO CDouble
+-- #ccall gsl_stats_long_double_skew_m_sd , Ptr CLDouble -> CSize -> CSize -> CDouble -> CDouble -> IO CDouble
+-- #ccall gsl_stats_long_double_kurtosis_m_sd , Ptr CLDouble -> CSize -> CSize -> CDouble -> CDouble -> IO CDouble
+-- #ccall gsl_stats_long_double_lag1_autocorrelation_m , Ptr CLDouble -> CSize -> CSize -> CDouble -> IO CDouble
+-- #ccall gsl_stats_long_double_covariance_m , Ptr CLDouble -> CSize -> Ptr CLDouble -> CSize -> CSize -> CDouble -> CDouble -> IO CDouble
+-- #ccall gsl_stats_long_double_wmean , Ptr CLDouble -> CSize -> Ptr CLDouble -> CSize -> CSize -> IO CDouble
+-- #ccall gsl_stats_long_double_wvariance , Ptr CLDouble -> CSize -> Ptr CLDouble -> CSize -> CSize -> IO CDouble
+-- #ccall gsl_stats_long_double_wsd , Ptr CLDouble -> CSize -> Ptr CLDouble -> CSize -> CSize -> IO CDouble
+-- #ccall gsl_stats_long_double_wvariance_with_fixed_mean , Ptr CLDouble -> CSize -> Ptr CLDouble -> CSize -> CSize -> CDouble -> IO CDouble
+-- #ccall gsl_stats_long_double_wsd_with_fixed_mean , Ptr CLDouble -> CSize -> Ptr CLDouble -> CSize -> CSize -> CDouble -> IO CDouble
+-- #ccall gsl_stats_long_double_wtss , Ptr CLDouble -> CSize -> Ptr CLDouble -> CSize -> CSize -> IO CDouble
+-- #ccall gsl_stats_long_double_wtss_m , Ptr CLDouble -> CSize -> Ptr CLDouble -> CSize -> CSize -> CDouble -> IO CDouble
+-- #ccall gsl_stats_long_double_wabsdev , Ptr CLDouble -> CSize -> Ptr CLDouble -> CSize -> CSize -> IO CDouble
+-- #ccall gsl_stats_long_double_wskew , Ptr CLDouble -> CSize -> Ptr CLDouble -> CSize -> CSize -> IO CDouble
+-- #ccall gsl_stats_long_double_wkurtosis , Ptr CLDouble -> CSize -> Ptr CLDouble -> CSize -> CSize -> IO CDouble
+-- #ccall gsl_stats_long_double_wvariance_m , Ptr CLDouble -> CSize -> Ptr CLDouble -> CSize -> CSize -> CDouble -> IO CDouble
+-- #ccall gsl_stats_long_double_wsd_m , Ptr CLDouble -> CSize -> Ptr CLDouble -> CSize -> CSize -> CDouble -> IO CDouble
+-- #ccall gsl_stats_long_double_wabsdev_m , Ptr CLDouble -> CSize -> Ptr CLDouble -> CSize -> CSize -> CDouble -> IO CDouble
+-- #ccall gsl_stats_long_double_wskew_m_sd , Ptr CLDouble -> CSize -> Ptr CLDouble -> CSize -> CSize -> CDouble -> CDouble -> IO CDouble
+-- #ccall gsl_stats_long_double_wkurtosis_m_sd , Ptr CLDouble -> CSize -> Ptr CLDouble -> CSize -> CSize -> CDouble -> CDouble -> IO CDouble
+-- #ccall gsl_stats_long_double_pvariance , Ptr CLDouble -> CSize -> CSize -> Ptr CLDouble -> CSize -> CSize -> IO CDouble
+-- #ccall gsl_stats_long_double_ttest , Ptr CLDouble -> CSize -> CSize -> Ptr CLDouble -> CSize -> CSize -> IO CDouble
+-- #ccall gsl_stats_long_double_max , Ptr CLDouble -> CSize -> CSize -> IO CLDouble
+-- #ccall gsl_stats_long_double_min , Ptr CLDouble -> CSize -> CSize -> IO CLDouble
+-- #ccall gsl_stats_long_double_minmax , Ptr CLDouble -> Ptr CLDouble -> Ptr CLDouble -> CSize -> CSize -> IO ()
+-- #ccall gsl_stats_long_double_max_index , Ptr CLDouble -> CSize -> CSize -> IO CSize
+-- #ccall gsl_stats_long_double_min_index , Ptr CLDouble -> CSize -> CSize -> IO CSize
+-- #ccall gsl_stats_long_double_minmax_index , Ptr CSize -> Ptr CSize -> Ptr CLDouble -> CSize -> CSize -> IO ()
+-- #ccall gsl_stats_long_double_median_from_sorted_data , Ptr CLDouble -> CSize -> CSize -> IO CDouble
+-- #ccall gsl_stats_long_double_quantile_from_sorted_data , Ptr CLDouble -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_long_mean , Ptr CLong -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_long_variance , Ptr CLong -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_long_sd , Ptr CLong -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_long_variance_with_fixed_mean , Ptr CLong -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_long_sd_with_fixed_mean , Ptr CLong -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_long_tss , Ptr CLong -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_long_tss_m , Ptr CLong -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_long_absdev , Ptr CLong -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_long_skew , Ptr CLong -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_long_kurtosis , Ptr CLong -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_long_lag1_autocorrelation , Ptr CLong -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_long_covariance , Ptr CLong -> CSize -> Ptr CLong -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_long_correlation , Ptr CLong -> CSize -> Ptr CLong -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_long_variance_m , Ptr CLong -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_long_sd_m , Ptr CLong -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_long_absdev_m , Ptr CLong -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_long_skew_m_sd , Ptr CLong -> CSize -> CSize -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_stats_long_kurtosis_m_sd , Ptr CLong -> CSize -> CSize -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_stats_long_lag1_autocorrelation_m , Ptr CLong -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_long_covariance_m , Ptr CLong -> CSize -> Ptr CLong -> CSize -> CSize -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_stats_long_pvariance , Ptr CLong -> CSize -> CSize -> Ptr CLong -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_long_ttest , Ptr CLong -> CSize -> CSize -> Ptr CLong -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_long_max , Ptr CLong -> CSize -> CSize -> IO CLong
+#ccall gsl_stats_long_min , Ptr CLong -> CSize -> CSize -> IO CLong
+#ccall gsl_stats_long_minmax , Ptr CLong -> Ptr CLong -> Ptr CLong -> CSize -> CSize -> IO ()
+#ccall gsl_stats_long_max_index , Ptr CLong -> CSize -> CSize -> IO CSize
+#ccall gsl_stats_long_min_index , Ptr CLong -> CSize -> CSize -> IO CSize
+#ccall gsl_stats_long_minmax_index , Ptr CSize -> Ptr CSize -> Ptr CLong -> CSize -> CSize -> IO ()
+#ccall gsl_stats_long_median_from_sorted_data , Ptr CLong -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_long_quantile_from_sorted_data , Ptr CLong -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_short_mean , Ptr CShort -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_short_variance , Ptr CShort -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_short_sd , Ptr CShort -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_short_variance_with_fixed_mean , Ptr CShort -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_short_sd_with_fixed_mean , Ptr CShort -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_short_tss , Ptr CShort -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_short_tss_m , Ptr CShort -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_short_absdev , Ptr CShort -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_short_skew , Ptr CShort -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_short_kurtosis , Ptr CShort -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_short_lag1_autocorrelation , Ptr CShort -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_short_covariance , Ptr CShort -> CSize -> Ptr CShort -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_short_correlation , Ptr CShort -> CSize -> Ptr CShort -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_short_variance_m , Ptr CShort -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_short_sd_m , Ptr CShort -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_short_absdev_m , Ptr CShort -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_short_skew_m_sd , Ptr CShort -> CSize -> CSize -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_stats_short_kurtosis_m_sd , Ptr CShort -> CSize -> CSize -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_stats_short_lag1_autocorrelation_m , Ptr CShort -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_short_covariance_m , Ptr CShort -> CSize -> Ptr CShort -> CSize -> CSize -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_stats_short_pvariance , Ptr CShort -> CSize -> CSize -> Ptr CShort -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_short_ttest , Ptr CShort -> CSize -> CSize -> Ptr CShort -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_short_max , Ptr CShort -> CSize -> CSize -> IO CShort
+#ccall gsl_stats_short_min , Ptr CShort -> CSize -> CSize -> IO CShort
+#ccall gsl_stats_short_minmax , Ptr CShort -> Ptr CShort -> Ptr CShort -> CSize -> CSize -> IO ()
+#ccall gsl_stats_short_max_index , Ptr CShort -> CSize -> CSize -> IO CSize
+#ccall gsl_stats_short_min_index , Ptr CShort -> CSize -> CSize -> IO CSize
+#ccall gsl_stats_short_minmax_index , Ptr CSize -> Ptr CSize -> Ptr CShort -> CSize -> CSize -> IO ()
+#ccall gsl_stats_short_median_from_sorted_data , Ptr CShort -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_short_quantile_from_sorted_data , Ptr CShort -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_uchar_mean , Ptr CUChar -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_uchar_variance , Ptr CUChar -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_uchar_sd , Ptr CUChar -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_uchar_variance_with_fixed_mean , Ptr CUChar -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_uchar_sd_with_fixed_mean , Ptr CUChar -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_uchar_tss , Ptr CUChar -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_uchar_tss_m , Ptr CUChar -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_uchar_absdev , Ptr CUChar -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_uchar_skew , Ptr CUChar -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_uchar_kurtosis , Ptr CUChar -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_uchar_lag1_autocorrelation , Ptr CUChar -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_uchar_covariance , Ptr CUChar -> CSize -> Ptr CUChar -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_uchar_correlation , Ptr CUChar -> CSize -> Ptr CUChar -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_uchar_variance_m , Ptr CUChar -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_uchar_sd_m , Ptr CUChar -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_uchar_absdev_m , Ptr CUChar -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_uchar_skew_m_sd , Ptr CUChar -> CSize -> CSize -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_stats_uchar_kurtosis_m_sd , Ptr CUChar -> CSize -> CSize -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_stats_uchar_lag1_autocorrelation_m , Ptr CUChar -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_uchar_covariance_m , Ptr CUChar -> CSize -> Ptr CUChar -> CSize -> CSize -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_stats_uchar_pvariance , Ptr CUChar -> CSize -> CSize -> Ptr CUChar -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_uchar_ttest , Ptr CUChar -> CSize -> CSize -> Ptr CUChar -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_uchar_max , Ptr CUChar -> CSize -> CSize -> IO CUChar
+#ccall gsl_stats_uchar_min , Ptr CUChar -> CSize -> CSize -> IO CUChar
+#ccall gsl_stats_uchar_minmax , Ptr CUChar -> Ptr CUChar -> Ptr CUChar -> CSize -> CSize -> IO ()
+#ccall gsl_stats_uchar_max_index , Ptr CUChar -> CSize -> CSize -> IO CSize
+#ccall gsl_stats_uchar_min_index , Ptr CUChar -> CSize -> CSize -> IO CSize
+#ccall gsl_stats_uchar_minmax_index , Ptr CSize -> Ptr CSize -> Ptr CUChar -> CSize -> CSize -> IO ()
+#ccall gsl_stats_uchar_median_from_sorted_data , Ptr CUChar -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_uchar_quantile_from_sorted_data , Ptr CUChar -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_uint_mean , Ptr CUInt -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_uint_variance , Ptr CUInt -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_uint_sd , Ptr CUInt -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_uint_variance_with_fixed_mean , Ptr CUInt -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_uint_sd_with_fixed_mean , Ptr CUInt -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_uint_tss , Ptr CUInt -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_uint_tss_m , Ptr CUInt -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_uint_absdev , Ptr CUInt -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_uint_skew , Ptr CUInt -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_uint_kurtosis , Ptr CUInt -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_uint_lag1_autocorrelation , Ptr CUInt -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_uint_covariance , Ptr CUInt -> CSize -> Ptr CUInt -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_uint_correlation , Ptr CUInt -> CSize -> Ptr CUInt -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_uint_variance_m , Ptr CUInt -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_uint_sd_m , Ptr CUInt -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_uint_absdev_m , Ptr CUInt -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_uint_skew_m_sd , Ptr CUInt -> CSize -> CSize -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_stats_uint_kurtosis_m_sd , Ptr CUInt -> CSize -> CSize -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_stats_uint_lag1_autocorrelation_m , Ptr CUInt -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_uint_covariance_m , Ptr CUInt -> CSize -> Ptr CUInt -> CSize -> CSize -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_stats_uint_pvariance , Ptr CUInt -> CSize -> CSize -> Ptr CUInt -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_uint_ttest , Ptr CUInt -> CSize -> CSize -> Ptr CUInt -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_uint_max , Ptr CUInt -> CSize -> CSize -> IO CUInt
+#ccall gsl_stats_uint_min , Ptr CUInt -> CSize -> CSize -> IO CUInt
+#ccall gsl_stats_uint_minmax , Ptr CUInt -> Ptr CUInt -> Ptr CUInt -> CSize -> CSize -> IO ()
+#ccall gsl_stats_uint_max_index , Ptr CUInt -> CSize -> CSize -> IO CSize
+#ccall gsl_stats_uint_min_index , Ptr CUInt -> CSize -> CSize -> IO CSize
+#ccall gsl_stats_uint_minmax_index , Ptr CSize -> Ptr CSize -> Ptr CUInt -> CSize -> CSize -> IO ()
+#ccall gsl_stats_uint_median_from_sorted_data , Ptr CUInt -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_uint_quantile_from_sorted_data , Ptr CUInt -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_ulong_mean , Ptr CULong -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_ulong_variance , Ptr CULong -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_ulong_sd , Ptr CULong -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_ulong_variance_with_fixed_mean , Ptr CULong -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_ulong_sd_with_fixed_mean , Ptr CULong -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_ulong_tss , Ptr CULong -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_ulong_tss_m , Ptr CULong -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_ulong_absdev , Ptr CULong -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_ulong_skew , Ptr CULong -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_ulong_kurtosis , Ptr CULong -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_ulong_lag1_autocorrelation , Ptr CULong -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_ulong_covariance , Ptr CULong -> CSize -> Ptr CULong -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_ulong_correlation , Ptr CULong -> CSize -> Ptr CULong -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_ulong_variance_m , Ptr CULong -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_ulong_sd_m , Ptr CULong -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_ulong_absdev_m , Ptr CULong -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_ulong_skew_m_sd , Ptr CULong -> CSize -> CSize -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_stats_ulong_kurtosis_m_sd , Ptr CULong -> CSize -> CSize -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_stats_ulong_lag1_autocorrelation_m , Ptr CULong -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_ulong_covariance_m , Ptr CULong -> CSize -> Ptr CULong -> CSize -> CSize -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_stats_ulong_pvariance , Ptr CULong -> CSize -> CSize -> Ptr CULong -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_ulong_ttest , Ptr CULong -> CSize -> CSize -> Ptr CULong -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_ulong_max , Ptr CULong -> CSize -> CSize -> IO CULong
+#ccall gsl_stats_ulong_min , Ptr CULong -> CSize -> CSize -> IO CULong
+#ccall gsl_stats_ulong_minmax , Ptr CULong -> Ptr CULong -> Ptr CULong -> CSize -> CSize -> IO ()
+#ccall gsl_stats_ulong_max_index , Ptr CULong -> CSize -> CSize -> IO CSize
+#ccall gsl_stats_ulong_min_index , Ptr CULong -> CSize -> CSize -> IO CSize
+#ccall gsl_stats_ulong_minmax_index , Ptr CSize -> Ptr CSize -> Ptr CULong -> CSize -> CSize -> IO ()
+#ccall gsl_stats_ulong_median_from_sorted_data , Ptr CULong -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_ulong_quantile_from_sorted_data , Ptr CULong -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_ushort_mean , Ptr CUShort -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_ushort_variance , Ptr CUShort -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_ushort_sd , Ptr CUShort -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_ushort_variance_with_fixed_mean , Ptr CUShort -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_ushort_sd_with_fixed_mean , Ptr CUShort -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_ushort_tss , Ptr CUShort -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_ushort_tss_m , Ptr CUShort -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_ushort_absdev , Ptr CUShort -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_ushort_skew , Ptr CUShort -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_ushort_kurtosis , Ptr CUShort -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_ushort_lag1_autocorrelation , Ptr CUShort -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_ushort_covariance , Ptr CUShort -> CSize -> Ptr CUShort -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_ushort_correlation , Ptr CUShort -> CSize -> Ptr CUShort -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_ushort_variance_m , Ptr CUShort -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_ushort_sd_m , Ptr CUShort -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_ushort_absdev_m , Ptr CUShort -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_ushort_skew_m_sd , Ptr CUShort -> CSize -> CSize -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_stats_ushort_kurtosis_m_sd , Ptr CUShort -> CSize -> CSize -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_stats_ushort_lag1_autocorrelation_m , Ptr CUShort -> CSize -> CSize -> CDouble -> IO CDouble
+#ccall gsl_stats_ushort_covariance_m , Ptr CUShort -> CSize -> Ptr CUShort -> CSize -> CSize -> CDouble -> CDouble -> IO CDouble
+#ccall gsl_stats_ushort_pvariance , Ptr CUShort -> CSize -> CSize -> Ptr CUShort -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_ushort_ttest , Ptr CUShort -> CSize -> CSize -> Ptr CUShort -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_ushort_max , Ptr CUShort -> CSize -> CSize -> IO CUShort
+#ccall gsl_stats_ushort_min , Ptr CUShort -> CSize -> CSize -> IO CUShort
+#ccall gsl_stats_ushort_minmax , Ptr CUShort -> Ptr CUShort -> Ptr CUShort -> CSize -> CSize -> IO ()
+#ccall gsl_stats_ushort_max_index , Ptr CUShort -> CSize -> CSize -> IO CSize
+#ccall gsl_stats_ushort_min_index , Ptr CUShort -> CSize -> CSize -> IO CSize
+#ccall gsl_stats_ushort_minmax_index , Ptr CSize -> Ptr CSize -> Ptr CUShort -> CSize -> CSize -> IO ()
+#ccall gsl_stats_ushort_median_from_sorted_data , Ptr CUShort -> CSize -> CSize -> IO CDouble
+#ccall gsl_stats_ushort_quantile_from_sorted_data , Ptr CUShort -> CSize -> CSize -> CDouble -> IO CDouble
+
diff --git a/src/Bindings/Gsl/VectorsAndMatrices/Blocks.hsc b/src/Bindings/Gsl/VectorsAndMatrices/Blocks.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/VectorsAndMatrices/Blocks.hsc
@@ -0,0 +1,191 @@
+#include <bindings.dsl.h>
+#include <gsl/gsl_block.h>
+
+-- | <http://www.gnu.org/software/gsl/manual/html_node/Blocks.html>
+
+module Bindings.Gsl.VectorsAndMatrices.Blocks where
+#strict_import
+import Bindings.Gsl.VectorsAndMatrices.DataTypes
+
+#ccall gsl_block_alloc , CSize -> IO (Ptr <gsl_block>)
+#ccall gsl_block_calloc , CSize -> IO (Ptr <gsl_block>)
+#ccall gsl_block_char_alloc , CSize -> IO (Ptr <gsl_block_char>)
+#ccall gsl_block_char_calloc , CSize -> IO (Ptr <gsl_block_char>)
+#ccall gsl_block_char_data , Ptr <gsl_block_char> -> IO CString
+#ccall gsl_block_char_fprintf , Ptr CFile -> Ptr <gsl_block_char> -> CString -> IO CInt
+#ccall gsl_block_char_fread , Ptr CFile -> Ptr <gsl_block_char> -> IO CInt
+#ccall gsl_block_char_free , Ptr <gsl_block_char> -> IO ()
+#ccall gsl_block_char_fscanf , Ptr CFile -> Ptr <gsl_block_char> -> IO CInt
+#ccall gsl_block_char_fwrite , Ptr CFile -> Ptr <gsl_block_char> -> IO CInt
+#ccall gsl_block_char_raw_fprintf , Ptr CFile -> CString -> CSize -> CSize -> CString -> IO CInt
+#ccall gsl_block_char_raw_fread , Ptr CFile -> CString -> CSize -> CSize -> IO CInt
+#ccall gsl_block_char_raw_fscanf , Ptr CFile -> CString -> CSize -> CSize -> IO CInt
+#ccall gsl_block_char_raw_fwrite , Ptr CFile -> CString -> CSize -> CSize -> IO CInt
+#ccall gsl_block_char_size , Ptr <gsl_block_char> -> IO CSize
+#ccall gsl_block_complex_alloc , CSize -> IO (Ptr <gsl_block_complex>)
+#ccall gsl_block_complex_calloc , CSize -> IO (Ptr <gsl_block_complex>)
+#ccall gsl_block_complex_data , Ptr <gsl_block_complex> -> IO (Ptr CDouble)
+#ccall gsl_block_complex_float_alloc , CSize -> IO (Ptr <gsl_block_complex_float>)
+#ccall gsl_block_complex_float_calloc , CSize -> IO (Ptr <gsl_block_complex_float>)
+#ccall gsl_block_complex_float_data , Ptr <gsl_block_complex_float> -> IO (Ptr CFloat)
+#ccall gsl_block_complex_float_fprintf , Ptr CFile -> Ptr <gsl_block_complex_float> -> CString -> IO CInt
+#ccall gsl_block_complex_float_fread , Ptr CFile -> Ptr <gsl_block_complex_float> -> IO CInt
+#ccall gsl_block_complex_float_free , Ptr <gsl_block_complex_float> -> IO ()
+#ccall gsl_block_complex_float_fscanf , Ptr CFile -> Ptr <gsl_block_complex_float> -> IO CInt
+#ccall gsl_block_complex_float_fwrite , Ptr CFile -> Ptr <gsl_block_complex_float> -> IO CInt
+#ccall gsl_block_complex_float_raw_fprintf , Ptr CFile -> Ptr CFloat -> CSize -> CSize -> CString -> IO CInt
+#ccall gsl_block_complex_float_raw_fread , Ptr CFile -> Ptr CFloat -> CSize -> CSize -> IO CInt
+#ccall gsl_block_complex_float_raw_fscanf , Ptr CFile -> Ptr CFloat -> CSize -> CSize -> IO CInt
+#ccall gsl_block_complex_float_raw_fwrite , Ptr CFile -> Ptr CFloat -> CSize -> CSize -> IO CInt
+#ccall gsl_block_complex_float_size , Ptr <gsl_block_complex_float> -> IO CSize
+#ccall gsl_block_complex_fprintf , Ptr CFile -> Ptr <gsl_block_complex> -> CString -> IO CInt
+#ccall gsl_block_complex_fread , Ptr CFile -> Ptr <gsl_block_complex> -> IO CInt
+#ccall gsl_block_complex_free , Ptr <gsl_block_complex> -> IO ()
+#ccall gsl_block_complex_fscanf , Ptr CFile -> Ptr <gsl_block_complex> -> IO CInt
+#ccall gsl_block_complex_fwrite , Ptr CFile -> Ptr <gsl_block_complex> -> IO CInt
+-- #ccall gsl_block_complex_long_double_alloc , CSize -> IO (Ptr <gsl_block_complex_long_double>)
+-- #ccall gsl_block_complex_long_double_calloc , CSize -> IO (Ptr <gsl_block_complex_long_double>)
+-- #ccall gsl_block_complex_long_double_data , Ptr <gsl_block_complex_long_double> -> IO (Ptr CLDouble)
+-- #ccall gsl_block_complex_long_double_fprintf , Ptr CFile -> Ptr <gsl_block_complex_long_double> -> CString -> IO CInt
+-- #ccall gsl_block_complex_long_double_fread , Ptr CFile -> Ptr <gsl_block_complex_long_double> -> IO CInt
+-- #ccall gsl_block_complex_long_double_free , Ptr <gsl_block_complex_long_double> -> IO ()
+-- #ccall gsl_block_complex_long_double_fscanf , Ptr CFile -> Ptr <gsl_block_complex_long_double> -> IO CInt
+-- #ccall gsl_block_complex_long_double_fwrite , Ptr CFile -> Ptr <gsl_block_complex_long_double> -> IO CInt
+-- #ccall gsl_block_complex_long_double_raw_fprintf , Ptr CFile -> Ptr CLDouble -> CSize -> CSize -> CString -> IO CInt
+-- #ccall gsl_block_complex_long_double_raw_fread , Ptr CFile -> Ptr CLDouble -> CSize -> CSize -> IO CInt
+-- #ccall gsl_block_complex_long_double_raw_fscanf , Ptr CFile -> Ptr CLDouble -> CSize -> CSize -> IO CInt
+-- #ccall gsl_block_complex_long_double_raw_fwrite , Ptr CFile -> Ptr CLDouble -> CSize -> CSize -> IO CInt
+-- #ccall gsl_block_complex_long_double_size , Ptr <gsl_block_complex_long_double> -> IO CSize
+#ccall gsl_block_complex_raw_fprintf , Ptr CFile -> Ptr CDouble -> CSize -> CSize -> CString -> IO CInt
+#ccall gsl_block_complex_raw_fread , Ptr CFile -> Ptr CDouble -> CSize -> CSize -> IO CInt
+#ccall gsl_block_complex_raw_fscanf , Ptr CFile -> Ptr CDouble -> CSize -> CSize -> IO CInt
+#ccall gsl_block_complex_raw_fwrite , Ptr CFile -> Ptr CDouble -> CSize -> CSize -> IO CInt
+#ccall gsl_block_complex_size , Ptr <gsl_block_complex> -> IO CSize
+#ccall gsl_block_data , Ptr <gsl_block> -> IO (Ptr CDouble)
+#ccall gsl_block_float_alloc , CSize -> IO (Ptr <gsl_block_float>)
+#ccall gsl_block_float_calloc , CSize -> IO (Ptr <gsl_block_float>)
+#ccall gsl_block_float_data , Ptr <gsl_block_float> -> IO (Ptr CFloat)
+#ccall gsl_block_float_fprintf , Ptr CFile -> Ptr <gsl_block_float> -> CString -> IO CInt
+#ccall gsl_block_float_fread , Ptr CFile -> Ptr <gsl_block_float> -> IO CInt
+#ccall gsl_block_float_free , Ptr <gsl_block_float> -> IO ()
+#ccall gsl_block_float_fscanf , Ptr CFile -> Ptr <gsl_block_float> -> IO CInt
+#ccall gsl_block_float_fwrite , Ptr CFile -> Ptr <gsl_block_float> -> IO CInt
+#ccall gsl_block_float_raw_fprintf , Ptr CFile -> Ptr CFloat -> CSize -> CSize -> CString -> IO CInt
+#ccall gsl_block_float_raw_fread , Ptr CFile -> Ptr CFloat -> CSize -> CSize -> IO CInt
+#ccall gsl_block_float_raw_fscanf , Ptr CFile -> Ptr CFloat -> CSize -> CSize -> IO CInt
+#ccall gsl_block_float_raw_fwrite , Ptr CFile -> Ptr CFloat -> CSize -> CSize -> IO CInt
+#ccall gsl_block_float_size , Ptr <gsl_block_float> -> IO CSize
+#ccall gsl_block_fprintf , Ptr CFile -> Ptr <gsl_block> -> CString -> IO CInt
+#ccall gsl_block_fread , Ptr CFile -> Ptr <gsl_block> -> IO CInt
+#ccall gsl_block_free , Ptr <gsl_block> -> IO ()
+#ccall gsl_block_fscanf , Ptr CFile -> Ptr <gsl_block> -> IO CInt
+#ccall gsl_block_fwrite , Ptr CFile -> Ptr <gsl_block> -> IO CInt
+#ccall gsl_block_int_alloc , CSize -> IO (Ptr <gsl_block_int>)
+#ccall gsl_block_int_calloc , CSize -> IO (Ptr <gsl_block_int>)
+#ccall gsl_block_int_data , Ptr <gsl_block_int> -> IO (Ptr CInt)
+#ccall gsl_block_int_fprintf , Ptr CFile -> Ptr <gsl_block_int> -> CString -> IO CInt
+#ccall gsl_block_int_fread , Ptr CFile -> Ptr <gsl_block_int> -> IO CInt
+#ccall gsl_block_int_free , Ptr <gsl_block_int> -> IO ()
+#ccall gsl_block_int_fscanf , Ptr CFile -> Ptr <gsl_block_int> -> IO CInt
+#ccall gsl_block_int_fwrite , Ptr CFile -> Ptr <gsl_block_int> -> IO CInt
+#ccall gsl_block_int_raw_fprintf , Ptr CFile -> Ptr CInt -> CSize -> CSize -> CString -> IO CInt
+#ccall gsl_block_int_raw_fread , Ptr CFile -> Ptr CInt -> CSize -> CSize -> IO CInt
+#ccall gsl_block_int_raw_fscanf , Ptr CFile -> Ptr CInt -> CSize -> CSize -> IO CInt
+#ccall gsl_block_int_raw_fwrite , Ptr CFile -> Ptr CInt -> CSize -> CSize -> IO CInt
+#ccall gsl_block_int_size , Ptr <gsl_block_int> -> IO CSize
+#ccall gsl_block_long_alloc , CSize -> IO (Ptr <gsl_block_long>)
+#ccall gsl_block_long_calloc , CSize -> IO (Ptr <gsl_block_long>)
+#ccall gsl_block_long_data , Ptr <gsl_block_long> -> IO (Ptr CLong)
+-- #ccall gsl_block_long_double_alloc , CSize -> IO (Ptr <gsl_block_long_double>)
+-- #ccall gsl_block_long_double_calloc , CSize -> IO (Ptr <gsl_block_long_double>)
+-- #ccall gsl_block_long_double_data , Ptr <gsl_block_long_double> -> IO (Ptr CLDouble)
+-- #ccall gsl_block_long_double_fprintf , Ptr CFile -> Ptr <gsl_block_long_double> -> CString -> IO CInt
+-- #ccall gsl_block_long_double_fread , Ptr CFile -> Ptr <gsl_block_long_double> -> IO CInt
+-- #ccall gsl_block_long_double_free , Ptr <gsl_block_long_double> -> IO ()
+-- #ccall gsl_block_long_double_fscanf , Ptr CFile -> Ptr <gsl_block_long_double> -> IO CInt
+-- #ccall gsl_block_long_double_fwrite , Ptr CFile -> Ptr <gsl_block_long_double> -> IO CInt
+-- #ccall gsl_block_long_double_raw_fprintf , Ptr CFile -> Ptr CLDouble -> CSize -> CSize -> CString -> IO CInt
+-- #ccall gsl_block_long_double_raw_fread , Ptr CFile -> Ptr CLDouble -> CSize -> CSize -> IO CInt
+-- #ccall gsl_block_long_double_raw_fscanf , Ptr CFile -> Ptr CLDouble -> CSize -> CSize -> IO CInt
+-- #ccall gsl_block_long_double_raw_fwrite , Ptr CFile -> Ptr CLDouble -> CSize -> CSize -> IO CInt
+-- #ccall gsl_block_long_double_size , Ptr <gsl_block_long_double> -> IO CSize
+#ccall gsl_block_long_fprintf , Ptr CFile -> Ptr <gsl_block_long> -> CString -> IO CInt
+#ccall gsl_block_long_fread , Ptr CFile -> Ptr <gsl_block_long> -> IO CInt
+#ccall gsl_block_long_free , Ptr <gsl_block_long> -> IO ()
+#ccall gsl_block_long_fscanf , Ptr CFile -> Ptr <gsl_block_long> -> IO CInt
+#ccall gsl_block_long_fwrite , Ptr CFile -> Ptr <gsl_block_long> -> IO CInt
+#ccall gsl_block_long_raw_fprintf , Ptr CFile -> Ptr CLong -> CSize -> CSize -> CString -> IO CInt
+#ccall gsl_block_long_raw_fread , Ptr CFile -> Ptr CLong -> CSize -> CSize -> IO CInt
+#ccall gsl_block_long_raw_fscanf , Ptr CFile -> Ptr CLong -> CSize -> CSize -> IO CInt
+#ccall gsl_block_long_raw_fwrite , Ptr CFile -> Ptr CLong -> CSize -> CSize -> IO CInt
+#ccall gsl_block_long_size , Ptr <gsl_block_long> -> IO CSize
+#ccall gsl_block_raw_fprintf , Ptr CFile -> Ptr CDouble -> CSize -> CSize -> CString -> IO CInt
+#ccall gsl_block_raw_fread , Ptr CFile -> Ptr CDouble -> CSize -> CSize -> IO CInt
+#ccall gsl_block_raw_fscanf , Ptr CFile -> Ptr CDouble -> CSize -> CSize -> IO CInt
+#ccall gsl_block_raw_fwrite , Ptr CFile -> Ptr CDouble -> CSize -> CSize -> IO CInt
+#ccall gsl_block_short_alloc , CSize -> IO (Ptr <gsl_block_short>)
+#ccall gsl_block_short_calloc , CSize -> IO (Ptr <gsl_block_short>)
+#ccall gsl_block_short_data , Ptr <gsl_block_short> -> IO (Ptr CShort)
+#ccall gsl_block_short_fprintf , Ptr CFile -> Ptr <gsl_block_short> -> CString -> IO CInt
+#ccall gsl_block_short_fread , Ptr CFile -> Ptr <gsl_block_short> -> IO CInt
+#ccall gsl_block_short_free , Ptr <gsl_block_short> -> IO ()
+#ccall gsl_block_short_fscanf , Ptr CFile -> Ptr <gsl_block_short> -> IO CInt
+#ccall gsl_block_short_fwrite , Ptr CFile -> Ptr <gsl_block_short> -> IO CInt
+#ccall gsl_block_short_raw_fprintf , Ptr CFile -> Ptr CShort -> CSize -> CSize -> CString -> IO CInt
+#ccall gsl_block_short_raw_fread , Ptr CFile -> Ptr CShort -> CSize -> CSize -> IO CInt
+#ccall gsl_block_short_raw_fscanf , Ptr CFile -> Ptr CShort -> CSize -> CSize -> IO CInt
+#ccall gsl_block_short_raw_fwrite , Ptr CFile -> Ptr CShort -> CSize -> CSize -> IO CInt
+#ccall gsl_block_short_size , Ptr <gsl_block_short> -> IO CSize
+#ccall gsl_block_size , Ptr <gsl_block> -> IO CSize
+#ccall gsl_block_uchar_alloc , CSize -> IO (Ptr <gsl_block_uchar>)
+#ccall gsl_block_uchar_calloc , CSize -> IO (Ptr <gsl_block_uchar>)
+#ccall gsl_block_uchar_data , Ptr <gsl_block_uchar> -> IO (Ptr CUChar)
+#ccall gsl_block_uchar_fprintf , Ptr CFile -> Ptr <gsl_block_uchar> -> CString -> IO CInt
+#ccall gsl_block_uchar_fread , Ptr CFile -> Ptr <gsl_block_uchar> -> IO CInt
+#ccall gsl_block_uchar_free , Ptr <gsl_block_uchar> -> IO ()
+#ccall gsl_block_uchar_fscanf , Ptr CFile -> Ptr <gsl_block_uchar> -> IO CInt
+#ccall gsl_block_uchar_fwrite , Ptr CFile -> Ptr <gsl_block_uchar> -> IO CInt
+#ccall gsl_block_uchar_raw_fprintf , Ptr CFile -> Ptr CUChar -> CSize -> CSize -> CString -> IO CInt
+#ccall gsl_block_uchar_raw_fread , Ptr CFile -> Ptr CUChar -> CSize -> CSize -> IO CInt
+#ccall gsl_block_uchar_raw_fscanf , Ptr CFile -> Ptr CUChar -> CSize -> CSize -> IO CInt
+#ccall gsl_block_uchar_raw_fwrite , Ptr CFile -> Ptr CUChar -> CSize -> CSize -> IO CInt
+#ccall gsl_block_uchar_size , Ptr <gsl_block_uchar> -> IO CSize
+#ccall gsl_block_uint_alloc , CSize -> IO (Ptr <gsl_block_uint>)
+#ccall gsl_block_uint_calloc , CSize -> IO (Ptr <gsl_block_uint>)
+#ccall gsl_block_uint_data , Ptr <gsl_block_uint> -> IO (Ptr CUInt)
+#ccall gsl_block_uint_fprintf , Ptr CFile -> Ptr <gsl_block_uint> -> CString -> IO CInt
+#ccall gsl_block_uint_fread , Ptr CFile -> Ptr <gsl_block_uint> -> IO CInt
+#ccall gsl_block_uint_free , Ptr <gsl_block_uint> -> IO ()
+#ccall gsl_block_uint_fscanf , Ptr CFile -> Ptr <gsl_block_uint> -> IO CInt
+#ccall gsl_block_uint_fwrite , Ptr CFile -> Ptr <gsl_block_uint> -> IO CInt
+#ccall gsl_block_uint_raw_fprintf , Ptr CFile -> Ptr CUInt -> CSize -> CSize -> CString -> IO CInt
+#ccall gsl_block_uint_raw_fread , Ptr CFile -> Ptr CUInt -> CSize -> CSize -> IO CInt
+#ccall gsl_block_uint_raw_fscanf , Ptr CFile -> Ptr CUInt -> CSize -> CSize -> IO CInt
+#ccall gsl_block_uint_raw_fwrite , Ptr CFile -> Ptr CUInt -> CSize -> CSize -> IO CInt
+#ccall gsl_block_uint_size , Ptr <gsl_block_uint> -> IO CSize
+#ccall gsl_block_ulong_alloc , CSize -> IO (Ptr <gsl_block_ulong>)
+#ccall gsl_block_ulong_calloc , CSize -> IO (Ptr <gsl_block_ulong>)
+#ccall gsl_block_ulong_data , Ptr <gsl_block_ulong> -> IO (Ptr CULong)
+#ccall gsl_block_ulong_fprintf , Ptr CFile -> Ptr <gsl_block_ulong> -> CString -> IO CInt
+#ccall gsl_block_ulong_fread , Ptr CFile -> Ptr <gsl_block_ulong> -> IO CInt
+#ccall gsl_block_ulong_free , Ptr <gsl_block_ulong> -> IO ()
+#ccall gsl_block_ulong_fscanf , Ptr CFile -> Ptr <gsl_block_ulong> -> IO CInt
+#ccall gsl_block_ulong_fwrite , Ptr CFile -> Ptr <gsl_block_ulong> -> IO CInt
+#ccall gsl_block_ulong_raw_fprintf , Ptr CFile -> Ptr CULong -> CSize -> CSize -> CString -> IO CInt
+#ccall gsl_block_ulong_raw_fread , Ptr CFile -> Ptr CULong -> CSize -> CSize -> IO CInt
+#ccall gsl_block_ulong_raw_fscanf , Ptr CFile -> Ptr CULong -> CSize -> CSize -> IO CInt
+#ccall gsl_block_ulong_raw_fwrite , Ptr CFile -> Ptr CULong -> CSize -> CSize -> IO CInt
+#ccall gsl_block_ulong_size , Ptr <gsl_block_ulong> -> IO CSize
+#ccall gsl_block_ushort_alloc , CSize -> IO (Ptr <gsl_block_ushort>)
+#ccall gsl_block_ushort_calloc , CSize -> IO (Ptr <gsl_block_ushort>)
+#ccall gsl_block_ushort_data , Ptr <gsl_block_ushort> -> IO (Ptr CUShort)
+#ccall gsl_block_ushort_fprintf , Ptr CFile -> Ptr <gsl_block_ushort> -> CString -> IO CInt
+#ccall gsl_block_ushort_fread , Ptr CFile -> Ptr <gsl_block_ushort> -> IO CInt
+#ccall gsl_block_ushort_free , Ptr <gsl_block_ushort> -> IO ()
+#ccall gsl_block_ushort_fscanf , Ptr CFile -> Ptr <gsl_block_ushort> -> IO CInt
+#ccall gsl_block_ushort_fwrite , Ptr CFile -> Ptr <gsl_block_ushort> -> IO CInt
+#ccall gsl_block_ushort_raw_fprintf , Ptr CFile -> Ptr CUShort -> CSize -> CSize -> CString -> IO CInt
+#ccall gsl_block_ushort_raw_fread , Ptr CFile -> Ptr CUShort -> CSize -> CSize -> IO CInt
+#ccall gsl_block_ushort_raw_fscanf , Ptr CFile -> Ptr CUShort -> CSize -> CSize -> IO CInt
+#ccall gsl_block_ushort_raw_fwrite , Ptr CFile -> Ptr CUShort -> CSize -> CSize -> IO CInt
+#ccall gsl_block_ushort_size , Ptr <gsl_block_ushort> -> IO CSize
diff --git a/src/Bindings/Gsl/VectorsAndMatrices/DataTypes.hsc b/src/Bindings/Gsl/VectorsAndMatrices/DataTypes.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/VectorsAndMatrices/DataTypes.hsc
@@ -0,0 +1,542 @@
+#include <bindings.dsl.h>
+#include <gsl/gsl_block.h>
+#include <gsl/gsl_vector.h>
+#include <gsl/gsl_matrix.h>
+
+-- | <http://www.gnu.org/software/gsl/manual/html_node/Data-types.html>
+
+module Bindings.Gsl.VectorsAndMatrices.DataTypes where
+#strict_import
+
+#starttype gsl_block
+#field size , CSize
+#field data , Ptr CDouble
+#stoptype
+
+#starttype gsl_block_char
+#field size , CSize
+#field data , CString
+#stoptype
+
+#starttype gsl_block_complex
+#field size , CSize
+#field data , Ptr CDouble
+#stoptype
+
+#starttype gsl_block_complex_float
+#field size , CSize
+#field data , Ptr CFloat
+#stoptype
+
+-- #starttype gsl_block_complex_long_double
+-- #field size , CSize
+-- #field data , Ptr CLDouble
+-- #stoptype
+
+#starttype gsl_block_float
+#field size , CSize
+#field data , Ptr CFloat
+#stoptype
+
+#starttype gsl_block_int
+#field size , CSize
+#field data , Ptr CInt
+#stoptype
+
+#starttype gsl_block_long
+#field size , CSize
+#field data , Ptr CLong
+#stoptype
+
+-- #starttype gsl_block_long_double
+-- #field size , CSize
+-- #field data , Ptr CLDouble
+-- #stoptype
+
+#starttype gsl_block_short
+#field size , CSize
+#field data , Ptr CShort
+#stoptype
+
+#starttype gsl_block_uchar
+#field size , CSize
+#field data , Ptr CUChar
+#stoptype
+
+#starttype gsl_block_uint
+#field size , CSize
+#field data , Ptr CUInt
+#stoptype
+
+#starttype gsl_block_ulong
+#field size , CSize
+#field data , Ptr CULong
+#stoptype
+
+#starttype gsl_block_ushort
+#field size , CSize
+#field data , Ptr CUShort
+#stoptype
+
+#starttype gsl_matrix
+#field size1 , CSize
+#field size2 , CSize
+#field tda , CSize
+#field data , Ptr CDouble
+#field block , Ptr <gsl_block>
+#field owner , CInt
+#stoptype
+
+#starttype gsl_matrix_char
+#field size1 , CSize
+#field size2 , CSize
+#field tda , CSize
+#field data , CString
+#field block , Ptr <gsl_block_char>
+#field owner , CInt
+#stoptype
+
+#starttype gsl_matrix_char_const_view
+#field matrix , <gsl_matrix_char>
+#stoptype
+
+#starttype gsl_matrix_char_view
+#field matrix , <gsl_matrix_char>
+#stoptype
+
+#starttype gsl_matrix_complex
+#field size1 , CSize
+#field size2 , CSize
+#field tda , CSize
+#field data , Ptr CDouble
+#field block , Ptr <gsl_block_complex>
+#field owner , CInt
+#stoptype
+
+#starttype gsl_matrix_complex_const_view
+#field matrix , <gsl_matrix_complex>
+#stoptype
+
+#starttype gsl_matrix_complex_float
+#field size1 , CSize
+#field size2 , CSize
+#field tda , CSize
+#field data , Ptr CFloat
+#field block , Ptr <gsl_block_complex_float>
+#field owner , CInt
+#stoptype
+
+#starttype gsl_matrix_complex_float_const_view
+#field matrix , <gsl_matrix_complex_float>
+#stoptype
+
+#starttype gsl_matrix_complex_float_view
+#field matrix , <gsl_matrix_complex_float>
+#stoptype
+
+-- #starttype gsl_matrix_complex_long_double
+-- #field size1 , CSize
+-- #field size2 , CSize
+-- #field tda , CSize
+-- #field data , Ptr CLDouble
+-- #field block , Ptr <gsl_block_complex_long_double>
+-- #field owner , CInt
+-- #stoptype
+
+-- #starttype gsl_matrix_complex_long_double_const_view
+-- #field matrix , <gsl_matrix_complex_long_double>
+-- #stoptype
+
+-- #starttype gsl_matrix_complex_long_double_view
+-- #field matrix , <gsl_matrix_complex_long_double>
+-- #stoptype
+
+#starttype gsl_matrix_complex_view
+#field matrix , <gsl_matrix_complex>
+#stoptype
+
+#starttype gsl_matrix_const_view
+#field matrix , <gsl_matrix>
+#stoptype
+
+#starttype gsl_matrix_float
+#field size1 , CSize
+#field size2 , CSize
+#field tda , CSize
+#field data , Ptr CFloat
+#field block , Ptr <gsl_block_float>
+#field owner , CInt
+#stoptype
+
+#starttype gsl_matrix_float_const_view
+#field matrix , <gsl_matrix_float>
+#stoptype
+
+#starttype gsl_matrix_float_view
+#field matrix , <gsl_matrix_float>
+#stoptype
+
+#starttype gsl_matrix_int
+#field size1 , CSize
+#field size2 , CSize
+#field tda , CSize
+#field data , Ptr CInt
+#field block , Ptr <gsl_block_int>
+#field owner , CInt
+#stoptype
+
+#starttype gsl_matrix_int_const_view
+#field matrix , <gsl_matrix_int>
+#stoptype
+
+#starttype gsl_matrix_int_view
+#field matrix , <gsl_matrix_int>
+#stoptype
+
+#starttype gsl_matrix_long
+#field size1 , CSize
+#field size2 , CSize
+#field tda , CSize
+#field data , Ptr CLong
+#field block , Ptr <gsl_block_long>
+#field owner , CInt
+#stoptype
+
+#starttype gsl_matrix_long_const_view
+#field matrix , <gsl_matrix_long>
+#stoptype
+
+-- #starttype gsl_matrix_long_double
+-- #field size1 , CSize
+-- #field size2 , CSize
+-- #field tda , CSize
+-- #field data , Ptr CLDouble
+-- #field block , Ptr <gsl_block_long_double>
+-- #field owner , CInt
+-- #stoptype
+
+-- #starttype gsl_matrix_long_double_const_view
+-- #field matrix , <gsl_matrix_long_double>
+-- #stoptype
+
+-- #starttype gsl_matrix_long_double_view
+-- #field matrix , <gsl_matrix_long_double>
+-- #stoptype
+
+#starttype gsl_matrix_long_view
+#field matrix , <gsl_matrix_long>
+#stoptype
+
+#starttype gsl_matrix_short
+#field size1 , CSize
+#field size2 , CSize
+#field tda , CSize
+#field data , Ptr CShort
+#field block , Ptr <gsl_block_short>
+#field owner , CInt
+#stoptype
+
+#starttype gsl_matrix_short_const_view
+#field matrix , <gsl_matrix_short>
+#stoptype
+
+#starttype gsl_matrix_short_view
+#field matrix , <gsl_matrix_short>
+#stoptype
+
+#starttype gsl_matrix_uchar
+#field size1 , CSize
+#field size2 , CSize
+#field tda , CSize
+#field data , Ptr CUChar
+#field block , Ptr <gsl_block_uchar>
+#field owner , CInt
+#stoptype
+
+#starttype gsl_matrix_uchar_const_view
+#field matrix , <gsl_matrix_uchar>
+#stoptype
+
+#starttype gsl_matrix_uchar_view
+#field matrix , <gsl_matrix_uchar>
+#stoptype
+
+#starttype gsl_matrix_uint
+#field size1 , CSize
+#field size2 , CSize
+#field tda , CSize
+#field data , Ptr CUInt
+#field block , Ptr <gsl_block_uint>
+#field owner , CInt
+#stoptype
+
+#starttype gsl_matrix_uint_const_view
+#field matrix , <gsl_matrix_uint>
+#stoptype
+
+#starttype gsl_matrix_uint_view
+#field matrix , <gsl_matrix_uint>
+#stoptype
+
+#starttype gsl_matrix_ulong
+#field size1 , CSize
+#field size2 , CSize
+#field tda , CSize
+#field data , Ptr CULong
+#field block , Ptr <gsl_block_ulong>
+#field owner , CInt
+#stoptype
+
+#starttype gsl_matrix_ulong_const_view
+#field matrix , <gsl_matrix_ulong>
+#stoptype
+
+#starttype gsl_matrix_ulong_view
+#field matrix , <gsl_matrix_ulong>
+#stoptype
+
+#starttype gsl_matrix_ushort
+#field size1 , CSize
+#field size2 , CSize
+#field tda , CSize
+#field data , Ptr CUShort
+#field block , Ptr <gsl_block_ushort>
+#field owner , CInt
+#stoptype
+
+#starttype gsl_matrix_ushort_const_view
+#field matrix , <gsl_matrix_ushort>
+#stoptype
+
+#starttype gsl_matrix_ushort_view
+#field matrix , <gsl_matrix_ushort>
+#stoptype
+
+#starttype gsl_matrix_view
+#field matrix , <gsl_matrix>
+#stoptype
+
+#starttype gsl_vector
+#field size , CSize
+#field stride , CSize
+#field data , Ptr CDouble
+#field block , Ptr <gsl_block>
+#field owner , CInt
+#stoptype
+
+#starttype gsl_vector_char
+#field size , CSize
+#field stride , CSize
+#field data , CString
+#field block , Ptr <gsl_block_char>
+#field owner , CInt
+#stoptype
+
+#starttype gsl_vector_char_const_view
+#field vector , <gsl_vector_char>
+#stoptype
+
+#starttype gsl_vector_char_view
+#field vector , <gsl_vector_char>
+#stoptype
+
+#starttype gsl_vector_complex
+#field size , CSize
+#field stride , CSize
+#field data , Ptr CDouble
+#field block , Ptr <gsl_block_complex>
+#field owner , CInt
+#stoptype
+
+#starttype gsl_vector_complex_const_view
+#field vector , <gsl_vector_complex>
+#stoptype
+
+#starttype gsl_vector_complex_float
+#field size , CSize
+#field stride , CSize
+#field data , Ptr CFloat
+#field block , Ptr <gsl_block_complex_float>
+#field owner , CInt
+#stoptype
+
+#starttype gsl_vector_complex_float_const_view
+#field vector , <gsl_vector_complex_float>
+#stoptype
+
+#starttype gsl_vector_complex_float_view
+#field vector , <gsl_vector_complex_float>
+#stoptype
+
+-- #starttype gsl_vector_complex_long_double
+-- #field size , CSize
+-- #field stride , CSize
+-- #field data , Ptr CLDouble
+-- #field block , Ptr <gsl_block_complex_long_double>
+-- #field owner , CInt
+-- #stoptype
+
+-- #starttype gsl_vector_complex_long_double_const_view
+-- #field vector , <gsl_vector_complex_long_double>
+-- #stoptype
+
+-- #starttype gsl_vector_complex_long_double_view
+-- #field vector , <gsl_vector_complex_long_double>
+-- #stoptype
+
+#starttype gsl_vector_complex_view
+#field vector , <gsl_vector_complex>
+#stoptype
+
+#starttype gsl_vector_const_view
+#field vector , <gsl_vector>
+#stoptype
+
+#starttype gsl_vector_float
+#field size , CSize
+#field stride , CSize
+#field data , Ptr CFloat
+#field block , Ptr <gsl_block_float>
+#field owner , CInt
+#stoptype
+
+#starttype gsl_vector_float_const_view
+#field vector , <gsl_vector_float>
+#stoptype
+
+#starttype gsl_vector_float_view
+#field vector , <gsl_vector_float>
+#stoptype
+
+#starttype gsl_vector_int
+#field size , CSize
+#field stride , CSize
+#field data , Ptr CInt
+#field block , Ptr <gsl_block_int>
+#field owner , CInt
+#stoptype
+
+#starttype gsl_vector_int_const_view
+#field vector , <gsl_vector_int>
+#stoptype
+
+#starttype gsl_vector_int_view
+#field vector , <gsl_vector_int>
+#stoptype
+
+#starttype gsl_vector_long
+#field size , CSize
+#field stride , CSize
+#field data , Ptr CLong
+#field block , Ptr <gsl_block_long>
+#field owner , CInt
+#stoptype
+
+#starttype gsl_vector_long_const_view
+#field vector , <gsl_vector_long>
+#stoptype
+
+-- #starttype gsl_vector_long_double
+-- #field size , CSize
+-- #field stride , CSize
+-- #field data , Ptr CLDouble
+-- #field block , Ptr <gsl_block_long_double>
+-- #field owner , CInt
+-- #stoptype
+
+-- #starttype gsl_vector_long_double_const_view
+-- #field vector , <gsl_vector_long_double>
+-- #stoptype
+
+-- #starttype gsl_vector_long_double_view
+-- #field vector , <gsl_vector_long_double>
+-- #stoptype
+
+#starttype gsl_vector_long_view
+#field vector , <gsl_vector_long>
+#stoptype
+
+#starttype gsl_vector_short
+#field size , CSize
+#field stride , CSize
+#field data , Ptr CShort
+#field block , Ptr <gsl_block_short>
+#field owner , CInt
+#stoptype
+
+#starttype gsl_vector_short_const_view
+#field vector , <gsl_vector_short>
+#stoptype
+
+#starttype gsl_vector_short_view
+#field vector , <gsl_vector_short>
+#stoptype
+
+#starttype gsl_vector_uchar
+#field size , CSize
+#field stride , CSize
+#field data , Ptr CUChar
+#field block , Ptr <gsl_block_uchar>
+#field owner , CInt
+#stoptype
+
+#starttype gsl_vector_uchar_const_view
+#field vector , <gsl_vector_uchar>
+#stoptype
+
+#starttype gsl_vector_uchar_view
+#field vector , <gsl_vector_uchar>
+#stoptype
+
+#starttype gsl_vector_uint
+#field size , CSize
+#field stride , CSize
+#field data , Ptr CUInt
+#field block , Ptr <gsl_block_uint>
+#field owner , CInt
+#stoptype
+
+#starttype gsl_vector_uint_const_view
+#field vector , <gsl_vector_uint>
+#stoptype
+
+#starttype gsl_vector_uint_view
+#field vector , <gsl_vector_uint>
+#stoptype
+
+#starttype gsl_vector_ulong
+#field size , CSize
+#field stride , CSize
+#field data , Ptr CULong
+#field block , Ptr <gsl_block_ulong>
+#field owner , CInt
+#stoptype
+
+#starttype gsl_vector_ulong_const_view
+#field vector , <gsl_vector_ulong>
+#stoptype
+
+#starttype gsl_vector_ulong_view
+#field vector , <gsl_vector_ulong>
+#stoptype
+
+#starttype gsl_vector_ushort
+#field size , CSize
+#field stride , CSize
+#field data , Ptr CUShort
+#field block , Ptr <gsl_block_ushort>
+#field owner , CInt
+#stoptype
+
+#starttype gsl_vector_ushort_const_view
+#field vector , <gsl_vector_ushort>
+#stoptype
+
+#starttype gsl_vector_ushort_view
+#field vector , <gsl_vector_ushort>
+#stoptype
+
+#starttype gsl_vector_view
+#field vector , <gsl_vector>
+#stoptype
+
diff --git a/src/Bindings/Gsl/VectorsAndMatrices/Matrices.hsc b/src/Bindings/Gsl/VectorsAndMatrices/Matrices.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/VectorsAndMatrices/Matrices.hsc
@@ -0,0 +1,833 @@
+#include <bindings.dsl.h>
+#include <gsl/gsl_matrix.h>
+
+-- | <http://www.gnu.org/software/gsl/manual/html_node/Matrices.html>
+
+module Bindings.Gsl.VectorsAndMatrices.Matrices where
+#strict_import
+import Bindings.Gsl.VectorsAndMatrices.DataTypes
+import Bindings.Gsl.ComplexNumbers
+
+#ccall gsl_matrix_add , Ptr <gsl_matrix> -> Ptr <gsl_matrix> -> IO CInt
+#ccall gsl_matrix_add_constant , Ptr <gsl_matrix> -> CDouble -> IO CInt
+#ccall gsl_matrix_add_diagonal , Ptr <gsl_matrix> -> CDouble -> IO CInt
+#ccall gsl_matrix_alloc , CSize -> CSize -> IO (Ptr <gsl_matrix>)
+#ccall gsl_matrix_alloc_from_block , Ptr <gsl_block> -> CSize -> CSize -> CSize -> CSize -> IO (Ptr <gsl_matrix>)
+#ccall gsl_matrix_alloc_from_matrix , Ptr <gsl_matrix> -> CSize -> CSize -> CSize -> CSize -> IO (Ptr <gsl_matrix>)
+#ccall gsl_matrix_calloc , CSize -> CSize -> IO (Ptr <gsl_matrix>)
+#ccall gsl_matrix_char_add , Ptr <gsl_matrix_char> -> Ptr <gsl_matrix_char> -> IO CInt
+#ccall gsl_matrix_char_add_constant , Ptr <gsl_matrix_char> -> CDouble -> IO CInt
+#ccall gsl_matrix_char_add_diagonal , Ptr <gsl_matrix_char> -> CDouble -> IO CInt
+#ccall gsl_matrix_char_alloc , CSize -> CSize -> IO (Ptr <gsl_matrix_char>)
+#ccall gsl_matrix_char_alloc_from_block , Ptr <gsl_block_char> -> CSize -> CSize -> CSize -> CSize -> IO (Ptr <gsl_matrix_char>)
+#ccall gsl_matrix_char_alloc_from_matrix , Ptr <gsl_matrix_char> -> CSize -> CSize -> CSize -> CSize -> IO (Ptr <gsl_matrix_char>)
+#ccall gsl_matrix_char_calloc , CSize -> CSize -> IO (Ptr <gsl_matrix_char>)
+-- ccall gsl_matrix_char_column , Ptr <gsl_matrix_char> -> CSize -> IO <gsl_vector_char_view>
+-- ccall gsl_matrix_char_const_column , Ptr <gsl_matrix_char> -> CSize -> IO <gsl_vector_char_const_view>
+-- ccall gsl_matrix_char_const_diagonal , Ptr <gsl_matrix_char> -> IO <gsl_vector_char_const_view>
+-- ccall gsl_matrix_char_const_row , Ptr <gsl_matrix_char> -> CSize -> IO <gsl_vector_char_const_view>
+-- ccall gsl_matrix_char_const_subcolumn , Ptr <gsl_matrix_char> -> CSize -> CSize -> CSize -> IO <gsl_vector_char_const_view>
+-- ccall gsl_matrix_char_const_subdiagonal , Ptr <gsl_matrix_char> -> CSize -> IO <gsl_vector_char_const_view>
+-- ccall gsl_matrix_char_const_submatrix , Ptr <gsl_matrix_char> -> CSize -> CSize -> CSize -> CSize -> IO <gsl_matrix_char_const_view>
+-- ccall gsl_matrix_char_const_subrow , Ptr <gsl_matrix_char> -> CSize -> CSize -> CSize -> IO <gsl_vector_char_const_view>
+-- ccall gsl_matrix_char_const_superdiagonal , Ptr <gsl_matrix_char> -> CSize -> IO <gsl_vector_char_const_view>
+-- ccall gsl_matrix_char_const_view_array , CString -> CSize -> CSize -> IO <gsl_matrix_char_const_view>
+-- ccall gsl_matrix_char_const_view_array_with_tda , CString -> CSize -> CSize -> CSize -> IO <gsl_matrix_char_const_view>
+-- ccall gsl_matrix_char_const_view_vector , Ptr <gsl_vector_char> -> CSize -> CSize -> IO <gsl_matrix_char_const_view>
+-- ccall gsl_matrix_char_const_view_vector_with_tda , Ptr <gsl_vector_char> -> CSize -> CSize -> CSize -> IO <gsl_matrix_char_const_view>
+-- ccall gsl_matrix_char_diagonal , Ptr <gsl_matrix_char> -> IO <gsl_vector_char_view>
+#ccall gsl_matrix_char_div_elements , Ptr <gsl_matrix_char> -> Ptr <gsl_matrix_char> -> IO CInt
+#ccall gsl_matrix_char_fprintf , Ptr CFile -> Ptr <gsl_matrix_char> -> CString -> IO CInt
+#ccall gsl_matrix_char_fread , Ptr CFile -> Ptr <gsl_matrix_char> -> IO CInt
+#ccall gsl_matrix_char_free , Ptr <gsl_matrix_char> -> IO ()
+#ccall gsl_matrix_char_fscanf , Ptr CFile -> Ptr <gsl_matrix_char> -> IO CInt
+#ccall gsl_matrix_char_fwrite , Ptr CFile -> Ptr <gsl_matrix_char> -> IO CInt
+#ccall gsl_matrix_char_isneg , Ptr <gsl_matrix_char> -> IO CInt
+#ccall gsl_matrix_char_isnonneg , Ptr <gsl_matrix_char> -> IO CInt
+#ccall gsl_matrix_char_isnull , Ptr <gsl_matrix_char> -> IO CInt
+#ccall gsl_matrix_char_ispos , Ptr <gsl_matrix_char> -> IO CInt
+#ccall gsl_matrix_char_max , Ptr <gsl_matrix_char> -> IO CChar
+#ccall gsl_matrix_char_max_index , Ptr <gsl_matrix_char> -> Ptr CSize -> Ptr CSize -> IO ()
+#ccall gsl_matrix_char_memcpy , Ptr <gsl_matrix_char> -> Ptr <gsl_matrix_char> -> IO CInt
+#ccall gsl_matrix_char_min , Ptr <gsl_matrix_char> -> IO CChar
+#ccall gsl_matrix_char_min_index , Ptr <gsl_matrix_char> -> Ptr CSize -> Ptr CSize -> IO ()
+#ccall gsl_matrix_char_minmax , Ptr <gsl_matrix_char> -> CString -> CString -> IO ()
+#ccall gsl_matrix_char_minmax_index , Ptr <gsl_matrix_char> -> Ptr CSize -> Ptr CSize -> Ptr CSize -> Ptr CSize -> IO ()
+#ccall gsl_matrix_char_mul_elements , Ptr <gsl_matrix_char> -> Ptr <gsl_matrix_char> -> IO CInt
+-- ccall gsl_matrix_char_row , Ptr <gsl_matrix_char> -> CSize -> IO <gsl_vector_char_view>
+#ccall gsl_matrix_char_scale , Ptr <gsl_matrix_char> -> CDouble -> IO CInt
+#ccall gsl_matrix_char_set_all , Ptr <gsl_matrix_char> -> CChar -> IO ()
+#ccall gsl_matrix_char_set_identity , Ptr <gsl_matrix_char> -> IO ()
+#ccall gsl_matrix_char_set_zero , Ptr <gsl_matrix_char> -> IO ()
+#ccall gsl_matrix_char_sub , Ptr <gsl_matrix_char> -> Ptr <gsl_matrix_char> -> IO CInt
+-- ccall gsl_matrix_char_subcolumn , Ptr <gsl_matrix_char> -> CSize -> CSize -> CSize -> IO <gsl_vector_char_view>
+-- ccall gsl_matrix_char_subdiagonal , Ptr <gsl_matrix_char> -> CSize -> IO <gsl_vector_char_view>
+-- ccall gsl_matrix_char_submatrix , Ptr <gsl_matrix_char> -> CSize -> CSize -> CSize -> CSize -> IO <gsl_matrix_char_view>
+-- ccall gsl_matrix_char_subrow , Ptr <gsl_matrix_char> -> CSize -> CSize -> CSize -> IO <gsl_vector_char_view>
+-- ccall gsl_matrix_char_superdiagonal , Ptr <gsl_matrix_char> -> CSize -> IO <gsl_vector_char_view>
+#ccall gsl_matrix_char_swap , Ptr <gsl_matrix_char> -> Ptr <gsl_matrix_char> -> IO CInt
+#ccall gsl_matrix_char_swap_columns , Ptr <gsl_matrix_char> -> CSize -> CSize -> IO CInt
+#ccall gsl_matrix_char_swap_rowcol , Ptr <gsl_matrix_char> -> CSize -> CSize -> IO CInt
+#ccall gsl_matrix_char_swap_rows , Ptr <gsl_matrix_char> -> CSize -> CSize -> IO CInt
+#ccall gsl_matrix_char_transpose , Ptr <gsl_matrix_char> -> IO CInt
+#ccall gsl_matrix_char_transpose_memcpy , Ptr <gsl_matrix_char> -> Ptr <gsl_matrix_char> -> IO CInt
+-- ccall gsl_matrix_char_view_array , CString -> CSize -> CSize -> IO <gsl_matrix_char_view>
+-- ccall gsl_matrix_char_view_array_with_tda , CString -> CSize -> CSize -> CSize -> IO <gsl_matrix_char_view>
+-- ccall gsl_matrix_char_view_vector , Ptr <gsl_vector_char> -> CSize -> CSize -> IO <gsl_matrix_char_view>
+-- ccall gsl_matrix_char_view_vector_with_tda , Ptr <gsl_vector_char> -> CSize -> CSize -> CSize -> IO <gsl_matrix_char_view>
+-- ccall gsl_matrix_column , Ptr <gsl_matrix> -> CSize -> IO <gsl_vector_view>
+#ccall gsl_matrix_complex_add , Ptr <gsl_matrix_complex> -> Ptr <gsl_matrix_complex> -> IO CInt
+-- ccall gsl_matrix_complex_add_constant , Ptr <gsl_matrix_complex> -> <gsl_complex> -> IO CInt
+-- ccall gsl_matrix_complex_add_diagonal , Ptr <gsl_matrix_complex> -> <gsl_complex> -> IO CInt
+#ccall gsl_matrix_complex_alloc , CSize -> CSize -> IO (Ptr <gsl_matrix_complex>)
+#ccall gsl_matrix_complex_alloc_from_block , Ptr <gsl_block_complex> -> CSize -> CSize -> CSize -> CSize -> IO (Ptr <gsl_matrix_complex>)
+#ccall gsl_matrix_complex_alloc_from_matrix , Ptr <gsl_matrix_complex> -> CSize -> CSize -> CSize -> CSize -> IO (Ptr <gsl_matrix_complex>)
+#ccall gsl_matrix_complex_calloc , CSize -> CSize -> IO (Ptr <gsl_matrix_complex>)
+-- ccall gsl_matrix_complex_column , Ptr <gsl_matrix_complex> -> CSize -> IO <gsl_vector_complex_view>
+-- ccall gsl_matrix_complex_const_column , Ptr <gsl_matrix_complex> -> CSize -> IO <gsl_vector_complex_const_view>
+-- ccall gsl_matrix_complex_const_diagonal , Ptr <gsl_matrix_complex> -> IO <gsl_vector_complex_const_view>
+-- ccall gsl_matrix_complex_const_row , Ptr <gsl_matrix_complex> -> CSize -> IO <gsl_vector_complex_const_view>
+-- ccall gsl_matrix_complex_const_subcolumn , Ptr <gsl_matrix_complex> -> CSize -> CSize -> CSize -> IO <gsl_vector_complex_const_view>
+-- ccall gsl_matrix_complex_const_subdiagonal , Ptr <gsl_matrix_complex> -> CSize -> IO <gsl_vector_complex_const_view>
+-- ccall gsl_matrix_complex_const_submatrix , Ptr <gsl_matrix_complex> -> CSize -> CSize -> CSize -> CSize -> IO <gsl_matrix_complex_const_view>
+-- ccall gsl_matrix_complex_const_subrow , Ptr <gsl_matrix_complex> -> CSize -> CSize -> CSize -> IO <gsl_vector_complex_const_view>
+-- ccall gsl_matrix_complex_const_superdiagonal , Ptr <gsl_matrix_complex> -> CSize -> IO <gsl_vector_complex_const_view>
+-- ccall gsl_matrix_complex_const_view_array , Ptr CDouble -> CSize -> CSize -> IO <gsl_matrix_complex_const_view>
+-- ccall gsl_matrix_complex_const_view_array_with_tda , Ptr CDouble -> CSize -> CSize -> CSize -> IO <gsl_matrix_complex_const_view>
+-- ccall gsl_matrix_complex_const_view_vector , Ptr <gsl_vector_complex> -> CSize -> CSize -> IO <gsl_matrix_complex_const_view>
+-- ccall gsl_matrix_complex_const_view_vector_with_tda , Ptr <gsl_vector_complex> -> CSize -> CSize -> CSize -> IO <gsl_matrix_complex_const_view>
+-- ccall gsl_matrix_complex_diagonal , Ptr <gsl_matrix_complex> -> IO <gsl_vector_complex_view>
+#ccall gsl_matrix_complex_div_elements , Ptr <gsl_matrix_complex> -> Ptr <gsl_matrix_complex> -> IO CInt
+#ccall gsl_matrix_complex_float_add , Ptr <gsl_matrix_complex_float> -> Ptr <gsl_matrix_complex_float> -> IO CInt
+-- ccall gsl_matrix_complex_float_add_constant , Ptr <gsl_matrix_complex_float> -> <gsl_complex_float> -> IO CInt
+-- ccall gsl_matrix_complex_float_add_diagonal , Ptr <gsl_matrix_complex_float> -> <gsl_complex_float> -> IO CInt
+#ccall gsl_matrix_complex_float_alloc , CSize -> CSize -> IO (Ptr <gsl_matrix_complex_float>)
+#ccall gsl_matrix_complex_float_alloc_from_block , Ptr <gsl_block_complex_float> -> CSize -> CSize -> CSize -> CSize -> IO (Ptr <gsl_matrix_complex_float>)
+#ccall gsl_matrix_complex_float_alloc_from_matrix , Ptr <gsl_matrix_complex_float> -> CSize -> CSize -> CSize -> CSize -> IO (Ptr <gsl_matrix_complex_float>)
+#ccall gsl_matrix_complex_float_calloc , CSize -> CSize -> IO (Ptr <gsl_matrix_complex_float>)
+-- ccall gsl_matrix_complex_float_column , Ptr <gsl_matrix_complex_float> -> CSize -> IO <gsl_vector_complex_float_view>
+-- ccall gsl_matrix_complex_float_const_column , Ptr <gsl_matrix_complex_float> -> CSize -> IO <gsl_vector_complex_float_const_view>
+-- ccall gsl_matrix_complex_float_const_diagonal , Ptr <gsl_matrix_complex_float> -> IO <gsl_vector_complex_float_const_view>
+-- ccall gsl_matrix_complex_float_const_row , Ptr <gsl_matrix_complex_float> -> CSize -> IO <gsl_vector_complex_float_const_view>
+-- ccall gsl_matrix_complex_float_const_subcolumn , Ptr <gsl_matrix_complex_float> -> CSize -> CSize -> CSize -> IO <gsl_vector_complex_float_const_view>
+-- ccall gsl_matrix_complex_float_const_subdiagonal , Ptr <gsl_matrix_complex_float> -> CSize -> IO <gsl_vector_complex_float_const_view>
+-- ccall gsl_matrix_complex_float_const_submatrix , Ptr <gsl_matrix_complex_float> -> CSize -> CSize -> CSize -> CSize -> IO <gsl_matrix_complex_float_const_view>
+-- ccall gsl_matrix_complex_float_const_subrow , Ptr <gsl_matrix_complex_float> -> CSize -> CSize -> CSize -> IO <gsl_vector_complex_float_const_view>
+-- ccall gsl_matrix_complex_float_const_superdiagonal , Ptr <gsl_matrix_complex_float> -> CSize -> IO <gsl_vector_complex_float_const_view>
+-- ccall gsl_matrix_complex_float_const_view_array , Ptr CFloat -> CSize -> CSize -> IO <gsl_matrix_complex_float_const_view>
+-- ccall gsl_matrix_complex_float_const_view_array_with_tda , Ptr CFloat -> CSize -> CSize -> CSize -> IO <gsl_matrix_complex_float_const_view>
+-- ccall gsl_matrix_complex_float_const_view_vector , Ptr <gsl_vector_complex_float> -> CSize -> CSize -> IO <gsl_matrix_complex_float_const_view>
+-- ccall gsl_matrix_complex_float_const_view_vector_with_tda , Ptr <gsl_vector_complex_float> -> CSize -> CSize -> CSize -> IO <gsl_matrix_complex_float_const_view>
+-- ccall gsl_matrix_complex_float_diagonal , Ptr <gsl_matrix_complex_float> -> IO <gsl_vector_complex_float_view>
+#ccall gsl_matrix_complex_float_div_elements , Ptr <gsl_matrix_complex_float> -> Ptr <gsl_matrix_complex_float> -> IO CInt
+#ccall gsl_matrix_complex_float_fprintf , Ptr CFile -> Ptr <gsl_matrix_complex_float> -> CString -> IO CInt
+#ccall gsl_matrix_complex_float_fread , Ptr CFile -> Ptr <gsl_matrix_complex_float> -> IO CInt
+#ccall gsl_matrix_complex_float_free , Ptr <gsl_matrix_complex_float> -> IO ()
+#ccall gsl_matrix_complex_float_fscanf , Ptr CFile -> Ptr <gsl_matrix_complex_float> -> IO CInt
+#ccall gsl_matrix_complex_float_fwrite , Ptr CFile -> Ptr <gsl_matrix_complex_float> -> IO CInt
+#ccall gsl_matrix_complex_float_isneg , Ptr <gsl_matrix_complex_float> -> IO CInt
+#ccall gsl_matrix_complex_float_isnonneg , Ptr <gsl_matrix_complex_float> -> IO CInt
+#ccall gsl_matrix_complex_float_isnull , Ptr <gsl_matrix_complex_float> -> IO CInt
+#ccall gsl_matrix_complex_float_ispos , Ptr <gsl_matrix_complex_float> -> IO CInt
+#ccall gsl_matrix_complex_float_memcpy , Ptr <gsl_matrix_complex_float> -> Ptr <gsl_matrix_complex_float> -> IO CInt
+#ccall gsl_matrix_complex_float_mul_elements , Ptr <gsl_matrix_complex_float> -> Ptr <gsl_matrix_complex_float> -> IO CInt
+-- ccall gsl_matrix_complex_float_row , Ptr <gsl_matrix_complex_float> -> CSize -> IO <gsl_vector_complex_float_view>
+-- ccall gsl_matrix_complex_float_scale , Ptr <gsl_matrix_complex_float> -> <gsl_complex_float> -> IO CInt
+-- ccall gsl_matrix_complex_float_set_all , Ptr <gsl_matrix_complex_float> -> <gsl_complex_float> -> IO ()
+#ccall gsl_matrix_complex_float_set_identity , Ptr <gsl_matrix_complex_float> -> IO ()
+#ccall gsl_matrix_complex_float_set_zero , Ptr <gsl_matrix_complex_float> -> IO ()
+#ccall gsl_matrix_complex_float_sub , Ptr <gsl_matrix_complex_float> -> Ptr <gsl_matrix_complex_float> -> IO CInt
+-- ccall gsl_matrix_complex_float_subcolumn , Ptr <gsl_matrix_complex_float> -> CSize -> CSize -> CSize -> IO <gsl_vector_complex_float_view>
+-- ccall gsl_matrix_complex_float_subdiagonal , Ptr <gsl_matrix_complex_float> -> CSize -> IO <gsl_vector_complex_float_view>
+-- ccall gsl_matrix_complex_float_submatrix , Ptr <gsl_matrix_complex_float> -> CSize -> CSize -> CSize -> CSize -> IO <gsl_matrix_complex_float_view>
+-- ccall gsl_matrix_complex_float_subrow , Ptr <gsl_matrix_complex_float> -> CSize -> CSize -> CSize -> IO <gsl_vector_complex_float_view>
+-- ccall gsl_matrix_complex_float_superdiagonal , Ptr <gsl_matrix_complex_float> -> CSize -> IO <gsl_vector_complex_float_view>
+#ccall gsl_matrix_complex_float_swap , Ptr <gsl_matrix_complex_float> -> Ptr <gsl_matrix_complex_float> -> IO CInt
+#ccall gsl_matrix_complex_float_swap_columns , Ptr <gsl_matrix_complex_float> -> CSize -> CSize -> IO CInt
+#ccall gsl_matrix_complex_float_swap_rowcol , Ptr <gsl_matrix_complex_float> -> CSize -> CSize -> IO CInt
+#ccall gsl_matrix_complex_float_swap_rows , Ptr <gsl_matrix_complex_float> -> CSize -> CSize -> IO CInt
+#ccall gsl_matrix_complex_float_transpose , Ptr <gsl_matrix_complex_float> -> IO CInt
+#ccall gsl_matrix_complex_float_transpose_memcpy , Ptr <gsl_matrix_complex_float> -> Ptr <gsl_matrix_complex_float> -> IO CInt
+-- ccall gsl_matrix_complex_float_view_array , Ptr CFloat -> CSize -> CSize -> IO <gsl_matrix_complex_float_view>
+-- ccall gsl_matrix_complex_float_view_array_with_tda , Ptr CFloat -> CSize -> CSize -> CSize -> IO <gsl_matrix_complex_float_view>
+-- ccall gsl_matrix_complex_float_view_vector , Ptr <gsl_vector_complex_float> -> CSize -> CSize -> IO <gsl_matrix_complex_float_view>
+-- ccall gsl_matrix_complex_float_view_vector_with_tda , Ptr <gsl_vector_complex_float> -> CSize -> CSize -> CSize -> IO <gsl_matrix_complex_float_view>
+#ccall gsl_matrix_complex_fprintf , Ptr CFile -> Ptr <gsl_matrix_complex> -> CString -> IO CInt
+#ccall gsl_matrix_complex_fread , Ptr CFile -> Ptr <gsl_matrix_complex> -> IO CInt
+#ccall gsl_matrix_complex_free , Ptr <gsl_matrix_complex> -> IO ()
+#ccall gsl_matrix_complex_fscanf , Ptr CFile -> Ptr <gsl_matrix_complex> -> IO CInt
+#ccall gsl_matrix_complex_fwrite , Ptr CFile -> Ptr <gsl_matrix_complex> -> IO CInt
+#ccall gsl_matrix_complex_isneg , Ptr <gsl_matrix_complex> -> IO CInt
+#ccall gsl_matrix_complex_isnonneg , Ptr <gsl_matrix_complex> -> IO CInt
+#ccall gsl_matrix_complex_isnull , Ptr <gsl_matrix_complex> -> IO CInt
+#ccall gsl_matrix_complex_ispos , Ptr <gsl_matrix_complex> -> IO CInt
+-- #ccall gsl_matrix_complex_long_double_add , Ptr <gsl_matrix_complex_long_double> -> Ptr <gsl_matrix_complex_long_double> -> IO CInt
+-- ccall gsl_matrix_complex_long_double_add_constant , Ptr <gsl_matrix_complex_long_double> -> <gsl_complex_long_double> -> IO CInt
+-- ccall gsl_matrix_complex_long_double_add_diagonal , Ptr <gsl_matrix_complex_long_double> -> <gsl_complex_long_double> -> IO CInt
+-- #ccall gsl_matrix_complex_long_double_alloc , CSize -> CSize -> IO (Ptr <gsl_matrix_complex_long_double>)
+-- #ccall gsl_matrix_complex_long_double_alloc_from_block , Ptr <gsl_block_complex_long_double> -> CSize -> CSize -> CSize -> CSize -> IO (Ptr <gsl_matrix_complex_long_double>)
+-- #ccall gsl_matrix_complex_long_double_alloc_from_matrix , Ptr <gsl_matrix_complex_long_double> -> CSize -> CSize -> CSize -> CSize -> IO (Ptr <gsl_matrix_complex_long_double>)
+-- #ccall gsl_matrix_complex_long_double_calloc , CSize -> CSize -> IO (Ptr <gsl_matrix_complex_long_double>)
+-- ccall gsl_matrix_complex_long_double_column , Ptr <gsl_matrix_complex_long_double> -> CSize -> IO <gsl_vector_complex_long_double_view>
+-- ccall gsl_matrix_complex_long_double_const_column , Ptr <gsl_matrix_complex_long_double> -> CSize -> IO <gsl_vector_complex_long_double_const_view>
+-- ccall gsl_matrix_complex_long_double_const_diagonal , Ptr <gsl_matrix_complex_long_double> -> IO <gsl_vector_complex_long_double_const_view>
+-- ccall gsl_matrix_complex_long_double_const_row , Ptr <gsl_matrix_complex_long_double> -> CSize -> IO <gsl_vector_complex_long_double_const_view>
+-- ccall gsl_matrix_complex_long_double_const_subcolumn , Ptr <gsl_matrix_complex_long_double> -> CSize -> CSize -> CSize -> IO <gsl_vector_complex_long_double_const_view>
+-- ccall gsl_matrix_complex_long_double_const_subdiagonal , Ptr <gsl_matrix_complex_long_double> -> CSize -> IO <gsl_vector_complex_long_double_const_view>
+-- ccall gsl_matrix_complex_long_double_const_submatrix , Ptr <gsl_matrix_complex_long_double> -> CSize -> CSize -> CSize -> CSize -> IO <gsl_matrix_complex_long_double_const_view>
+-- ccall gsl_matrix_complex_long_double_const_subrow , Ptr <gsl_matrix_complex_long_double> -> CSize -> CSize -> CSize -> IO <gsl_vector_complex_long_double_const_view>
+-- ccall gsl_matrix_complex_long_double_const_superdiagonal , Ptr <gsl_matrix_complex_long_double> -> CSize -> IO <gsl_vector_complex_long_double_const_view>
+-- ccall gsl_matrix_complex_long_double_const_view_array , Ptr CLDouble -> CSize -> CSize -> IO <gsl_matrix_complex_long_double_const_view>
+-- ccall gsl_matrix_complex_long_double_const_view_array_with_tda , Ptr CLDouble -> CSize -> CSize -> CSize -> IO <gsl_matrix_complex_long_double_const_view>
+-- ccall gsl_matrix_complex_long_double_const_view_vector , Ptr <gsl_vector_complex_long_double> -> CSize -> CSize -> IO <gsl_matrix_complex_long_double_const_view>
+-- ccall gsl_matrix_complex_long_double_const_view_vector_with_tda , Ptr <gsl_vector_complex_long_double> -> CSize -> CSize -> CSize -> IO <gsl_matrix_complex_long_double_const_view>
+-- ccall gsl_matrix_complex_long_double_diagonal , Ptr <gsl_matrix_complex_long_double> -> IO <gsl_vector_complex_long_double_view>
+-- #ccall gsl_matrix_complex_long_double_div_elements , Ptr <gsl_matrix_complex_long_double> -> Ptr <gsl_matrix_complex_long_double> -> IO CInt
+-- #ccall gsl_matrix_complex_long_double_fprintf , Ptr CFile -> Ptr <gsl_matrix_complex_long_double> -> CString -> IO CInt
+-- #ccall gsl_matrix_complex_long_double_fread , Ptr CFile -> Ptr <gsl_matrix_complex_long_double> -> IO CInt
+-- #ccall gsl_matrix_complex_long_double_free , Ptr <gsl_matrix_complex_long_double> -> IO ()
+-- #ccall gsl_matrix_complex_long_double_fscanf , Ptr CFile -> Ptr <gsl_matrix_complex_long_double> -> IO CInt
+-- #ccall gsl_matrix_complex_long_double_fwrite , Ptr CFile -> Ptr <gsl_matrix_complex_long_double> -> IO CInt
+-- #ccall gsl_matrix_complex_long_double_isneg , Ptr <gsl_matrix_complex_long_double> -> IO CInt
+-- #ccall gsl_matrix_complex_long_double_isnonneg , Ptr <gsl_matrix_complex_long_double> -> IO CInt
+-- #ccall gsl_matrix_complex_long_double_isnull , Ptr <gsl_matrix_complex_long_double> -> IO CInt
+-- #ccall gsl_matrix_complex_long_double_ispos , Ptr <gsl_matrix_complex_long_double> -> IO CInt
+-- #ccall gsl_matrix_complex_long_double_memcpy , Ptr <gsl_matrix_complex_long_double> -> Ptr <gsl_matrix_complex_long_double> -> IO CInt
+-- #ccall gsl_matrix_complex_long_double_mul_elements , Ptr <gsl_matrix_complex_long_double> -> Ptr <gsl_matrix_complex_long_double> -> IO CInt
+-- ccall gsl_matrix_complex_long_double_row , Ptr <gsl_matrix_complex_long_double> -> CSize -> IO <gsl_vector_complex_long_double_view>
+-- ccall gsl_matrix_complex_long_double_scale , Ptr <gsl_matrix_complex_long_double> -> <gsl_complex_long_double> -> IO CInt
+-- ccall gsl_matrix_complex_long_double_set_all , Ptr <gsl_matrix_complex_long_double> -> <gsl_complex_long_double> -> IO ()
+-- #ccall gsl_matrix_complex_long_double_set_identity , Ptr <gsl_matrix_complex_long_double> -> IO ()
+-- #ccall gsl_matrix_complex_long_double_set_zero , Ptr <gsl_matrix_complex_long_double> -> IO ()
+-- #ccall gsl_matrix_complex_long_double_sub , Ptr <gsl_matrix_complex_long_double> -> Ptr <gsl_matrix_complex_long_double> -> IO CInt
+-- ccall gsl_matrix_complex_long_double_subcolumn , Ptr <gsl_matrix_complex_long_double> -> CSize -> CSize -> CSize -> IO <gsl_vector_complex_long_double_view>
+-- ccall gsl_matrix_complex_long_double_subdiagonal , Ptr <gsl_matrix_complex_long_double> -> CSize -> IO <gsl_vector_complex_long_double_view>
+-- ccall gsl_matrix_complex_long_double_submatrix , Ptr <gsl_matrix_complex_long_double> -> CSize -> CSize -> CSize -> CSize -> IO <gsl_matrix_complex_long_double_view>
+-- ccall gsl_matrix_complex_long_double_subrow , Ptr <gsl_matrix_complex_long_double> -> CSize -> CSize -> CSize -> IO <gsl_vector_complex_long_double_view>
+-- ccall gsl_matrix_complex_long_double_superdiagonal , Ptr <gsl_matrix_complex_long_double> -> CSize -> IO <gsl_vector_complex_long_double_view>
+-- #ccall gsl_matrix_complex_long_double_swap , Ptr <gsl_matrix_complex_long_double> -> Ptr <gsl_matrix_complex_long_double> -> IO CInt
+-- #ccall gsl_matrix_complex_long_double_swap_columns , Ptr <gsl_matrix_complex_long_double> -> CSize -> CSize -> IO CInt
+-- #ccall gsl_matrix_complex_long_double_swap_rowcol , Ptr <gsl_matrix_complex_long_double> -> CSize -> CSize -> IO CInt
+-- #ccall gsl_matrix_complex_long_double_swap_rows , Ptr <gsl_matrix_complex_long_double> -> CSize -> CSize -> IO CInt
+-- #ccall gsl_matrix_complex_long_double_transpose , Ptr <gsl_matrix_complex_long_double> -> IO CInt
+-- #ccall gsl_matrix_complex_long_double_transpose_memcpy , Ptr <gsl_matrix_complex_long_double> -> Ptr <gsl_matrix_complex_long_double> -> IO CInt
+-- ccall gsl_matrix_complex_long_double_view_array , Ptr CLDouble -> CSize -> CSize -> IO <gsl_matrix_complex_long_double_view>
+-- ccall gsl_matrix_complex_long_double_view_array_with_tda , Ptr CLDouble -> CSize -> CSize -> CSize -> IO <gsl_matrix_complex_long_double_view>
+-- ccall gsl_matrix_complex_long_double_view_vector , Ptr <gsl_vector_complex_long_double> -> CSize -> CSize -> IO <gsl_matrix_complex_long_double_view>
+-- ccall gsl_matrix_complex_long_double_view_vector_with_tda , Ptr <gsl_vector_complex_long_double> -> CSize -> CSize -> CSize -> IO <gsl_matrix_complex_long_double_view>
+#ccall gsl_matrix_complex_memcpy , Ptr <gsl_matrix_complex> -> Ptr <gsl_matrix_complex> -> IO CInt
+#ccall gsl_matrix_complex_mul_elements , Ptr <gsl_matrix_complex> -> Ptr <gsl_matrix_complex> -> IO CInt
+-- ccall gsl_matrix_complex_row , Ptr <gsl_matrix_complex> -> CSize -> IO <gsl_vector_complex_view>
+-- ccall gsl_matrix_complex_scale , Ptr <gsl_matrix_complex> -> <gsl_complex> -> IO CInt
+-- ccall gsl_matrix_complex_set_all , Ptr <gsl_matrix_complex> -> <gsl_complex> -> IO ()
+#ccall gsl_matrix_complex_set_identity , Ptr <gsl_matrix_complex> -> IO ()
+#ccall gsl_matrix_complex_set_zero , Ptr <gsl_matrix_complex> -> IO ()
+#ccall gsl_matrix_complex_sub , Ptr <gsl_matrix_complex> -> Ptr <gsl_matrix_complex> -> IO CInt
+-- ccall gsl_matrix_complex_subcolumn , Ptr <gsl_matrix_complex> -> CSize -> CSize -> CSize -> IO <gsl_vector_complex_view>
+-- ccall gsl_matrix_complex_subdiagonal , Ptr <gsl_matrix_complex> -> CSize -> IO <gsl_vector_complex_view>
+-- ccall gsl_matrix_complex_submatrix , Ptr <gsl_matrix_complex> -> CSize -> CSize -> CSize -> CSize -> IO <gsl_matrix_complex_view>
+-- ccall gsl_matrix_complex_subrow , Ptr <gsl_matrix_complex> -> CSize -> CSize -> CSize -> IO <gsl_vector_complex_view>
+-- ccall gsl_matrix_complex_superdiagonal , Ptr <gsl_matrix_complex> -> CSize -> IO <gsl_vector_complex_view>
+#ccall gsl_matrix_complex_swap , Ptr <gsl_matrix_complex> -> Ptr <gsl_matrix_complex> -> IO CInt
+#ccall gsl_matrix_complex_swap_columns , Ptr <gsl_matrix_complex> -> CSize -> CSize -> IO CInt
+#ccall gsl_matrix_complex_swap_rowcol , Ptr <gsl_matrix_complex> -> CSize -> CSize -> IO CInt
+#ccall gsl_matrix_complex_swap_rows , Ptr <gsl_matrix_complex> -> CSize -> CSize -> IO CInt
+#ccall gsl_matrix_complex_transpose , Ptr <gsl_matrix_complex> -> IO CInt
+#ccall gsl_matrix_complex_transpose_memcpy , Ptr <gsl_matrix_complex> -> Ptr <gsl_matrix_complex> -> IO CInt
+-- ccall gsl_matrix_complex_view_array , Ptr CDouble -> CSize -> CSize -> IO <gsl_matrix_complex_view>
+-- ccall gsl_matrix_complex_view_array_with_tda , Ptr CDouble -> CSize -> CSize -> CSize -> IO <gsl_matrix_complex_view>
+-- ccall gsl_matrix_complex_view_vector , Ptr <gsl_vector_complex> -> CSize -> CSize -> IO <gsl_matrix_complex_view>
+-- ccall gsl_matrix_complex_view_vector_with_tda , Ptr <gsl_vector_complex> -> CSize -> CSize -> CSize -> IO <gsl_matrix_complex_view>
+-- ccall gsl_matrix_const_column , Ptr <gsl_matrix> -> CSize -> IO <gsl_vector_const_view>
+-- ccall gsl_matrix_const_diagonal , Ptr <gsl_matrix> -> IO <gsl_vector_const_view>
+-- ccall gsl_matrix_const_row , Ptr <gsl_matrix> -> CSize -> IO <gsl_vector_const_view>
+-- ccall gsl_matrix_const_subcolumn , Ptr <gsl_matrix> -> CSize -> CSize -> CSize -> IO <gsl_vector_const_view>
+-- ccall gsl_matrix_const_subdiagonal , Ptr <gsl_matrix> -> CSize -> IO <gsl_vector_const_view>
+-- ccall gsl_matrix_const_submatrix , Ptr <gsl_matrix> -> CSize -> CSize -> CSize -> CSize -> IO <gsl_matrix_const_view>
+-- ccall gsl_matrix_const_subrow , Ptr <gsl_matrix> -> CSize -> CSize -> CSize -> IO <gsl_vector_const_view>
+-- ccall gsl_matrix_const_superdiagonal , Ptr <gsl_matrix> -> CSize -> IO <gsl_vector_const_view>
+-- ccall gsl_matrix_const_view_array , Ptr CDouble -> CSize -> CSize -> IO <gsl_matrix_const_view>
+-- ccall gsl_matrix_const_view_array_with_tda , Ptr CDouble -> CSize -> CSize -> CSize -> IO <gsl_matrix_const_view>
+-- ccall gsl_matrix_const_view_vector , Ptr <gsl_vector> -> CSize -> CSize -> IO <gsl_matrix_const_view>
+-- ccall gsl_matrix_const_view_vector_with_tda , Ptr <gsl_vector> -> CSize -> CSize -> CSize -> IO <gsl_matrix_const_view>
+-- ccall gsl_matrix_diagonal , Ptr <gsl_matrix> -> IO <gsl_vector_view>
+#ccall gsl_matrix_div_elements , Ptr <gsl_matrix> -> Ptr <gsl_matrix> -> IO CInt
+#ccall gsl_matrix_float_add , Ptr <gsl_matrix_float> -> Ptr <gsl_matrix_float> -> IO CInt
+#ccall gsl_matrix_float_add_constant , Ptr <gsl_matrix_float> -> CDouble -> IO CInt
+#ccall gsl_matrix_float_add_diagonal , Ptr <gsl_matrix_float> -> CDouble -> IO CInt
+#ccall gsl_matrix_float_alloc , CSize -> CSize -> IO (Ptr <gsl_matrix_float>)
+#ccall gsl_matrix_float_alloc_from_block , Ptr <gsl_block_float> -> CSize -> CSize -> CSize -> CSize -> IO (Ptr <gsl_matrix_float>)
+#ccall gsl_matrix_float_alloc_from_matrix , Ptr <gsl_matrix_float> -> CSize -> CSize -> CSize -> CSize -> IO (Ptr <gsl_matrix_float>)
+#ccall gsl_matrix_float_calloc , CSize -> CSize -> IO (Ptr <gsl_matrix_float>)
+-- ccall gsl_matrix_float_column , Ptr <gsl_matrix_float> -> CSize -> IO <gsl_vector_float_view>
+-- ccall gsl_matrix_float_const_column , Ptr <gsl_matrix_float> -> CSize -> IO <gsl_vector_float_const_view>
+-- ccall gsl_matrix_float_const_diagonal , Ptr <gsl_matrix_float> -> IO <gsl_vector_float_const_view>
+-- ccall gsl_matrix_float_const_row , Ptr <gsl_matrix_float> -> CSize -> IO <gsl_vector_float_const_view>
+-- ccall gsl_matrix_float_const_subcolumn , Ptr <gsl_matrix_float> -> CSize -> CSize -> CSize -> IO <gsl_vector_float_const_view>
+-- ccall gsl_matrix_float_const_subdiagonal , Ptr <gsl_matrix_float> -> CSize -> IO <gsl_vector_float_const_view>
+-- ccall gsl_matrix_float_const_submatrix , Ptr <gsl_matrix_float> -> CSize -> CSize -> CSize -> CSize -> IO <gsl_matrix_float_const_view>
+-- ccall gsl_matrix_float_const_subrow , Ptr <gsl_matrix_float> -> CSize -> CSize -> CSize -> IO <gsl_vector_float_const_view>
+-- ccall gsl_matrix_float_const_superdiagonal , Ptr <gsl_matrix_float> -> CSize -> IO <gsl_vector_float_const_view>
+-- ccall gsl_matrix_float_const_view_array , Ptr CFloat -> CSize -> CSize -> IO <gsl_matrix_float_const_view>
+-- ccall gsl_matrix_float_const_view_array_with_tda , Ptr CFloat -> CSize -> CSize -> CSize -> IO <gsl_matrix_float_const_view>
+-- ccall gsl_matrix_float_const_view_vector , Ptr <gsl_vector_float> -> CSize -> CSize -> IO <gsl_matrix_float_const_view>
+-- ccall gsl_matrix_float_const_view_vector_with_tda , Ptr <gsl_vector_float> -> CSize -> CSize -> CSize -> IO <gsl_matrix_float_const_view>
+-- ccall gsl_matrix_float_diagonal , Ptr <gsl_matrix_float> -> IO <gsl_vector_float_view>
+#ccall gsl_matrix_float_div_elements , Ptr <gsl_matrix_float> -> Ptr <gsl_matrix_float> -> IO CInt
+#ccall gsl_matrix_float_fprintf , Ptr CFile -> Ptr <gsl_matrix_float> -> CString -> IO CInt
+#ccall gsl_matrix_float_fread , Ptr CFile -> Ptr <gsl_matrix_float> -> IO CInt
+#ccall gsl_matrix_float_free , Ptr <gsl_matrix_float> -> IO ()
+#ccall gsl_matrix_float_fscanf , Ptr CFile -> Ptr <gsl_matrix_float> -> IO CInt
+#ccall gsl_matrix_float_fwrite , Ptr CFile -> Ptr <gsl_matrix_float> -> IO CInt
+#ccall gsl_matrix_float_isneg , Ptr <gsl_matrix_float> -> IO CInt
+#ccall gsl_matrix_float_isnonneg , Ptr <gsl_matrix_float> -> IO CInt
+#ccall gsl_matrix_float_isnull , Ptr <gsl_matrix_float> -> IO CInt
+#ccall gsl_matrix_float_ispos , Ptr <gsl_matrix_float> -> IO CInt
+#ccall gsl_matrix_float_max , Ptr <gsl_matrix_float> -> IO CFloat
+#ccall gsl_matrix_float_max_index , Ptr <gsl_matrix_float> -> Ptr CSize -> Ptr CSize -> IO ()
+#ccall gsl_matrix_float_memcpy , Ptr <gsl_matrix_float> -> Ptr <gsl_matrix_float> -> IO CInt
+#ccall gsl_matrix_float_min , Ptr <gsl_matrix_float> -> IO CFloat
+#ccall gsl_matrix_float_min_index , Ptr <gsl_matrix_float> -> Ptr CSize -> Ptr CSize -> IO ()
+#ccall gsl_matrix_float_minmax , Ptr <gsl_matrix_float> -> Ptr CFloat -> Ptr CFloat -> IO ()
+#ccall gsl_matrix_float_minmax_index , Ptr <gsl_matrix_float> -> Ptr CSize -> Ptr CSize -> Ptr CSize -> Ptr CSize -> IO ()
+#ccall gsl_matrix_float_mul_elements , Ptr <gsl_matrix_float> -> Ptr <gsl_matrix_float> -> IO CInt
+-- ccall gsl_matrix_float_row , Ptr <gsl_matrix_float> -> CSize -> IO <gsl_vector_float_view>
+#ccall gsl_matrix_float_scale , Ptr <gsl_matrix_float> -> CDouble -> IO CInt
+#ccall gsl_matrix_float_set_all , Ptr <gsl_matrix_float> -> CFloat -> IO ()
+#ccall gsl_matrix_float_set_identity , Ptr <gsl_matrix_float> -> IO ()
+#ccall gsl_matrix_float_set_zero , Ptr <gsl_matrix_float> -> IO ()
+#ccall gsl_matrix_float_sub , Ptr <gsl_matrix_float> -> Ptr <gsl_matrix_float> -> IO CInt
+-- ccall gsl_matrix_float_subcolumn , Ptr <gsl_matrix_float> -> CSize -> CSize -> CSize -> IO <gsl_vector_float_view>
+-- ccall gsl_matrix_float_subdiagonal , Ptr <gsl_matrix_float> -> CSize -> IO <gsl_vector_float_view>
+-- ccall gsl_matrix_float_submatrix , Ptr <gsl_matrix_float> -> CSize -> CSize -> CSize -> CSize -> IO <gsl_matrix_float_view>
+-- ccall gsl_matrix_float_subrow , Ptr <gsl_matrix_float> -> CSize -> CSize -> CSize -> IO <gsl_vector_float_view>
+-- ccall gsl_matrix_float_superdiagonal , Ptr <gsl_matrix_float> -> CSize -> IO <gsl_vector_float_view>
+#ccall gsl_matrix_float_swap , Ptr <gsl_matrix_float> -> Ptr <gsl_matrix_float> -> IO CInt
+#ccall gsl_matrix_float_swap_columns , Ptr <gsl_matrix_float> -> CSize -> CSize -> IO CInt
+#ccall gsl_matrix_float_swap_rowcol , Ptr <gsl_matrix_float> -> CSize -> CSize -> IO CInt
+#ccall gsl_matrix_float_swap_rows , Ptr <gsl_matrix_float> -> CSize -> CSize -> IO CInt
+#ccall gsl_matrix_float_transpose , Ptr <gsl_matrix_float> -> IO CInt
+#ccall gsl_matrix_float_transpose_memcpy , Ptr <gsl_matrix_float> -> Ptr <gsl_matrix_float> -> IO CInt
+-- ccall gsl_matrix_float_view_array , Ptr CFloat -> CSize -> CSize -> IO <gsl_matrix_float_view>
+-- ccall gsl_matrix_float_view_array_with_tda , Ptr CFloat -> CSize -> CSize -> CSize -> IO <gsl_matrix_float_view>
+-- ccall gsl_matrix_float_view_vector , Ptr <gsl_vector_float> -> CSize -> CSize -> IO <gsl_matrix_float_view>
+-- ccall gsl_matrix_float_view_vector_with_tda , Ptr <gsl_vector_float> -> CSize -> CSize -> CSize -> IO <gsl_matrix_float_view>
+#ccall gsl_matrix_fprintf , Ptr CFile -> Ptr <gsl_matrix> -> CString -> IO CInt
+#ccall gsl_matrix_fread , Ptr CFile -> Ptr <gsl_matrix> -> IO CInt
+#ccall gsl_matrix_free , Ptr <gsl_matrix> -> IO ()
+#ccall gsl_matrix_fscanf , Ptr CFile -> Ptr <gsl_matrix> -> IO CInt
+#ccall gsl_matrix_fwrite , Ptr CFile -> Ptr <gsl_matrix> -> IO CInt
+#ccall gsl_matrix_int_add , Ptr <gsl_matrix_int> -> Ptr <gsl_matrix_int> -> IO CInt
+#ccall gsl_matrix_int_add_constant , Ptr <gsl_matrix_int> -> CDouble -> IO CInt
+#ccall gsl_matrix_int_add_diagonal , Ptr <gsl_matrix_int> -> CDouble -> IO CInt
+#ccall gsl_matrix_int_alloc , CSize -> CSize -> IO (Ptr <gsl_matrix_int>)
+#ccall gsl_matrix_int_alloc_from_block , Ptr <gsl_block_int> -> CSize -> CSize -> CSize -> CSize -> IO (Ptr <gsl_matrix_int>)
+#ccall gsl_matrix_int_alloc_from_matrix , Ptr <gsl_matrix_int> -> CSize -> CSize -> CSize -> CSize -> IO (Ptr <gsl_matrix_int>)
+#ccall gsl_matrix_int_calloc , CSize -> CSize -> IO (Ptr <gsl_matrix_int>)
+-- ccall gsl_matrix_int_column , Ptr <gsl_matrix_int> -> CSize -> IO <gsl_vector_int_view>
+-- ccall gsl_matrix_int_const_column , Ptr <gsl_matrix_int> -> CSize -> IO <gsl_vector_int_const_view>
+-- ccall gsl_matrix_int_const_diagonal , Ptr <gsl_matrix_int> -> IO <gsl_vector_int_const_view>
+-- ccall gsl_matrix_int_const_row , Ptr <gsl_matrix_int> -> CSize -> IO <gsl_vector_int_const_view>
+-- ccall gsl_matrix_int_const_subcolumn , Ptr <gsl_matrix_int> -> CSize -> CSize -> CSize -> IO <gsl_vector_int_const_view>
+-- ccall gsl_matrix_int_const_subdiagonal , Ptr <gsl_matrix_int> -> CSize -> IO <gsl_vector_int_const_view>
+-- ccall gsl_matrix_int_const_submatrix , Ptr <gsl_matrix_int> -> CSize -> CSize -> CSize -> CSize -> IO <gsl_matrix_int_const_view>
+-- ccall gsl_matrix_int_const_subrow , Ptr <gsl_matrix_int> -> CSize -> CSize -> CSize -> IO <gsl_vector_int_const_view>
+-- ccall gsl_matrix_int_const_superdiagonal , Ptr <gsl_matrix_int> -> CSize -> IO <gsl_vector_int_const_view>
+-- ccall gsl_matrix_int_const_view_array , Ptr CInt -> CSize -> CSize -> IO <gsl_matrix_int_const_view>
+-- ccall gsl_matrix_int_const_view_array_with_tda , Ptr CInt -> CSize -> CSize -> CSize -> IO <gsl_matrix_int_const_view>
+-- ccall gsl_matrix_int_const_view_vector , Ptr <gsl_vector_int> -> CSize -> CSize -> IO <gsl_matrix_int_const_view>
+-- ccall gsl_matrix_int_const_view_vector_with_tda , Ptr <gsl_vector_int> -> CSize -> CSize -> CSize -> IO <gsl_matrix_int_const_view>
+-- ccall gsl_matrix_int_diagonal , Ptr <gsl_matrix_int> -> IO <gsl_vector_int_view>
+#ccall gsl_matrix_int_div_elements , Ptr <gsl_matrix_int> -> Ptr <gsl_matrix_int> -> IO CInt
+#ccall gsl_matrix_int_fprintf , Ptr CFile -> Ptr <gsl_matrix_int> -> CString -> IO CInt
+#ccall gsl_matrix_int_fread , Ptr CFile -> Ptr <gsl_matrix_int> -> IO CInt
+#ccall gsl_matrix_int_free , Ptr <gsl_matrix_int> -> IO ()
+#ccall gsl_matrix_int_fscanf , Ptr CFile -> Ptr <gsl_matrix_int> -> IO CInt
+#ccall gsl_matrix_int_fwrite , Ptr CFile -> Ptr <gsl_matrix_int> -> IO CInt
+#ccall gsl_matrix_int_isneg , Ptr <gsl_matrix_int> -> IO CInt
+#ccall gsl_matrix_int_isnonneg , Ptr <gsl_matrix_int> -> IO CInt
+#ccall gsl_matrix_int_isnull , Ptr <gsl_matrix_int> -> IO CInt
+#ccall gsl_matrix_int_ispos , Ptr <gsl_matrix_int> -> IO CInt
+#ccall gsl_matrix_int_max , Ptr <gsl_matrix_int> -> IO CInt
+#ccall gsl_matrix_int_max_index , Ptr <gsl_matrix_int> -> Ptr CSize -> Ptr CSize -> IO ()
+#ccall gsl_matrix_int_memcpy , Ptr <gsl_matrix_int> -> Ptr <gsl_matrix_int> -> IO CInt
+#ccall gsl_matrix_int_min , Ptr <gsl_matrix_int> -> IO CInt
+#ccall gsl_matrix_int_min_index , Ptr <gsl_matrix_int> -> Ptr CSize -> Ptr CSize -> IO ()
+#ccall gsl_matrix_int_minmax , Ptr <gsl_matrix_int> -> Ptr CInt -> Ptr CInt -> IO ()
+#ccall gsl_matrix_int_minmax_index , Ptr <gsl_matrix_int> -> Ptr CSize -> Ptr CSize -> Ptr CSize -> Ptr CSize -> IO ()
+#ccall gsl_matrix_int_mul_elements , Ptr <gsl_matrix_int> -> Ptr <gsl_matrix_int> -> IO CInt
+-- ccall gsl_matrix_int_row , Ptr <gsl_matrix_int> -> CSize -> IO <gsl_vector_int_view>
+#ccall gsl_matrix_int_scale , Ptr <gsl_matrix_int> -> CDouble -> IO CInt
+#ccall gsl_matrix_int_set_all , Ptr <gsl_matrix_int> -> CInt -> IO ()
+#ccall gsl_matrix_int_set_identity , Ptr <gsl_matrix_int> -> IO ()
+#ccall gsl_matrix_int_set_zero , Ptr <gsl_matrix_int> -> IO ()
+#ccall gsl_matrix_int_sub , Ptr <gsl_matrix_int> -> Ptr <gsl_matrix_int> -> IO CInt
+-- ccall gsl_matrix_int_subcolumn , Ptr <gsl_matrix_int> -> CSize -> CSize -> CSize -> IO <gsl_vector_int_view>
+-- ccall gsl_matrix_int_subdiagonal , Ptr <gsl_matrix_int> -> CSize -> IO <gsl_vector_int_view>
+-- ccall gsl_matrix_int_submatrix , Ptr <gsl_matrix_int> -> CSize -> CSize -> CSize -> CSize -> IO <gsl_matrix_int_view>
+-- ccall gsl_matrix_int_subrow , Ptr <gsl_matrix_int> -> CSize -> CSize -> CSize -> IO <gsl_vector_int_view>
+-- ccall gsl_matrix_int_superdiagonal , Ptr <gsl_matrix_int> -> CSize -> IO <gsl_vector_int_view>
+#ccall gsl_matrix_int_swap , Ptr <gsl_matrix_int> -> Ptr <gsl_matrix_int> -> IO CInt
+#ccall gsl_matrix_int_swap_columns , Ptr <gsl_matrix_int> -> CSize -> CSize -> IO CInt
+#ccall gsl_matrix_int_swap_rowcol , Ptr <gsl_matrix_int> -> CSize -> CSize -> IO CInt
+#ccall gsl_matrix_int_swap_rows , Ptr <gsl_matrix_int> -> CSize -> CSize -> IO CInt
+#ccall gsl_matrix_int_transpose , Ptr <gsl_matrix_int> -> IO CInt
+#ccall gsl_matrix_int_transpose_memcpy , Ptr <gsl_matrix_int> -> Ptr <gsl_matrix_int> -> IO CInt
+-- ccall gsl_matrix_int_view_array , Ptr CInt -> CSize -> CSize -> IO <gsl_matrix_int_view>
+-- ccall gsl_matrix_int_view_array_with_tda , Ptr CInt -> CSize -> CSize -> CSize -> IO <gsl_matrix_int_view>
+-- ccall gsl_matrix_int_view_vector , Ptr <gsl_vector_int> -> CSize -> CSize -> IO <gsl_matrix_int_view>
+-- ccall gsl_matrix_int_view_vector_with_tda , Ptr <gsl_vector_int> -> CSize -> CSize -> CSize -> IO <gsl_matrix_int_view>
+#ccall gsl_matrix_isneg , Ptr <gsl_matrix> -> IO CInt
+#ccall gsl_matrix_isnonneg , Ptr <gsl_matrix> -> IO CInt
+#ccall gsl_matrix_isnull , Ptr <gsl_matrix> -> IO CInt
+#ccall gsl_matrix_ispos , Ptr <gsl_matrix> -> IO CInt
+#ccall gsl_matrix_equal, Ptr <gsl_matrix> -> Ptr <gsl_matrix> -> IO CInt
+#ccall gsl_matrix_long_add , Ptr <gsl_matrix_long> -> Ptr <gsl_matrix_long> -> IO CInt
+#ccall gsl_matrix_long_add_constant , Ptr <gsl_matrix_long> -> CDouble -> IO CInt
+#ccall gsl_matrix_long_add_diagonal , Ptr <gsl_matrix_long> -> CDouble -> IO CInt
+#ccall gsl_matrix_long_alloc , CSize -> CSize -> IO (Ptr <gsl_matrix_long>)
+#ccall gsl_matrix_long_alloc_from_block , Ptr <gsl_block_long> -> CSize -> CSize -> CSize -> CSize -> IO (Ptr <gsl_matrix_long>)
+#ccall gsl_matrix_long_alloc_from_matrix , Ptr <gsl_matrix_long> -> CSize -> CSize -> CSize -> CSize -> IO (Ptr <gsl_matrix_long>)
+#ccall gsl_matrix_long_calloc , CSize -> CSize -> IO (Ptr <gsl_matrix_long>)
+-- ccall gsl_matrix_long_column , Ptr <gsl_matrix_long> -> CSize -> IO <gsl_vector_long_view>
+-- ccall gsl_matrix_long_const_column , Ptr <gsl_matrix_long> -> CSize -> IO <gsl_vector_long_const_view>
+-- ccall gsl_matrix_long_const_diagonal , Ptr <gsl_matrix_long> -> IO <gsl_vector_long_const_view>
+-- ccall gsl_matrix_long_const_row , Ptr <gsl_matrix_long> -> CSize -> IO <gsl_vector_long_const_view>
+-- ccall gsl_matrix_long_const_subcolumn , Ptr <gsl_matrix_long> -> CSize -> CSize -> CSize -> IO <gsl_vector_long_const_view>
+-- ccall gsl_matrix_long_const_subdiagonal , Ptr <gsl_matrix_long> -> CSize -> IO <gsl_vector_long_const_view>
+-- ccall gsl_matrix_long_const_submatrix , Ptr <gsl_matrix_long> -> CSize -> CSize -> CSize -> CSize -> IO <gsl_matrix_long_const_view>
+-- ccall gsl_matrix_long_const_subrow , Ptr <gsl_matrix_long> -> CSize -> CSize -> CSize -> IO <gsl_vector_long_const_view>
+-- ccall gsl_matrix_long_const_superdiagonal , Ptr <gsl_matrix_long> -> CSize -> IO <gsl_vector_long_const_view>
+-- ccall gsl_matrix_long_const_view_array , Ptr CLong -> CSize -> CSize -> IO <gsl_matrix_long_const_view>
+-- ccall gsl_matrix_long_const_view_array_with_tda , Ptr CLong -> CSize -> CSize -> CSize -> IO <gsl_matrix_long_const_view>
+-- ccall gsl_matrix_long_const_view_vector , Ptr <gsl_vector_long> -> CSize -> CSize -> IO <gsl_matrix_long_const_view>
+-- ccall gsl_matrix_long_const_view_vector_with_tda , Ptr <gsl_vector_long> -> CSize -> CSize -> CSize -> IO <gsl_matrix_long_const_view>
+-- ccall gsl_matrix_long_diagonal , Ptr <gsl_matrix_long> -> IO <gsl_vector_long_view>
+#ccall gsl_matrix_long_div_elements , Ptr <gsl_matrix_long> -> Ptr <gsl_matrix_long> -> IO CInt
+-- #ccall gsl_matrix_long_double_add , Ptr <gsl_matrix_long_double> -> Ptr <gsl_matrix_long_double> -> IO CInt
+-- #ccall gsl_matrix_long_double_add_constant , Ptr <gsl_matrix_long_double> -> CDouble -> IO CInt
+-- #ccall gsl_matrix_long_double_add_diagonal , Ptr <gsl_matrix_long_double> -> CDouble -> IO CInt
+-- #ccall gsl_matrix_long_double_alloc , CSize -> CSize -> IO (Ptr <gsl_matrix_long_double>)
+-- #ccall gsl_matrix_long_double_alloc_from_block , Ptr <gsl_block_long_double> -> CSize -> CSize -> CSize -> CSize -> IO (Ptr <gsl_matrix_long_double>)
+-- #ccall gsl_matrix_long_double_alloc_from_matrix , Ptr <gsl_matrix_long_double> -> CSize -> CSize -> CSize -> CSize -> IO (Ptr <gsl_matrix_long_double>)
+-- #ccall gsl_matrix_long_double_calloc , CSize -> CSize -> IO (Ptr <gsl_matrix_long_double>)
+-- ccall gsl_matrix_long_double_column , Ptr <gsl_matrix_long_double> -> CSize -> IO <gsl_vector_long_double_view>
+-- ccall gsl_matrix_long_double_const_column , Ptr <gsl_matrix_long_double> -> CSize -> IO <gsl_vector_long_double_const_view>
+-- ccall gsl_matrix_long_double_const_diagonal , Ptr <gsl_matrix_long_double> -> IO <gsl_vector_long_double_const_view>
+-- ccall gsl_matrix_long_double_const_row , Ptr <gsl_matrix_long_double> -> CSize -> IO <gsl_vector_long_double_const_view>
+-- ccall gsl_matrix_long_double_const_subcolumn , Ptr <gsl_matrix_long_double> -> CSize -> CSize -> CSize -> IO <gsl_vector_long_double_const_view>
+-- ccall gsl_matrix_long_double_const_subdiagonal , Ptr <gsl_matrix_long_double> -> CSize -> IO <gsl_vector_long_double_const_view>
+-- ccall gsl_matrix_long_double_const_submatrix , Ptr <gsl_matrix_long_double> -> CSize -> CSize -> CSize -> CSize -> IO <gsl_matrix_long_double_const_view>
+-- ccall gsl_matrix_long_double_const_subrow , Ptr <gsl_matrix_long_double> -> CSize -> CSize -> CSize -> IO <gsl_vector_long_double_const_view>
+-- ccall gsl_matrix_long_double_const_superdiagonal , Ptr <gsl_matrix_long_double> -> CSize -> IO <gsl_vector_long_double_const_view>
+-- ccall gsl_matrix_long_double_const_view_array , Ptr CLDouble -> CSize -> CSize -> IO <gsl_matrix_long_double_const_view>
+-- ccall gsl_matrix_long_double_const_view_array_with_tda , Ptr CLDouble -> CSize -> CSize -> CSize -> IO <gsl_matrix_long_double_const_view>
+-- ccall gsl_matrix_long_double_const_view_vector , Ptr <gsl_vector_long_double> -> CSize -> CSize -> IO <gsl_matrix_long_double_const_view>
+-- ccall gsl_matrix_long_double_const_view_vector_with_tda , Ptr <gsl_vector_long_double> -> CSize -> CSize -> CSize -> IO <gsl_matrix_long_double_const_view>
+-- ccall gsl_matrix_long_double_diagonal , Ptr <gsl_matrix_long_double> -> IO <gsl_vector_long_double_view>
+-- #ccall gsl_matrix_long_double_div_elements , Ptr <gsl_matrix_long_double> -> Ptr <gsl_matrix_long_double> -> IO CInt
+-- #ccall gsl_matrix_long_double_fprintf , Ptr CFile -> Ptr <gsl_matrix_long_double> -> CString -> IO CInt
+-- #ccall gsl_matrix_long_double_fread , Ptr CFile -> Ptr <gsl_matrix_long_double> -> IO CInt
+-- #ccall gsl_matrix_long_double_free , Ptr <gsl_matrix_long_double> -> IO ()
+-- #ccall gsl_matrix_long_double_fscanf , Ptr CFile -> Ptr <gsl_matrix_long_double> -> IO CInt
+-- #ccall gsl_matrix_long_double_fwrite , Ptr CFile -> Ptr <gsl_matrix_long_double> -> IO CInt
+-- #ccall gsl_matrix_long_double_isneg , Ptr <gsl_matrix_long_double> -> IO CInt
+-- #ccall gsl_matrix_long_double_isnonneg , Ptr <gsl_matrix_long_double> -> IO CInt
+-- #ccall gsl_matrix_long_double_isnull , Ptr <gsl_matrix_long_double> -> IO CInt
+-- #ccall gsl_matrix_long_double_ispos , Ptr <gsl_matrix_long_double> -> IO CInt
+-- #ccall gsl_matrix_long_double_max , Ptr <gsl_matrix_long_double> -> IO CLDouble
+-- #ccall gsl_matrix_long_double_max_index , Ptr <gsl_matrix_long_double> -> Ptr CSize -> Ptr CSize -> IO ()
+-- #ccall gsl_matrix_long_double_memcpy , Ptr <gsl_matrix_long_double> -> Ptr <gsl_matrix_long_double> -> IO CInt
+-- #ccall gsl_matrix_long_double_min , Ptr <gsl_matrix_long_double> -> IO CLDouble
+-- #ccall gsl_matrix_long_double_min_index , Ptr <gsl_matrix_long_double> -> Ptr CSize -> Ptr CSize -> IO ()
+-- #ccall gsl_matrix_long_double_minmax , Ptr <gsl_matrix_long_double> -> Ptr CLDouble -> Ptr CLDouble -> IO ()
+-- #ccall gsl_matrix_long_double_minmax_index , Ptr <gsl_matrix_long_double> -> Ptr CSize -> Ptr CSize -> Ptr CSize -> Ptr CSize -> IO ()
+-- #ccall gsl_matrix_long_double_mul_elements , Ptr <gsl_matrix_long_double> -> Ptr <gsl_matrix_long_double> -> IO CInt
+-- -- ccall gsl_matrix_long_double_row , Ptr <gsl_matrix_long_double> -> CSize -> IO <gsl_vector_long_double_view>
+-- #ccall gsl_matrix_long_double_scale , Ptr <gsl_matrix_long_double> -> CDouble -> IO CInt
+-- #ccall gsl_matrix_long_double_set_all , Ptr <gsl_matrix_long_double> -> CLDouble -> IO ()
+-- #ccall gsl_matrix_long_double_set_identity , Ptr <gsl_matrix_long_double> -> IO ()
+-- #ccall gsl_matrix_long_double_set_zero , Ptr <gsl_matrix_long_double> -> IO ()
+-- #ccall gsl_matrix_long_double_sub , Ptr <gsl_matrix_long_double> -> Ptr <gsl_matrix_long_double> -> IO CInt
+-- ccall gsl_matrix_long_double_subcolumn , Ptr <gsl_matrix_long_double> -> CSize -> CSize -> CSize -> IO <gsl_vector_long_double_view>
+-- ccall gsl_matrix_long_double_subdiagonal , Ptr <gsl_matrix_long_double> -> CSize -> IO <gsl_vector_long_double_view>
+-- ccall gsl_matrix_long_double_submatrix , Ptr <gsl_matrix_long_double> -> CSize -> CSize -> CSize -> CSize -> IO <gsl_matrix_long_double_view>
+-- ccall gsl_matrix_long_double_subrow , Ptr <gsl_matrix_long_double> -> CSize -> CSize -> CSize -> IO <gsl_vector_long_double_view>
+-- ccall gsl_matrix_long_double_superdiagonal , Ptr <gsl_matrix_long_double> -> CSize -> IO <gsl_vector_long_double_view>
+-- #ccall gsl_matrix_long_double_swap , Ptr <gsl_matrix_long_double> -> Ptr <gsl_matrix_long_double> -> IO CInt
+-- #ccall gsl_matrix_long_double_swap_columns , Ptr <gsl_matrix_long_double> -> CSize -> CSize -> IO CInt
+-- #ccall gsl_matrix_long_double_swap_rowcol , Ptr <gsl_matrix_long_double> -> CSize -> CSize -> IO CInt
+-- #ccall gsl_matrix_long_double_swap_rows , Ptr <gsl_matrix_long_double> -> CSize -> CSize -> IO CInt
+-- #ccall gsl_matrix_long_double_transpose , Ptr <gsl_matrix_long_double> -> IO CInt
+-- #ccall gsl_matrix_long_double_transpose_memcpy , Ptr <gsl_matrix_long_double> -> Ptr <gsl_matrix_long_double> -> IO CInt
+-- ccall gsl_matrix_long_double_view_array , Ptr CLDouble -> CSize -> CSize -> IO <gsl_matrix_long_double_view>
+-- ccall gsl_matrix_long_double_view_array_with_tda , Ptr CLDouble -> CSize -> CSize -> CSize -> IO <gsl_matrix_long_double_view>
+-- ccall gsl_matrix_long_double_view_vector , Ptr <gsl_vector_long_double> -> CSize -> CSize -> IO <gsl_matrix_long_double_view>
+-- ccall gsl_matrix_long_double_view_vector_with_tda , Ptr <gsl_vector_long_double> -> CSize -> CSize -> CSize -> IO <gsl_matrix_long_double_view>
+#ccall gsl_matrix_long_fprintf , Ptr CFile -> Ptr <gsl_matrix_long> -> CString -> IO CInt
+#ccall gsl_matrix_long_fread , Ptr CFile -> Ptr <gsl_matrix_long> -> IO CInt
+#ccall gsl_matrix_long_free , Ptr <gsl_matrix_long> -> IO ()
+#ccall gsl_matrix_long_fscanf , Ptr CFile -> Ptr <gsl_matrix_long> -> IO CInt
+#ccall gsl_matrix_long_fwrite , Ptr CFile -> Ptr <gsl_matrix_long> -> IO CInt
+#ccall gsl_matrix_long_isneg , Ptr <gsl_matrix_long> -> IO CInt
+#ccall gsl_matrix_long_isnonneg , Ptr <gsl_matrix_long> -> IO CInt
+#ccall gsl_matrix_long_isnull , Ptr <gsl_matrix_long> -> IO CInt
+#ccall gsl_matrix_long_ispos , Ptr <gsl_matrix_long> -> IO CInt
+#ccall gsl_matrix_long_max , Ptr <gsl_matrix_long> -> IO CLong
+#ccall gsl_matrix_long_max_index , Ptr <gsl_matrix_long> -> Ptr CSize -> Ptr CSize -> IO ()
+#ccall gsl_matrix_long_memcpy , Ptr <gsl_matrix_long> -> Ptr <gsl_matrix_long> -> IO CInt
+#ccall gsl_matrix_long_min , Ptr <gsl_matrix_long> -> IO CLong
+#ccall gsl_matrix_long_min_index , Ptr <gsl_matrix_long> -> Ptr CSize -> Ptr CSize -> IO ()
+#ccall gsl_matrix_long_minmax , Ptr <gsl_matrix_long> -> Ptr CLong -> Ptr CLong -> IO ()
+#ccall gsl_matrix_long_minmax_index , Ptr <gsl_matrix_long> -> Ptr CSize -> Ptr CSize -> Ptr CSize -> Ptr CSize -> IO ()
+#ccall gsl_matrix_long_mul_elements , Ptr <gsl_matrix_long> -> Ptr <gsl_matrix_long> -> IO CInt
+-- ccall gsl_matrix_long_row , Ptr <gsl_matrix_long> -> CSize -> IO <gsl_vector_long_view>
+#ccall gsl_matrix_long_scale , Ptr <gsl_matrix_long> -> CDouble -> IO CInt
+#ccall gsl_matrix_long_set_all , Ptr <gsl_matrix_long> -> CLong -> IO ()
+#ccall gsl_matrix_long_set_identity , Ptr <gsl_matrix_long> -> IO ()
+#ccall gsl_matrix_long_set_zero , Ptr <gsl_matrix_long> -> IO ()
+#ccall gsl_matrix_long_sub , Ptr <gsl_matrix_long> -> Ptr <gsl_matrix_long> -> IO CInt
+-- ccall gsl_matrix_long_subcolumn , Ptr <gsl_matrix_long> -> CSize -> CSize -> CSize -> IO <gsl_vector_long_view>
+-- ccall gsl_matrix_long_subdiagonal , Ptr <gsl_matrix_long> -> CSize -> IO <gsl_vector_long_view>
+-- ccall gsl_matrix_long_submatrix , Ptr <gsl_matrix_long> -> CSize -> CSize -> CSize -> CSize -> IO <gsl_matrix_long_view>
+-- ccall gsl_matrix_long_subrow , Ptr <gsl_matrix_long> -> CSize -> CSize -> CSize -> IO <gsl_vector_long_view>
+-- ccall gsl_matrix_long_superdiagonal , Ptr <gsl_matrix_long> -> CSize -> IO <gsl_vector_long_view>
+#ccall gsl_matrix_long_swap , Ptr <gsl_matrix_long> -> Ptr <gsl_matrix_long> -> IO CInt
+#ccall gsl_matrix_long_swap_columns , Ptr <gsl_matrix_long> -> CSize -> CSize -> IO CInt
+#ccall gsl_matrix_long_swap_rowcol , Ptr <gsl_matrix_long> -> CSize -> CSize -> IO CInt
+#ccall gsl_matrix_long_swap_rows , Ptr <gsl_matrix_long> -> CSize -> CSize -> IO CInt
+#ccall gsl_matrix_long_transpose , Ptr <gsl_matrix_long> -> IO CInt
+#ccall gsl_matrix_long_transpose_memcpy , Ptr <gsl_matrix_long> -> Ptr <gsl_matrix_long> -> IO CInt
+-- ccall gsl_matrix_long_view_array , Ptr CLong -> CSize -> CSize -> IO <gsl_matrix_long_view>
+-- ccall gsl_matrix_long_view_array_with_tda , Ptr CLong -> CSize -> CSize -> CSize -> IO <gsl_matrix_long_view>
+-- ccall gsl_matrix_long_view_vector , Ptr <gsl_vector_long> -> CSize -> CSize -> IO <gsl_matrix_long_view>
+-- ccall gsl_matrix_long_view_vector_with_tda , Ptr <gsl_vector_long> -> CSize -> CSize -> CSize -> IO <gsl_matrix_long_view>
+#ccall gsl_matrix_max , Ptr <gsl_matrix> -> IO CDouble
+#ccall gsl_matrix_max_index , Ptr <gsl_matrix> -> Ptr CSize -> Ptr CSize -> IO ()
+#ccall gsl_matrix_memcpy , Ptr <gsl_matrix> -> Ptr <gsl_matrix> -> IO CInt
+#ccall gsl_matrix_min , Ptr <gsl_matrix> -> IO CDouble
+#ccall gsl_matrix_min_index , Ptr <gsl_matrix> -> Ptr CSize -> Ptr CSize -> IO ()
+#ccall gsl_matrix_minmax , Ptr <gsl_matrix> -> Ptr CDouble -> Ptr CDouble -> IO ()
+#ccall gsl_matrix_minmax_index , Ptr <gsl_matrix> -> Ptr CSize -> Ptr CSize -> Ptr CSize -> Ptr CSize -> IO ()
+#ccall gsl_matrix_mul_elements , Ptr <gsl_matrix> -> Ptr <gsl_matrix> -> IO CInt
+-- ccall gsl_matrix_row , Ptr <gsl_matrix> -> CSize -> IO <gsl_vector_view>
+#ccall gsl_matrix_scale , Ptr <gsl_matrix> -> CDouble -> IO CInt
+#ccall gsl_matrix_set_all , Ptr <gsl_matrix> -> CDouble -> IO ()
+#ccall gsl_matrix_set_identity , Ptr <gsl_matrix> -> IO ()
+#ccall gsl_matrix_set_zero , Ptr <gsl_matrix> -> IO ()
+#ccall gsl_matrix_short_add , Ptr <gsl_matrix_short> -> Ptr <gsl_matrix_short> -> IO CInt
+#ccall gsl_matrix_short_add_constant , Ptr <gsl_matrix_short> -> CDouble -> IO CInt
+#ccall gsl_matrix_short_add_diagonal , Ptr <gsl_matrix_short> -> CDouble -> IO CInt
+#ccall gsl_matrix_short_alloc , CSize -> CSize -> IO (Ptr <gsl_matrix_short>)
+#ccall gsl_matrix_short_alloc_from_block , Ptr <gsl_block_short> -> CSize -> CSize -> CSize -> CSize -> IO (Ptr <gsl_matrix_short>)
+#ccall gsl_matrix_short_alloc_from_matrix , Ptr <gsl_matrix_short> -> CSize -> CSize -> CSize -> CSize -> IO (Ptr <gsl_matrix_short>)
+#ccall gsl_matrix_short_calloc , CSize -> CSize -> IO (Ptr <gsl_matrix_short>)
+-- ccall gsl_matrix_short_column , Ptr <gsl_matrix_short> -> CSize -> IO <gsl_vector_short_view>
+-- ccall gsl_matrix_short_const_column , Ptr <gsl_matrix_short> -> CSize -> IO <gsl_vector_short_const_view>
+-- ccall gsl_matrix_short_const_diagonal , Ptr <gsl_matrix_short> -> IO <gsl_vector_short_const_view>
+-- ccall gsl_matrix_short_const_row , Ptr <gsl_matrix_short> -> CSize -> IO <gsl_vector_short_const_view>
+-- ccall gsl_matrix_short_const_subcolumn , Ptr <gsl_matrix_short> -> CSize -> CSize -> CSize -> IO <gsl_vector_short_const_view>
+-- ccall gsl_matrix_short_const_subdiagonal , Ptr <gsl_matrix_short> -> CSize -> IO <gsl_vector_short_const_view>
+-- ccall gsl_matrix_short_const_submatrix , Ptr <gsl_matrix_short> -> CSize -> CSize -> CSize -> CSize -> IO <gsl_matrix_short_const_view>
+-- ccall gsl_matrix_short_const_subrow , Ptr <gsl_matrix_short> -> CSize -> CSize -> CSize -> IO <gsl_vector_short_const_view>
+-- ccall gsl_matrix_short_const_superdiagonal , Ptr <gsl_matrix_short> -> CSize -> IO <gsl_vector_short_const_view>
+-- ccall gsl_matrix_short_const_view_array , Ptr CShort -> CSize -> CSize -> IO <gsl_matrix_short_const_view>
+-- ccall gsl_matrix_short_const_view_array_with_tda , Ptr CShort -> CSize -> CSize -> CSize -> IO <gsl_matrix_short_const_view>
+-- ccall gsl_matrix_short_const_view_vector , Ptr <gsl_vector_short> -> CSize -> CSize -> IO <gsl_matrix_short_const_view>
+-- ccall gsl_matrix_short_const_view_vector_with_tda , Ptr <gsl_vector_short> -> CSize -> CSize -> CSize -> IO <gsl_matrix_short_const_view>
+-- ccall gsl_matrix_short_diagonal , Ptr <gsl_matrix_short> -> IO <gsl_vector_short_view>
+#ccall gsl_matrix_short_div_elements , Ptr <gsl_matrix_short> -> Ptr <gsl_matrix_short> -> IO CInt
+#ccall gsl_matrix_short_fprintf , Ptr CFile -> Ptr <gsl_matrix_short> -> CString -> IO CInt
+#ccall gsl_matrix_short_fread , Ptr CFile -> Ptr <gsl_matrix_short> -> IO CInt
+#ccall gsl_matrix_short_free , Ptr <gsl_matrix_short> -> IO ()
+#ccall gsl_matrix_short_fscanf , Ptr CFile -> Ptr <gsl_matrix_short> -> IO CInt
+#ccall gsl_matrix_short_fwrite , Ptr CFile -> Ptr <gsl_matrix_short> -> IO CInt
+#ccall gsl_matrix_short_isneg , Ptr <gsl_matrix_short> -> IO CInt
+#ccall gsl_matrix_short_isnonneg , Ptr <gsl_matrix_short> -> IO CInt
+#ccall gsl_matrix_short_isnull , Ptr <gsl_matrix_short> -> IO CInt
+#ccall gsl_matrix_short_ispos , Ptr <gsl_matrix_short> -> IO CInt
+#ccall gsl_matrix_short_max , Ptr <gsl_matrix_short> -> IO CShort
+#ccall gsl_matrix_short_max_index , Ptr <gsl_matrix_short> -> Ptr CSize -> Ptr CSize -> IO ()
+#ccall gsl_matrix_short_memcpy , Ptr <gsl_matrix_short> -> Ptr <gsl_matrix_short> -> IO CInt
+#ccall gsl_matrix_short_min , Ptr <gsl_matrix_short> -> IO CShort
+#ccall gsl_matrix_short_min_index , Ptr <gsl_matrix_short> -> Ptr CSize -> Ptr CSize -> IO ()
+#ccall gsl_matrix_short_minmax , Ptr <gsl_matrix_short> -> Ptr CShort -> Ptr CShort -> IO ()
+#ccall gsl_matrix_short_minmax_index , Ptr <gsl_matrix_short> -> Ptr CSize -> Ptr CSize -> Ptr CSize -> Ptr CSize -> IO ()
+#ccall gsl_matrix_short_mul_elements , Ptr <gsl_matrix_short> -> Ptr <gsl_matrix_short> -> IO CInt
+-- ccall gsl_matrix_short_row , Ptr <gsl_matrix_short> -> CSize -> IO <gsl_vector_short_view>
+#ccall gsl_matrix_short_scale , Ptr <gsl_matrix_short> -> CDouble -> IO CInt
+#ccall gsl_matrix_short_set_all , Ptr <gsl_matrix_short> -> CShort -> IO ()
+#ccall gsl_matrix_short_set_identity , Ptr <gsl_matrix_short> -> IO ()
+#ccall gsl_matrix_short_set_zero , Ptr <gsl_matrix_short> -> IO ()
+#ccall gsl_matrix_short_sub , Ptr <gsl_matrix_short> -> Ptr <gsl_matrix_short> -> IO CInt
+-- ccall gsl_matrix_short_subcolumn , Ptr <gsl_matrix_short> -> CSize -> CSize -> CSize -> IO <gsl_vector_short_view>
+-- ccall gsl_matrix_short_subdiagonal , Ptr <gsl_matrix_short> -> CSize -> IO <gsl_vector_short_view>
+-- ccall gsl_matrix_short_submatrix , Ptr <gsl_matrix_short> -> CSize -> CSize -> CSize -> CSize -> IO <gsl_matrix_short_view>
+-- ccall gsl_matrix_short_subrow , Ptr <gsl_matrix_short> -> CSize -> CSize -> CSize -> IO <gsl_vector_short_view>
+-- ccall gsl_matrix_short_superdiagonal , Ptr <gsl_matrix_short> -> CSize -> IO <gsl_vector_short_view>
+#ccall gsl_matrix_short_swap , Ptr <gsl_matrix_short> -> Ptr <gsl_matrix_short> -> IO CInt
+#ccall gsl_matrix_short_swap_columns , Ptr <gsl_matrix_short> -> CSize -> CSize -> IO CInt
+#ccall gsl_matrix_short_swap_rowcol , Ptr <gsl_matrix_short> -> CSize -> CSize -> IO CInt
+#ccall gsl_matrix_short_swap_rows , Ptr <gsl_matrix_short> -> CSize -> CSize -> IO CInt
+#ccall gsl_matrix_short_transpose , Ptr <gsl_matrix_short> -> IO CInt
+#ccall gsl_matrix_short_transpose_memcpy , Ptr <gsl_matrix_short> -> Ptr <gsl_matrix_short> -> IO CInt
+-- ccall gsl_matrix_short_view_array , Ptr CShort -> CSize -> CSize -> IO <gsl_matrix_short_view>
+-- ccall gsl_matrix_short_view_array_with_tda , Ptr CShort -> CSize -> CSize -> CSize -> IO <gsl_matrix_short_view>
+-- ccall gsl_matrix_short_view_vector , Ptr <gsl_vector_short> -> CSize -> CSize -> IO <gsl_matrix_short_view>
+-- ccall gsl_matrix_short_view_vector_with_tda , Ptr <gsl_vector_short> -> CSize -> CSize -> CSize -> IO <gsl_matrix_short_view>
+#ccall gsl_matrix_sub , Ptr <gsl_matrix> -> Ptr <gsl_matrix> -> IO CInt
+-- ccall gsl_matrix_subcolumn , Ptr <gsl_matrix> -> CSize -> CSize -> CSize -> IO <gsl_vector_view>
+-- ccall gsl_matrix_subdiagonal , Ptr <gsl_matrix> -> CSize -> IO <gsl_vector_view>
+-- ccall gsl_matrix_submatrix , Ptr <gsl_matrix> -> CSize -> CSize -> CSize -> CSize -> IO <gsl_matrix_view>
+-- ccall gsl_matrix_subrow , Ptr <gsl_matrix> -> CSize -> CSize -> CSize -> IO <gsl_vector_view>
+-- ccall gsl_matrix_superdiagonal , Ptr <gsl_matrix> -> CSize -> IO <gsl_vector_view>
+#ccall gsl_matrix_swap , Ptr <gsl_matrix> -> Ptr <gsl_matrix> -> IO CInt
+#ccall gsl_matrix_swap_columns , Ptr <gsl_matrix> -> CSize -> CSize -> IO CInt
+#ccall gsl_matrix_swap_rowcol , Ptr <gsl_matrix> -> CSize -> CSize -> IO CInt
+#ccall gsl_matrix_swap_rows , Ptr <gsl_matrix> -> CSize -> CSize -> IO CInt
+#ccall gsl_matrix_transpose , Ptr <gsl_matrix> -> IO CInt
+#ccall gsl_matrix_transpose_memcpy , Ptr <gsl_matrix> -> Ptr <gsl_matrix> -> IO CInt
+#ccall gsl_matrix_uchar_add , Ptr <gsl_matrix_uchar> -> Ptr <gsl_matrix_uchar> -> IO CInt
+#ccall gsl_matrix_uchar_add_constant , Ptr <gsl_matrix_uchar> -> CDouble -> IO CInt
+#ccall gsl_matrix_uchar_add_diagonal , Ptr <gsl_matrix_uchar> -> CDouble -> IO CInt
+#ccall gsl_matrix_uchar_alloc , CSize -> CSize -> IO (Ptr <gsl_matrix_uchar>)
+#ccall gsl_matrix_uchar_alloc_from_block , Ptr <gsl_block_uchar> -> CSize -> CSize -> CSize -> CSize -> IO (Ptr <gsl_matrix_uchar>)
+#ccall gsl_matrix_uchar_alloc_from_matrix , Ptr <gsl_matrix_uchar> -> CSize -> CSize -> CSize -> CSize -> IO (Ptr <gsl_matrix_uchar>)
+#ccall gsl_matrix_uchar_calloc , CSize -> CSize -> IO (Ptr <gsl_matrix_uchar>)
+-- ccall gsl_matrix_uchar_column , Ptr <gsl_matrix_uchar> -> CSize -> IO <gsl_vector_uchar_view>
+-- ccall gsl_matrix_uchar_const_column , Ptr <gsl_matrix_uchar> -> CSize -> IO <gsl_vector_uchar_const_view>
+-- ccall gsl_matrix_uchar_const_diagonal , Ptr <gsl_matrix_uchar> -> IO <gsl_vector_uchar_const_view>
+-- ccall gsl_matrix_uchar_const_row , Ptr <gsl_matrix_uchar> -> CSize -> IO <gsl_vector_uchar_const_view>
+-- ccall gsl_matrix_uchar_const_subcolumn , Ptr <gsl_matrix_uchar> -> CSize -> CSize -> CSize -> IO <gsl_vector_uchar_const_view>
+-- ccall gsl_matrix_uchar_const_subdiagonal , Ptr <gsl_matrix_uchar> -> CSize -> IO <gsl_vector_uchar_const_view>
+-- ccall gsl_matrix_uchar_const_submatrix , Ptr <gsl_matrix_uchar> -> CSize -> CSize -> CSize -> CSize -> IO <gsl_matrix_uchar_const_view>
+-- ccall gsl_matrix_uchar_const_subrow , Ptr <gsl_matrix_uchar> -> CSize -> CSize -> CSize -> IO <gsl_vector_uchar_const_view>
+-- ccall gsl_matrix_uchar_const_superdiagonal , Ptr <gsl_matrix_uchar> -> CSize -> IO <gsl_vector_uchar_const_view>
+-- ccall gsl_matrix_uchar_const_view_array , Ptr CUChar -> CSize -> CSize -> IO <gsl_matrix_uchar_const_view>
+-- ccall gsl_matrix_uchar_const_view_array_with_tda , Ptr CUChar -> CSize -> CSize -> CSize -> IO <gsl_matrix_uchar_const_view>
+-- ccall gsl_matrix_uchar_const_view_vector , Ptr <gsl_vector_uchar> -> CSize -> CSize -> IO <gsl_matrix_uchar_const_view>
+-- ccall gsl_matrix_uchar_const_view_vector_with_tda , Ptr <gsl_vector_uchar> -> CSize -> CSize -> CSize -> IO <gsl_matrix_uchar_const_view>
+-- ccall gsl_matrix_uchar_diagonal , Ptr <gsl_matrix_uchar> -> IO <gsl_vector_uchar_view>
+#ccall gsl_matrix_uchar_div_elements , Ptr <gsl_matrix_uchar> -> Ptr <gsl_matrix_uchar> -> IO CInt
+#ccall gsl_matrix_uchar_fprintf , Ptr CFile -> Ptr <gsl_matrix_uchar> -> CString -> IO CInt
+#ccall gsl_matrix_uchar_fread , Ptr CFile -> Ptr <gsl_matrix_uchar> -> IO CInt
+#ccall gsl_matrix_uchar_free , Ptr <gsl_matrix_uchar> -> IO ()
+#ccall gsl_matrix_uchar_fscanf , Ptr CFile -> Ptr <gsl_matrix_uchar> -> IO CInt
+#ccall gsl_matrix_uchar_fwrite , Ptr CFile -> Ptr <gsl_matrix_uchar> -> IO CInt
+#ccall gsl_matrix_uchar_isneg , Ptr <gsl_matrix_uchar> -> IO CInt
+#ccall gsl_matrix_uchar_isnonneg , Ptr <gsl_matrix_uchar> -> IO CInt
+#ccall gsl_matrix_uchar_isnull , Ptr <gsl_matrix_uchar> -> IO CInt
+#ccall gsl_matrix_uchar_ispos , Ptr <gsl_matrix_uchar> -> IO CInt
+#ccall gsl_matrix_uchar_max , Ptr <gsl_matrix_uchar> -> IO CUChar
+#ccall gsl_matrix_uchar_max_index , Ptr <gsl_matrix_uchar> -> Ptr CSize -> Ptr CSize -> IO ()
+#ccall gsl_matrix_uchar_memcpy , Ptr <gsl_matrix_uchar> -> Ptr <gsl_matrix_uchar> -> IO CInt
+#ccall gsl_matrix_uchar_min , Ptr <gsl_matrix_uchar> -> IO CUChar
+#ccall gsl_matrix_uchar_min_index , Ptr <gsl_matrix_uchar> -> Ptr CSize -> Ptr CSize -> IO ()
+#ccall gsl_matrix_uchar_minmax , Ptr <gsl_matrix_uchar> -> Ptr CUChar -> Ptr CUChar -> IO ()
+#ccall gsl_matrix_uchar_minmax_index , Ptr <gsl_matrix_uchar> -> Ptr CSize -> Ptr CSize -> Ptr CSize -> Ptr CSize -> IO ()
+#ccall gsl_matrix_uchar_mul_elements , Ptr <gsl_matrix_uchar> -> Ptr <gsl_matrix_uchar> -> IO CInt
+-- ccall gsl_matrix_uchar_row , Ptr <gsl_matrix_uchar> -> CSize -> IO <gsl_vector_uchar_view>
+#ccall gsl_matrix_uchar_scale , Ptr <gsl_matrix_uchar> -> CDouble -> IO CInt
+#ccall gsl_matrix_uchar_set_all , Ptr <gsl_matrix_uchar> -> CUChar -> IO ()
+#ccall gsl_matrix_uchar_set_identity , Ptr <gsl_matrix_uchar> -> IO ()
+#ccall gsl_matrix_uchar_set_zero , Ptr <gsl_matrix_uchar> -> IO ()
+#ccall gsl_matrix_uchar_sub , Ptr <gsl_matrix_uchar> -> Ptr <gsl_matrix_uchar> -> IO CInt
+-- ccall gsl_matrix_uchar_subcolumn , Ptr <gsl_matrix_uchar> -> CSize -> CSize -> CSize -> IO <gsl_vector_uchar_view>
+-- ccall gsl_matrix_uchar_subdiagonal , Ptr <gsl_matrix_uchar> -> CSize -> IO <gsl_vector_uchar_view>
+-- ccall gsl_matrix_uchar_submatrix , Ptr <gsl_matrix_uchar> -> CSize -> CSize -> CSize -> CSize -> IO <gsl_matrix_uchar_view>
+-- ccall gsl_matrix_uchar_subrow , Ptr <gsl_matrix_uchar> -> CSize -> CSize -> CSize -> IO <gsl_vector_uchar_view>
+-- ccall gsl_matrix_uchar_superdiagonal , Ptr <gsl_matrix_uchar> -> CSize -> IO <gsl_vector_uchar_view>
+#ccall gsl_matrix_uchar_swap , Ptr <gsl_matrix_uchar> -> Ptr <gsl_matrix_uchar> -> IO CInt
+#ccall gsl_matrix_uchar_swap_columns , Ptr <gsl_matrix_uchar> -> CSize -> CSize -> IO CInt
+#ccall gsl_matrix_uchar_swap_rowcol , Ptr <gsl_matrix_uchar> -> CSize -> CSize -> IO CInt
+#ccall gsl_matrix_uchar_swap_rows , Ptr <gsl_matrix_uchar> -> CSize -> CSize -> IO CInt
+#ccall gsl_matrix_uchar_transpose , Ptr <gsl_matrix_uchar> -> IO CInt
+#ccall gsl_matrix_uchar_transpose_memcpy , Ptr <gsl_matrix_uchar> -> Ptr <gsl_matrix_uchar> -> IO CInt
+-- ccall gsl_matrix_uchar_view_array , Ptr CUChar -> CSize -> CSize -> IO <gsl_matrix_uchar_view>
+-- ccall gsl_matrix_uchar_view_array_with_tda , Ptr CUChar -> CSize -> CSize -> CSize -> IO <gsl_matrix_uchar_view>
+-- ccall gsl_matrix_uchar_view_vector , Ptr <gsl_vector_uchar> -> CSize -> CSize -> IO <gsl_matrix_uchar_view>
+-- ccall gsl_matrix_uchar_view_vector_with_tda , Ptr <gsl_vector_uchar> -> CSize -> CSize -> CSize -> IO <gsl_matrix_uchar_view>
+#ccall gsl_matrix_uint_add , Ptr <gsl_matrix_uint> -> Ptr <gsl_matrix_uint> -> IO CInt
+#ccall gsl_matrix_uint_add_constant , Ptr <gsl_matrix_uint> -> CDouble -> IO CInt
+#ccall gsl_matrix_uint_add_diagonal , Ptr <gsl_matrix_uint> -> CDouble -> IO CInt
+#ccall gsl_matrix_uint_alloc , CSize -> CSize -> IO (Ptr <gsl_matrix_uint>)
+#ccall gsl_matrix_uint_alloc_from_block , Ptr <gsl_block_uint> -> CSize -> CSize -> CSize -> CSize -> IO (Ptr <gsl_matrix_uint>)
+#ccall gsl_matrix_uint_alloc_from_matrix , Ptr <gsl_matrix_uint> -> CSize -> CSize -> CSize -> CSize -> IO (Ptr <gsl_matrix_uint>)
+#ccall gsl_matrix_uint_calloc , CSize -> CSize -> IO (Ptr <gsl_matrix_uint>)
+-- ccall gsl_matrix_uint_column , Ptr <gsl_matrix_uint> -> CSize -> IO <gsl_vector_uint_view>
+-- ccall gsl_matrix_uint_const_column , Ptr <gsl_matrix_uint> -> CSize -> IO <gsl_vector_uint_const_view>
+-- ccall gsl_matrix_uint_const_diagonal , Ptr <gsl_matrix_uint> -> IO <gsl_vector_uint_const_view>
+-- ccall gsl_matrix_uint_const_row , Ptr <gsl_matrix_uint> -> CSize -> IO <gsl_vector_uint_const_view>
+-- ccall gsl_matrix_uint_const_subcolumn , Ptr <gsl_matrix_uint> -> CSize -> CSize -> CSize -> IO <gsl_vector_uint_const_view>
+-- ccall gsl_matrix_uint_const_subdiagonal , Ptr <gsl_matrix_uint> -> CSize -> IO <gsl_vector_uint_const_view>
+-- ccall gsl_matrix_uint_const_submatrix , Ptr <gsl_matrix_uint> -> CSize -> CSize -> CSize -> CSize -> IO <gsl_matrix_uint_const_view>
+-- ccall gsl_matrix_uint_const_subrow , Ptr <gsl_matrix_uint> -> CSize -> CSize -> CSize -> IO <gsl_vector_uint_const_view>
+-- ccall gsl_matrix_uint_const_superdiagonal , Ptr <gsl_matrix_uint> -> CSize -> IO <gsl_vector_uint_const_view>
+-- ccall gsl_matrix_uint_const_view_array , Ptr CUInt -> CSize -> CSize -> IO <gsl_matrix_uint_const_view>
+-- ccall gsl_matrix_uint_const_view_array_with_tda , Ptr CUInt -> CSize -> CSize -> CSize -> IO <gsl_matrix_uint_const_view>
+-- ccall gsl_matrix_uint_const_view_vector , Ptr <gsl_vector_uint> -> CSize -> CSize -> IO <gsl_matrix_uint_const_view>
+-- ccall gsl_matrix_uint_const_view_vector_with_tda , Ptr <gsl_vector_uint> -> CSize -> CSize -> CSize -> IO <gsl_matrix_uint_const_view>
+-- ccall gsl_matrix_uint_diagonal , Ptr <gsl_matrix_uint> -> IO <gsl_vector_uint_view>
+#ccall gsl_matrix_uint_div_elements , Ptr <gsl_matrix_uint> -> Ptr <gsl_matrix_uint> -> IO CInt
+#ccall gsl_matrix_uint_fprintf , Ptr CFile -> Ptr <gsl_matrix_uint> -> CString -> IO CInt
+#ccall gsl_matrix_uint_fread , Ptr CFile -> Ptr <gsl_matrix_uint> -> IO CInt
+#ccall gsl_matrix_uint_free , Ptr <gsl_matrix_uint> -> IO ()
+#ccall gsl_matrix_uint_fscanf , Ptr CFile -> Ptr <gsl_matrix_uint> -> IO CInt
+#ccall gsl_matrix_uint_fwrite , Ptr CFile -> Ptr <gsl_matrix_uint> -> IO CInt
+#ccall gsl_matrix_uint_isneg , Ptr <gsl_matrix_uint> -> IO CInt
+#ccall gsl_matrix_uint_isnonneg , Ptr <gsl_matrix_uint> -> IO CInt
+#ccall gsl_matrix_uint_isnull , Ptr <gsl_matrix_uint> -> IO CInt
+#ccall gsl_matrix_uint_ispos , Ptr <gsl_matrix_uint> -> IO CInt
+#ccall gsl_matrix_uint_max , Ptr <gsl_matrix_uint> -> IO CUInt
+#ccall gsl_matrix_uint_max_index , Ptr <gsl_matrix_uint> -> Ptr CSize -> Ptr CSize -> IO ()
+#ccall gsl_matrix_uint_memcpy , Ptr <gsl_matrix_uint> -> Ptr <gsl_matrix_uint> -> IO CInt
+#ccall gsl_matrix_uint_min , Ptr <gsl_matrix_uint> -> IO CUInt
+#ccall gsl_matrix_uint_min_index , Ptr <gsl_matrix_uint> -> Ptr CSize -> Ptr CSize -> IO ()
+#ccall gsl_matrix_uint_minmax , Ptr <gsl_matrix_uint> -> Ptr CUInt -> Ptr CUInt -> IO ()
+#ccall gsl_matrix_uint_minmax_index , Ptr <gsl_matrix_uint> -> Ptr CSize -> Ptr CSize -> Ptr CSize -> Ptr CSize -> IO ()
+#ccall gsl_matrix_uint_mul_elements , Ptr <gsl_matrix_uint> -> Ptr <gsl_matrix_uint> -> IO CInt
+-- ccall gsl_matrix_uint_row , Ptr <gsl_matrix_uint> -> CSize -> IO <gsl_vector_uint_view>
+#ccall gsl_matrix_uint_scale , Ptr <gsl_matrix_uint> -> CDouble -> IO CInt
+#ccall gsl_matrix_uint_set_all , Ptr <gsl_matrix_uint> -> CUInt -> IO ()
+#ccall gsl_matrix_uint_set_identity , Ptr <gsl_matrix_uint> -> IO ()
+#ccall gsl_matrix_uint_set_zero , Ptr <gsl_matrix_uint> -> IO ()
+#ccall gsl_matrix_uint_sub , Ptr <gsl_matrix_uint> -> Ptr <gsl_matrix_uint> -> IO CInt
+-- ccall gsl_matrix_uint_subcolumn , Ptr <gsl_matrix_uint> -> CSize -> CSize -> CSize -> IO <gsl_vector_uint_view>
+-- ccall gsl_matrix_uint_subdiagonal , Ptr <gsl_matrix_uint> -> CSize -> IO <gsl_vector_uint_view>
+-- ccall gsl_matrix_uint_submatrix , Ptr <gsl_matrix_uint> -> CSize -> CSize -> CSize -> CSize -> IO <gsl_matrix_uint_view>
+-- ccall gsl_matrix_uint_subrow , Ptr <gsl_matrix_uint> -> CSize -> CSize -> CSize -> IO <gsl_vector_uint_view>
+-- ccall gsl_matrix_uint_superdiagonal , Ptr <gsl_matrix_uint> -> CSize -> IO <gsl_vector_uint_view>
+#ccall gsl_matrix_uint_swap , Ptr <gsl_matrix_uint> -> Ptr <gsl_matrix_uint> -> IO CInt
+#ccall gsl_matrix_uint_swap_columns , Ptr <gsl_matrix_uint> -> CSize -> CSize -> IO CInt
+#ccall gsl_matrix_uint_swap_rowcol , Ptr <gsl_matrix_uint> -> CSize -> CSize -> IO CInt
+#ccall gsl_matrix_uint_swap_rows , Ptr <gsl_matrix_uint> -> CSize -> CSize -> IO CInt
+#ccall gsl_matrix_uint_transpose , Ptr <gsl_matrix_uint> -> IO CInt
+#ccall gsl_matrix_uint_transpose_memcpy , Ptr <gsl_matrix_uint> -> Ptr <gsl_matrix_uint> -> IO CInt
+-- ccall gsl_matrix_uint_view_array , Ptr CUInt -> CSize -> CSize -> IO <gsl_matrix_uint_view>
+-- ccall gsl_matrix_uint_view_array_with_tda , Ptr CUInt -> CSize -> CSize -> CSize -> IO <gsl_matrix_uint_view>
+-- ccall gsl_matrix_uint_view_vector , Ptr <gsl_vector_uint> -> CSize -> CSize -> IO <gsl_matrix_uint_view>
+-- ccall gsl_matrix_uint_view_vector_with_tda , Ptr <gsl_vector_uint> -> CSize -> CSize -> CSize -> IO <gsl_matrix_uint_view>
+#ccall gsl_matrix_ulong_add , Ptr <gsl_matrix_ulong> -> Ptr <gsl_matrix_ulong> -> IO CInt
+#ccall gsl_matrix_ulong_add_constant , Ptr <gsl_matrix_ulong> -> CDouble -> IO CInt
+#ccall gsl_matrix_ulong_add_diagonal , Ptr <gsl_matrix_ulong> -> CDouble -> IO CInt
+#ccall gsl_matrix_ulong_alloc , CSize -> CSize -> IO (Ptr <gsl_matrix_ulong>)
+#ccall gsl_matrix_ulong_alloc_from_block , Ptr <gsl_block_ulong> -> CSize -> CSize -> CSize -> CSize -> IO (Ptr <gsl_matrix_ulong>)
+#ccall gsl_matrix_ulong_alloc_from_matrix , Ptr <gsl_matrix_ulong> -> CSize -> CSize -> CSize -> CSize -> IO (Ptr <gsl_matrix_ulong>)
+#ccall gsl_matrix_ulong_calloc , CSize -> CSize -> IO (Ptr <gsl_matrix_ulong>)
+-- ccall gsl_matrix_ulong_column , Ptr <gsl_matrix_ulong> -> CSize -> IO <gsl_vector_ulong_view>
+-- ccall gsl_matrix_ulong_const_column , Ptr <gsl_matrix_ulong> -> CSize -> IO <gsl_vector_ulong_const_view>
+-- ccall gsl_matrix_ulong_const_diagonal , Ptr <gsl_matrix_ulong> -> IO <gsl_vector_ulong_const_view>
+-- ccall gsl_matrix_ulong_const_row , Ptr <gsl_matrix_ulong> -> CSize -> IO <gsl_vector_ulong_const_view>
+-- ccall gsl_matrix_ulong_const_subcolumn , Ptr <gsl_matrix_ulong> -> CSize -> CSize -> CSize -> IO <gsl_vector_ulong_const_view>
+-- ccall gsl_matrix_ulong_const_subdiagonal , Ptr <gsl_matrix_ulong> -> CSize -> IO <gsl_vector_ulong_const_view>
+-- ccall gsl_matrix_ulong_const_submatrix , Ptr <gsl_matrix_ulong> -> CSize -> CSize -> CSize -> CSize -> IO <gsl_matrix_ulong_const_view>
+-- ccall gsl_matrix_ulong_const_subrow , Ptr <gsl_matrix_ulong> -> CSize -> CSize -> CSize -> IO <gsl_vector_ulong_const_view>
+-- ccall gsl_matrix_ulong_const_superdiagonal , Ptr <gsl_matrix_ulong> -> CSize -> IO <gsl_vector_ulong_const_view>
+-- ccall gsl_matrix_ulong_const_view_array , Ptr CULong -> CSize -> CSize -> IO <gsl_matrix_ulong_const_view>
+-- ccall gsl_matrix_ulong_const_view_array_with_tda , Ptr CULong -> CSize -> CSize -> CSize -> IO <gsl_matrix_ulong_const_view>
+-- ccall gsl_matrix_ulong_const_view_vector , Ptr <gsl_vector_ulong> -> CSize -> CSize -> IO <gsl_matrix_ulong_const_view>
+-- ccall gsl_matrix_ulong_const_view_vector_with_tda , Ptr <gsl_vector_ulong> -> CSize -> CSize -> CSize -> IO <gsl_matrix_ulong_const_view>
+-- ccall gsl_matrix_ulong_diagonal , Ptr <gsl_matrix_ulong> -> IO <gsl_vector_ulong_view>
+#ccall gsl_matrix_ulong_div_elements , Ptr <gsl_matrix_ulong> -> Ptr <gsl_matrix_ulong> -> IO CInt
+#ccall gsl_matrix_ulong_fprintf , Ptr CFile -> Ptr <gsl_matrix_ulong> -> CString -> IO CInt
+#ccall gsl_matrix_ulong_fread , Ptr CFile -> Ptr <gsl_matrix_ulong> -> IO CInt
+#ccall gsl_matrix_ulong_free , Ptr <gsl_matrix_ulong> -> IO ()
+#ccall gsl_matrix_ulong_fscanf , Ptr CFile -> Ptr <gsl_matrix_ulong> -> IO CInt
+#ccall gsl_matrix_ulong_fwrite , Ptr CFile -> Ptr <gsl_matrix_ulong> -> IO CInt
+#ccall gsl_matrix_ulong_isneg , Ptr <gsl_matrix_ulong> -> IO CInt
+#ccall gsl_matrix_ulong_isnonneg , Ptr <gsl_matrix_ulong> -> IO CInt
+#ccall gsl_matrix_ulong_isnull , Ptr <gsl_matrix_ulong> -> IO CInt
+#ccall gsl_matrix_ulong_ispos , Ptr <gsl_matrix_ulong> -> IO CInt
+#ccall gsl_matrix_ulong_max , Ptr <gsl_matrix_ulong> -> IO CULong
+#ccall gsl_matrix_ulong_max_index , Ptr <gsl_matrix_ulong> -> Ptr CSize -> Ptr CSize -> IO ()
+#ccall gsl_matrix_ulong_memcpy , Ptr <gsl_matrix_ulong> -> Ptr <gsl_matrix_ulong> -> IO CInt
+#ccall gsl_matrix_ulong_min , Ptr <gsl_matrix_ulong> -> IO CULong
+#ccall gsl_matrix_ulong_min_index , Ptr <gsl_matrix_ulong> -> Ptr CSize -> Ptr CSize -> IO ()
+#ccall gsl_matrix_ulong_minmax , Ptr <gsl_matrix_ulong> -> Ptr CULong -> Ptr CULong -> IO ()
+#ccall gsl_matrix_ulong_minmax_index , Ptr <gsl_matrix_ulong> -> Ptr CSize -> Ptr CSize -> Ptr CSize -> Ptr CSize -> IO ()
+#ccall gsl_matrix_ulong_mul_elements , Ptr <gsl_matrix_ulong> -> Ptr <gsl_matrix_ulong> -> IO CInt
+-- ccall gsl_matrix_ulong_row , Ptr <gsl_matrix_ulong> -> CSize -> IO <gsl_vector_ulong_view>
+#ccall gsl_matrix_ulong_scale , Ptr <gsl_matrix_ulong> -> CDouble -> IO CInt
+#ccall gsl_matrix_ulong_set_all , Ptr <gsl_matrix_ulong> -> CULong -> IO ()
+#ccall gsl_matrix_ulong_set_identity , Ptr <gsl_matrix_ulong> -> IO ()
+#ccall gsl_matrix_ulong_set_zero , Ptr <gsl_matrix_ulong> -> IO ()
+#ccall gsl_matrix_ulong_sub , Ptr <gsl_matrix_ulong> -> Ptr <gsl_matrix_ulong> -> IO CInt
+-- ccall gsl_matrix_ulong_subcolumn , Ptr <gsl_matrix_ulong> -> CSize -> CSize -> CSize -> IO <gsl_vector_ulong_view>
+-- ccall gsl_matrix_ulong_subdiagonal , Ptr <gsl_matrix_ulong> -> CSize -> IO <gsl_vector_ulong_view>
+-- ccall gsl_matrix_ulong_submatrix , Ptr <gsl_matrix_ulong> -> CSize -> CSize -> CSize -> CSize -> IO <gsl_matrix_ulong_view>
+-- ccall gsl_matrix_ulong_subrow , Ptr <gsl_matrix_ulong> -> CSize -> CSize -> CSize -> IO <gsl_vector_ulong_view>
+-- ccall gsl_matrix_ulong_superdiagonal , Ptr <gsl_matrix_ulong> -> CSize -> IO <gsl_vector_ulong_view>
+#ccall gsl_matrix_ulong_swap , Ptr <gsl_matrix_ulong> -> Ptr <gsl_matrix_ulong> -> IO CInt
+#ccall gsl_matrix_ulong_swap_columns , Ptr <gsl_matrix_ulong> -> CSize -> CSize -> IO CInt
+#ccall gsl_matrix_ulong_swap_rowcol , Ptr <gsl_matrix_ulong> -> CSize -> CSize -> IO CInt
+#ccall gsl_matrix_ulong_swap_rows , Ptr <gsl_matrix_ulong> -> CSize -> CSize -> IO CInt
+#ccall gsl_matrix_ulong_transpose , Ptr <gsl_matrix_ulong> -> IO CInt
+#ccall gsl_matrix_ulong_transpose_memcpy , Ptr <gsl_matrix_ulong> -> Ptr <gsl_matrix_ulong> -> IO CInt
+-- ccall gsl_matrix_ulong_view_array , Ptr CULong -> CSize -> CSize -> IO <gsl_matrix_ulong_view>
+-- ccall gsl_matrix_ulong_view_array_with_tda , Ptr CULong -> CSize -> CSize -> CSize -> IO <gsl_matrix_ulong_view>
+-- ccall gsl_matrix_ulong_view_vector , Ptr <gsl_vector_ulong> -> CSize -> CSize -> IO <gsl_matrix_ulong_view>
+-- ccall gsl_matrix_ulong_view_vector_with_tda , Ptr <gsl_vector_ulong> -> CSize -> CSize -> CSize -> IO <gsl_matrix_ulong_view>
+#ccall gsl_matrix_ushort_add , Ptr <gsl_matrix_ushort> -> Ptr <gsl_matrix_ushort> -> IO CInt
+#ccall gsl_matrix_ushort_add_constant , Ptr <gsl_matrix_ushort> -> CDouble -> IO CInt
+#ccall gsl_matrix_ushort_add_diagonal , Ptr <gsl_matrix_ushort> -> CDouble -> IO CInt
+#ccall gsl_matrix_ushort_alloc , CSize -> CSize -> IO (Ptr <gsl_matrix_ushort>)
+#ccall gsl_matrix_ushort_alloc_from_block , Ptr <gsl_block_ushort> -> CSize -> CSize -> CSize -> CSize -> IO (Ptr <gsl_matrix_ushort>)
+#ccall gsl_matrix_ushort_alloc_from_matrix , Ptr <gsl_matrix_ushort> -> CSize -> CSize -> CSize -> CSize -> IO (Ptr <gsl_matrix_ushort>)
+#ccall gsl_matrix_ushort_calloc , CSize -> CSize -> IO (Ptr <gsl_matrix_ushort>)
+-- ccall gsl_matrix_ushort_column , Ptr <gsl_matrix_ushort> -> CSize -> IO <gsl_vector_ushort_view>
+-- ccall gsl_matrix_ushort_const_column , Ptr <gsl_matrix_ushort> -> CSize -> IO <gsl_vector_ushort_const_view>
+-- ccall gsl_matrix_ushort_const_diagonal , Ptr <gsl_matrix_ushort> -> IO <gsl_vector_ushort_const_view>
+-- ccall gsl_matrix_ushort_const_row , Ptr <gsl_matrix_ushort> -> CSize -> IO <gsl_vector_ushort_const_view>
+-- ccall gsl_matrix_ushort_const_subcolumn , Ptr <gsl_matrix_ushort> -> CSize -> CSize -> CSize -> IO <gsl_vector_ushort_const_view>
+-- ccall gsl_matrix_ushort_const_subdiagonal , Ptr <gsl_matrix_ushort> -> CSize -> IO <gsl_vector_ushort_const_view>
+-- ccall gsl_matrix_ushort_const_submatrix , Ptr <gsl_matrix_ushort> -> CSize -> CSize -> CSize -> CSize -> IO <gsl_matrix_ushort_const_view>
+-- ccall gsl_matrix_ushort_const_subrow , Ptr <gsl_matrix_ushort> -> CSize -> CSize -> CSize -> IO <gsl_vector_ushort_const_view>
+-- ccall gsl_matrix_ushort_const_superdiagonal , Ptr <gsl_matrix_ushort> -> CSize -> IO <gsl_vector_ushort_const_view>
+-- ccall gsl_matrix_ushort_const_view_array , Ptr CUShort -> CSize -> CSize -> IO <gsl_matrix_ushort_const_view>
+-- ccall gsl_matrix_ushort_const_view_array_with_tda , Ptr CUShort -> CSize -> CSize -> CSize -> IO <gsl_matrix_ushort_const_view>
+-- ccall gsl_matrix_ushort_const_view_vector , Ptr <gsl_vector_ushort> -> CSize -> CSize -> IO <gsl_matrix_ushort_const_view>
+-- ccall gsl_matrix_ushort_const_view_vector_with_tda , Ptr <gsl_vector_ushort> -> CSize -> CSize -> CSize -> IO <gsl_matrix_ushort_const_view>
+-- ccall gsl_matrix_ushort_diagonal , Ptr <gsl_matrix_ushort> -> IO <gsl_vector_ushort_view>
+#ccall gsl_matrix_ushort_div_elements , Ptr <gsl_matrix_ushort> -> Ptr <gsl_matrix_ushort> -> IO CInt
+#ccall gsl_matrix_ushort_fprintf , Ptr CFile -> Ptr <gsl_matrix_ushort> -> CString -> IO CInt
+#ccall gsl_matrix_ushort_fread , Ptr CFile -> Ptr <gsl_matrix_ushort> -> IO CInt
+#ccall gsl_matrix_ushort_free , Ptr <gsl_matrix_ushort> -> IO ()
+#ccall gsl_matrix_ushort_fscanf , Ptr CFile -> Ptr <gsl_matrix_ushort> -> IO CInt
+#ccall gsl_matrix_ushort_fwrite , Ptr CFile -> Ptr <gsl_matrix_ushort> -> IO CInt
+#ccall gsl_matrix_ushort_isneg , Ptr <gsl_matrix_ushort> -> IO CInt
+#ccall gsl_matrix_ushort_isnonneg , Ptr <gsl_matrix_ushort> -> IO CInt
+#ccall gsl_matrix_ushort_isnull , Ptr <gsl_matrix_ushort> -> IO CInt
+#ccall gsl_matrix_ushort_ispos , Ptr <gsl_matrix_ushort> -> IO CInt
+#ccall gsl_matrix_ushort_max , Ptr <gsl_matrix_ushort> -> IO CUShort
+#ccall gsl_matrix_ushort_max_index , Ptr <gsl_matrix_ushort> -> Ptr CSize -> Ptr CSize -> IO ()
+#ccall gsl_matrix_ushort_memcpy , Ptr <gsl_matrix_ushort> -> Ptr <gsl_matrix_ushort> -> IO CInt
+#ccall gsl_matrix_ushort_min , Ptr <gsl_matrix_ushort> -> IO CUShort
+#ccall gsl_matrix_ushort_min_index , Ptr <gsl_matrix_ushort> -> Ptr CSize -> Ptr CSize -> IO ()
+#ccall gsl_matrix_ushort_minmax , Ptr <gsl_matrix_ushort> -> Ptr CUShort -> Ptr CUShort -> IO ()
+#ccall gsl_matrix_ushort_minmax_index , Ptr <gsl_matrix_ushort> -> Ptr CSize -> Ptr CSize -> Ptr CSize -> Ptr CSize -> IO ()
+#ccall gsl_matrix_ushort_mul_elements , Ptr <gsl_matrix_ushort> -> Ptr <gsl_matrix_ushort> -> IO CInt
+-- ccall gsl_matrix_ushort_row , Ptr <gsl_matrix_ushort> -> CSize -> IO <gsl_vector_ushort_view>
+#ccall gsl_matrix_ushort_scale , Ptr <gsl_matrix_ushort> -> CDouble -> IO CInt
+#ccall gsl_matrix_ushort_set_all , Ptr <gsl_matrix_ushort> -> CUShort -> IO ()
+#ccall gsl_matrix_ushort_set_identity , Ptr <gsl_matrix_ushort> -> IO ()
+#ccall gsl_matrix_ushort_set_zero , Ptr <gsl_matrix_ushort> -> IO ()
+#ccall gsl_matrix_ushort_sub , Ptr <gsl_matrix_ushort> -> Ptr <gsl_matrix_ushort> -> IO CInt
+-- ccall gsl_matrix_ushort_subcolumn , Ptr <gsl_matrix_ushort> -> CSize -> CSize -> CSize -> IO <gsl_vector_ushort_view>
+-- ccall gsl_matrix_ushort_subdiagonal , Ptr <gsl_matrix_ushort> -> CSize -> IO <gsl_vector_ushort_view>
+-- ccall gsl_matrix_ushort_submatrix , Ptr <gsl_matrix_ushort> -> CSize -> CSize -> CSize -> CSize -> IO <gsl_matrix_ushort_view>
+-- ccall gsl_matrix_ushort_subrow , Ptr <gsl_matrix_ushort> -> CSize -> CSize -> CSize -> IO <gsl_vector_ushort_view>
+-- ccall gsl_matrix_ushort_superdiagonal , Ptr <gsl_matrix_ushort> -> CSize -> IO <gsl_vector_ushort_view>
+#ccall gsl_matrix_ushort_swap , Ptr <gsl_matrix_ushort> -> Ptr <gsl_matrix_ushort> -> IO CInt
+#ccall gsl_matrix_ushort_swap_columns , Ptr <gsl_matrix_ushort> -> CSize -> CSize -> IO CInt
+#ccall gsl_matrix_ushort_swap_rowcol , Ptr <gsl_matrix_ushort> -> CSize -> CSize -> IO CInt
+#ccall gsl_matrix_ushort_swap_rows , Ptr <gsl_matrix_ushort> -> CSize -> CSize -> IO CInt
+#ccall gsl_matrix_ushort_transpose , Ptr <gsl_matrix_ushort> -> IO CInt
+#ccall gsl_matrix_ushort_transpose_memcpy , Ptr <gsl_matrix_ushort> -> Ptr <gsl_matrix_ushort> -> IO CInt
+-- ccall gsl_matrix_ushort_view_array , Ptr CUShort -> CSize -> CSize -> IO <gsl_matrix_ushort_view>
+-- ccall gsl_matrix_ushort_view_array_with_tda , Ptr CUShort -> CSize -> CSize -> CSize -> IO <gsl_matrix_ushort_view>
+-- ccall gsl_matrix_ushort_view_vector , Ptr <gsl_vector_ushort> -> CSize -> CSize -> IO <gsl_matrix_ushort_view>
+-- ccall gsl_matrix_ushort_view_vector_with_tda , Ptr <gsl_vector_ushort> -> CSize -> CSize -> CSize -> IO <gsl_matrix_ushort_view>
+-- ccall gsl_matrix_view_array , Ptr CDouble -> CSize -> CSize -> IO <gsl_matrix_view>
+-- ccall gsl_matrix_view_array_with_tda , Ptr CDouble -> CSize -> CSize -> CSize -> IO <gsl_matrix_view>
+-- ccall gsl_matrix_view_vector , Ptr <gsl_vector> -> CSize -> CSize -> IO <gsl_matrix_view>
+-- ccall gsl_matrix_view_vector_with_tda , Ptr <gsl_vector> -> CSize -> CSize -> CSize -> IO <gsl_matrix_view>
diff --git a/src/Bindings/Gsl/VectorsAndMatrices/Vectors.c b/src/Bindings/Gsl/VectorsAndMatrices/Vectors.c
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/VectorsAndMatrices/Vectors.c
@@ -0,0 +1,6 @@
+#include <bindings.cmacros.h>
+#include <gsl/gsl_vector.h>
+
+BC_INLINE2(GSL_COMPLEX_AT,gsl_vector_complex*,size_t,gsl_complex*)
+BC_INLINE2(GSL_COMPLEX_FLOAT_AT,gsl_vector_complex_float*,size_t,gsl_complex_float*)
+/* BC_INLINE2(GSL_COMPLEX_LONG_DOUBLE_AT,gsl_vector_complex_long_double*,size_t,gsl_complex_long_double*) */
diff --git a/src/Bindings/Gsl/VectorsAndMatrices/Vectors.hsc b/src/Bindings/Gsl/VectorsAndMatrices/Vectors.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/VectorsAndMatrices/Vectors.hsc
@@ -0,0 +1,656 @@
+#include <bindings.dsl.h>
+#include <gsl/gsl_vector.h>
+
+-- | <http://www.gnu.org/software/gsl/manual/html_node/Vectors.html>
+
+module Bindings.Gsl.VectorsAndMatrices.Vectors where
+#strict_import
+import Bindings.Gsl.VectorsAndMatrices.DataTypes
+import Bindings.Gsl.ComplexNumbers
+
+#globalvar gsl_check_range , CInt
+
+#ccall gsl_vector_add , Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_vector_add_constant , Ptr <gsl_vector> -> CDouble -> IO CInt
+#ccall gsl_vector_alloc , CSize -> IO (Ptr <gsl_vector>)
+#ccall gsl_vector_alloc_col_from_matrix , Ptr <gsl_matrix> -> CSize -> IO (Ptr <gsl_vector>)
+#ccall gsl_vector_alloc_from_block , Ptr <gsl_block> -> CSize -> CSize -> CSize -> IO (Ptr <gsl_vector>)
+#ccall gsl_vector_alloc_from_vector , Ptr <gsl_vector> -> CSize -> CSize -> CSize -> IO (Ptr <gsl_vector>)
+#ccall gsl_vector_alloc_row_from_matrix , Ptr <gsl_matrix> -> CSize -> IO (Ptr <gsl_vector>)
+#ccall gsl_vector_calloc , CSize -> IO (Ptr <gsl_vector>)
+#ccall gsl_vector_char_add , Ptr <gsl_vector_char> -> Ptr <gsl_vector_char> -> IO CInt
+#ccall gsl_vector_char_add_constant , Ptr <gsl_vector_char> -> CDouble -> IO CInt
+#ccall gsl_vector_char_alloc , CSize -> IO (Ptr <gsl_vector_char>)
+#ccall gsl_vector_char_alloc_col_from_matrix , Ptr <gsl_matrix_char> -> CSize -> IO (Ptr <gsl_vector_char>)
+#ccall gsl_vector_char_alloc_from_block , Ptr <gsl_block_char> -> CSize -> CSize -> CSize -> IO (Ptr <gsl_vector_char>)
+#ccall gsl_vector_char_alloc_from_vector , Ptr <gsl_vector_char> -> CSize -> CSize -> CSize -> IO (Ptr <gsl_vector_char>)
+#ccall gsl_vector_char_alloc_row_from_matrix , Ptr <gsl_matrix_char> -> CSize -> IO (Ptr <gsl_vector_char>)
+#ccall gsl_vector_char_calloc , CSize -> IO (Ptr <gsl_vector_char>)
+#ccall gsl_vector_char_const_ptr , Ptr <gsl_vector_char> -> CSize -> IO CString
+-- ccall gsl_vector_char_const_subvector , Ptr <gsl_vector_char> -> CSize -> CSize -> IO <gsl_vector_char_const_view>
+-- ccall gsl_vector_char_const_subvector_with_stride , Ptr <gsl_vector_char> -> CSize -> CSize -> CSize -> IO <gsl_vector_char_const_view>
+-- ccall gsl_vector_char_const_view_array , CString -> CSize -> IO <gsl_vector_char_const_view>
+-- ccall gsl_vector_char_const_view_array_with_stride , CString -> CSize -> CSize -> IO <gsl_vector_char_const_view>
+#ccall gsl_vector_char_div , Ptr <gsl_vector_char> -> Ptr <gsl_vector_char> -> IO CInt
+#ccall gsl_vector_char_fprintf , Ptr CFile -> Ptr <gsl_vector_char> -> CString -> IO CInt
+#ccall gsl_vector_char_fread , Ptr CFile -> Ptr <gsl_vector_char> -> IO CInt
+#ccall gsl_vector_char_free , Ptr <gsl_vector_char> -> IO ()
+#ccall gsl_vector_char_fscanf , Ptr CFile -> Ptr <gsl_vector_char> -> IO CInt
+#ccall gsl_vector_char_fwrite , Ptr CFile -> Ptr <gsl_vector_char> -> IO CInt
+#ccall gsl_vector_char_get , Ptr <gsl_vector_char> -> CSize -> IO CChar
+#ccall gsl_vector_char_isneg , Ptr <gsl_vector_char> -> IO CInt
+#ccall gsl_vector_char_isnonneg , Ptr <gsl_vector_char> -> IO CInt
+#ccall gsl_vector_char_isnull , Ptr <gsl_vector_char> -> IO CInt
+#ccall gsl_vector_char_ispos , Ptr <gsl_vector_char> -> IO CInt
+#ccall gsl_vector_char_max , Ptr <gsl_vector_char> -> IO CChar
+#ccall gsl_vector_char_max_index , Ptr <gsl_vector_char> -> IO CSize
+#ccall gsl_vector_char_memcpy , Ptr <gsl_vector_char> -> Ptr <gsl_vector_char> -> IO CInt
+#ccall gsl_vector_char_min , Ptr <gsl_vector_char> -> IO CChar
+#ccall gsl_vector_char_min_index , Ptr <gsl_vector_char> -> IO CSize
+#ccall gsl_vector_char_minmax , Ptr <gsl_vector_char> -> CString -> CString -> IO ()
+#ccall gsl_vector_char_minmax_index , Ptr <gsl_vector_char> -> Ptr CSize -> Ptr CSize -> IO ()
+#ccall gsl_vector_char_mul , Ptr <gsl_vector_char> -> Ptr <gsl_vector_char> -> IO CInt
+#ccall gsl_vector_char_ptr , Ptr <gsl_vector_char> -> CSize -> IO CString
+#ccall gsl_vector_char_reverse , Ptr <gsl_vector_char> -> IO CInt
+#ccall gsl_vector_char_scale , Ptr <gsl_vector_char> -> CDouble -> IO CInt
+#ccall gsl_vector_char_set , Ptr <gsl_vector_char> -> CSize -> CChar -> IO ()
+#ccall gsl_vector_char_set_all , Ptr <gsl_vector_char> -> CChar -> IO ()
+#ccall gsl_vector_char_set_basis , Ptr <gsl_vector_char> -> CSize -> IO CInt
+#ccall gsl_vector_char_set_zero , Ptr <gsl_vector_char> -> IO ()
+#ccall gsl_vector_char_sub , Ptr <gsl_vector_char> -> Ptr <gsl_vector_char> -> IO CInt
+-- ccall gsl_vector_char_subvector , Ptr <gsl_vector_char> -> CSize -> CSize -> IO <gsl_vector_char_view>
+-- ccall gsl_vector_char_subvector_with_stride , Ptr <gsl_vector_char> -> CSize -> CSize -> CSize -> IO <gsl_vector_char_view>
+#ccall gsl_vector_char_swap , Ptr <gsl_vector_char> -> Ptr <gsl_vector_char> -> IO CInt
+#ccall gsl_vector_char_swap_elements , Ptr <gsl_vector_char> -> CSize -> CSize -> IO CInt
+-- ccall gsl_vector_char_view_array , CString -> CSize -> IO <gsl_vector_char_view>
+-- ccall gsl_vector_char_view_array_with_stride , CString -> CSize -> CSize -> IO <gsl_vector_char_view>
+#ccall gsl_vector_complex_add , Ptr <gsl_vector_complex> -> Ptr <gsl_vector_complex> -> IO CInt
+-- ccall gsl_vector_complex_add_constant , Ptr <gsl_vector_complex> -> <gsl_complex> -> IO CInt
+#ccall gsl_vector_complex_alloc , CSize -> IO (Ptr <gsl_vector_complex>)
+#ccall gsl_vector_complex_alloc_col_from_matrix , Ptr <gsl_matrix_complex> -> CSize -> IO (Ptr <gsl_vector_complex>)
+#ccall gsl_vector_complex_alloc_from_block , Ptr <gsl_block_complex> -> CSize -> CSize -> CSize -> IO (Ptr <gsl_vector_complex>)
+#ccall gsl_vector_complex_alloc_from_vector , Ptr <gsl_vector_complex> -> CSize -> CSize -> CSize -> IO (Ptr <gsl_vector_complex>)
+#ccall gsl_vector_complex_alloc_row_from_matrix , Ptr <gsl_matrix_complex> -> CSize -> IO (Ptr <gsl_vector_complex>)
+#ccall gsl_vector_complex_calloc , CSize -> IO (Ptr <gsl_vector_complex>)
+-- ccall gsl_vector_complex_const_imag , Ptr <gsl_vector_complex> -> IO <gsl_vector_const_view>
+#ccall gsl_vector_complex_const_ptr , Ptr <gsl_vector_complex> -> CSize -> IO (Ptr <gsl_complex>)
+-- ccall gsl_vector_complex_const_real , Ptr <gsl_vector_complex> -> IO <gsl_vector_const_view>
+-- ccall gsl_vector_complex_const_subvector , Ptr <gsl_vector_complex> -> CSize -> CSize -> IO <gsl_vector_complex_const_view>
+-- ccall gsl_vector_complex_const_subvector_with_stride , Ptr <gsl_vector_complex> -> CSize -> CSize -> CSize -> IO <gsl_vector_complex_const_view>
+-- ccall gsl_vector_complex_const_view_array , Ptr CDouble -> CSize -> IO <gsl_vector_complex_const_view>
+-- ccall gsl_vector_complex_const_view_array_with_stride , Ptr CDouble -> CSize -> CSize -> IO <gsl_vector_complex_const_view>
+#ccall gsl_vector_complex_div , Ptr <gsl_vector_complex> -> Ptr <gsl_vector_complex> -> IO CInt
+#ccall gsl_vector_complex_float_add , Ptr <gsl_vector_complex_float> -> Ptr <gsl_vector_complex_float> -> IO CInt
+-- ccall gsl_vector_complex_float_add_constant , Ptr <gsl_vector_complex_float> -> <gsl_complex_float> -> IO CInt
+#ccall gsl_vector_complex_float_alloc , CSize -> IO (Ptr <gsl_vector_complex_float>)
+#ccall gsl_vector_complex_float_alloc_col_from_matrix , Ptr <gsl_matrix_complex_float> -> CSize -> IO (Ptr <gsl_vector_complex_float>)
+#ccall gsl_vector_complex_float_alloc_from_block , Ptr <gsl_block_complex_float> -> CSize -> CSize -> CSize -> IO (Ptr <gsl_vector_complex_float>)
+#ccall gsl_vector_complex_float_alloc_from_vector , Ptr <gsl_vector_complex_float> -> CSize -> CSize -> CSize -> IO (Ptr <gsl_vector_complex_float>)
+#ccall gsl_vector_complex_float_alloc_row_from_matrix , Ptr <gsl_matrix_complex_float> -> CSize -> IO (Ptr <gsl_vector_complex_float>)
+#ccall gsl_vector_complex_float_calloc , CSize -> IO (Ptr <gsl_vector_complex_float>)
+-- ccall gsl_vector_complex_float_const_imag , Ptr <gsl_vector_complex_float> -> IO <gsl_vector_float_const_view>
+#ccall gsl_vector_complex_float_const_ptr , Ptr <gsl_vector_complex_float> -> CSize -> IO (Ptr <gsl_complex_float>)
+-- ccall gsl_vector_complex_float_const_real , Ptr <gsl_vector_complex_float> -> IO <gsl_vector_float_const_view>
+-- ccall gsl_vector_complex_float_const_subvector , Ptr <gsl_vector_complex_float> -> CSize -> CSize -> IO <gsl_vector_complex_float_const_view>
+-- ccall gsl_vector_complex_float_const_subvector_with_stride , Ptr <gsl_vector_complex_float> -> CSize -> CSize -> CSize -> IO <gsl_vector_complex_float_const_view>
+-- ccall gsl_vector_complex_float_const_view_array , Ptr CFloat -> CSize -> IO <gsl_vector_complex_float_const_view>
+-- ccall gsl_vector_complex_float_const_view_array_with_stride , Ptr CFloat -> CSize -> CSize -> IO <gsl_vector_complex_float_const_view>
+#ccall gsl_vector_complex_float_div , Ptr <gsl_vector_complex_float> -> Ptr <gsl_vector_complex_float> -> IO CInt
+#ccall gsl_vector_complex_float_fprintf , Ptr CFile -> Ptr <gsl_vector_complex_float> -> CString -> IO CInt
+#ccall gsl_vector_complex_float_fread , Ptr CFile -> Ptr <gsl_vector_complex_float> -> IO CInt
+#ccall gsl_vector_complex_float_free , Ptr <gsl_vector_complex_float> -> IO ()
+#ccall gsl_vector_complex_float_fscanf , Ptr CFile -> Ptr <gsl_vector_complex_float> -> IO CInt
+#ccall gsl_vector_complex_float_fwrite , Ptr CFile -> Ptr <gsl_vector_complex_float> -> IO CInt
+-- ccall gsl_vector_complex_float_get , Ptr <gsl_vector_complex_float> -> CSize -> IO <gsl_complex_float>
+-- ccall gsl_vector_complex_float_imag , Ptr <gsl_vector_complex_float> -> IO <gsl_vector_float_view>
+#ccall gsl_vector_complex_float_isneg , Ptr <gsl_vector_complex_float> -> IO CInt
+#ccall gsl_vector_complex_float_isnonneg , Ptr <gsl_vector_complex_float> -> IO CInt
+#ccall gsl_vector_complex_float_isnull , Ptr <gsl_vector_complex_float> -> IO CInt
+#ccall gsl_vector_complex_float_ispos , Ptr <gsl_vector_complex_float> -> IO CInt
+#ccall gsl_vector_complex_float_memcpy , Ptr <gsl_vector_complex_float> -> Ptr <gsl_vector_complex_float> -> IO CInt
+#ccall gsl_vector_complex_float_mul , Ptr <gsl_vector_complex_float> -> Ptr <gsl_vector_complex_float> -> IO CInt
+#ccall gsl_vector_complex_float_ptr , Ptr <gsl_vector_complex_float> -> CSize -> IO (Ptr <gsl_complex_float>)
+-- ccall gsl_vector_complex_float_real , Ptr <gsl_vector_complex_float> -> IO <gsl_vector_float_view>
+#ccall gsl_vector_complex_float_reverse , Ptr <gsl_vector_complex_float> -> IO CInt
+-- ccall gsl_vector_complex_float_scale , Ptr <gsl_vector_complex_float> -> <gsl_complex_float> -> IO CInt
+-- ccall gsl_vector_complex_float_set , Ptr <gsl_vector_complex_float> -> CSize -> <gsl_complex_float> -> IO ()
+-- ccall gsl_vector_complex_float_set_all , Ptr <gsl_vector_complex_float> -> <gsl_complex_float> -> IO ()
+#ccall gsl_vector_complex_float_set_basis , Ptr <gsl_vector_complex_float> -> CSize -> IO CInt
+#ccall gsl_vector_complex_float_set_zero , Ptr <gsl_vector_complex_float> -> IO ()
+#ccall gsl_vector_complex_float_sub , Ptr <gsl_vector_complex_float> -> Ptr <gsl_vector_complex_float> -> IO CInt
+-- ccall gsl_vector_complex_float_subvector , Ptr <gsl_vector_complex_float> -> CSize -> CSize -> IO <gsl_vector_complex_float_view>
+-- ccall gsl_vector_complex_float_subvector_with_stride , Ptr <gsl_vector_complex_float> -> CSize -> CSize -> CSize -> IO <gsl_vector_complex_float_view>
+#ccall gsl_vector_complex_float_swap , Ptr <gsl_vector_complex_float> -> Ptr <gsl_vector_complex_float> -> IO CInt
+#ccall gsl_vector_complex_float_swap_elements , Ptr <gsl_vector_complex_float> -> CSize -> CSize -> IO CInt
+-- ccall gsl_vector_complex_float_view_array , Ptr CFloat -> CSize -> IO <gsl_vector_complex_float_view>
+-- ccall gsl_vector_complex_float_view_array_with_stride , Ptr CFloat -> CSize -> CSize -> IO <gsl_vector_complex_float_view>
+#ccall gsl_vector_complex_fprintf , Ptr CFile -> Ptr <gsl_vector_complex> -> CString -> IO CInt
+#ccall gsl_vector_complex_fread , Ptr CFile -> Ptr <gsl_vector_complex> -> IO CInt
+#ccall gsl_vector_complex_free , Ptr <gsl_vector_complex> -> IO ()
+#ccall gsl_vector_complex_fscanf , Ptr CFile -> Ptr <gsl_vector_complex> -> IO CInt
+#ccall gsl_vector_complex_fwrite , Ptr CFile -> Ptr <gsl_vector_complex> -> IO CInt
+-- ccall gsl_vector_complex_get , Ptr <gsl_vector_complex> -> CSize -> IO <gsl_complex>
+-- ccall gsl_vector_complex_imag , Ptr <gsl_vector_complex> -> IO <gsl_vector_view>
+#ccall gsl_vector_complex_isneg , Ptr <gsl_vector_complex> -> IO CInt
+#ccall gsl_vector_complex_isnonneg , Ptr <gsl_vector_complex> -> IO CInt
+#ccall gsl_vector_complex_isnull , Ptr <gsl_vector_complex> -> IO CInt
+#ccall gsl_vector_complex_ispos , Ptr <gsl_vector_complex> -> IO CInt
+-- #ccall gsl_vector_complex_long_double_add , Ptr <gsl_vector_complex_long_double> -> Ptr <gsl_vector_complex_long_double> -> IO CInt
+-- ccall gsl_vector_complex_long_double_add_constant , Ptr <gsl_vector_complex_long_double> -> <gsl_complex_long_double> -> IO CInt
+-- #ccall gsl_vector_complex_long_double_alloc , CSize -> IO (Ptr <gsl_vector_complex_long_double>)
+
+#cinline GSL_COMPLEX_AT , Ptr <gsl_vector_complex> -> CSize -> IO (Ptr <gsl_complex>)
+#cinline GSL_COMPLEX_FLOAT_AT , Ptr <gsl_vector_complex_float> -> CSize -> IO (Ptr <gsl_complex_float>)
+-- #cinline GSL_COMPLEX_LONG_DOUBLE_AT , Ptr <gsl_vector_complex_long_double> -> CSize -> IO (Ptr <gsl_complex_long_double>)
+
+-- #ccall gsl_vector_complex_long_double_alloc_col_from_matrix , Ptr <gsl_matrix_complex_long_double> -> CSize -> IO (Ptr <gsl_vector_complex_long_double>)
+-- #ccall gsl_vector_complex_long_double_alloc_from_block , Ptr <gsl_block_complex_long_double> -> CSize -> CSize -> CSize -> IO (Ptr <gsl_vector_complex_long_double>)
+-- #ccall gsl_vector_complex_long_double_alloc_from_vector , Ptr <gsl_vector_complex_long_double> -> CSize -> CSize -> CSize -> IO (Ptr <gsl_vector_complex_long_double>)
+-- #ccall gsl_vector_complex_long_double_alloc_row_from_matrix , Ptr <gsl_matrix_complex_long_double> -> CSize -> IO (Ptr <gsl_vector_complex_long_double>)
+-- #ccall gsl_vector_complex_long_double_calloc , CSize -> IO (Ptr <gsl_vector_complex_long_double>)
+-- ccall gsl_vector_complex_long_double_const_imag , Ptr <gsl_vector_complex_long_double> -> IO <gsl_vector_long_double_const_view>
+-- #ccall gsl_vector_complex_long_double_const_ptr , Ptr <gsl_vector_complex_long_double> -> CSize -> IO (Ptr <gsl_complex_long_double>)
+-- ccall gsl_vector_complex_long_double_const_real , Ptr <gsl_vector_complex_long_double> -> IO <gsl_vector_long_double_const_view>
+-- ccall gsl_vector_complex_long_double_const_subvector , Ptr <gsl_vector_complex_long_double> -> CSize -> CSize -> IO <gsl_vector_complex_long_double_const_view>
+-- ccall gsl_vector_complex_long_double_const_subvector_with_stride , Ptr <gsl_vector_complex_long_double> -> CSize -> CSize -> CSize -> IO <gsl_vector_complex_long_double_const_view>
+-- ccall gsl_vector_complex_long_double_const_view_array , Ptr CLDouble -> CSize -> IO <gsl_vector_complex_long_double_const_view>
+-- ccall gsl_vector_complex_long_double_const_view_array_with_stride , Ptr CLDouble -> CSize -> CSize -> IO <gsl_vector_complex_long_double_const_view>
+-- #ccall gsl_vector_complex_long_double_div , Ptr <gsl_vector_complex_long_double> -> Ptr <gsl_vector_complex_long_double> -> IO CInt
+-- #ccall gsl_vector_complex_long_double_fprintf , Ptr CFile -> Ptr <gsl_vector_complex_long_double> -> CString -> IO CInt
+-- #ccall gsl_vector_complex_long_double_fread , Ptr CFile -> Ptr <gsl_vector_complex_long_double> -> IO CInt
+-- #ccall gsl_vector_complex_long_double_free , Ptr <gsl_vector_complex_long_double> -> IO ()
+-- #ccall gsl_vector_complex_long_double_fscanf , Ptr CFile -> Ptr <gsl_vector_complex_long_double> -> IO CInt
+-- #ccall gsl_vector_complex_long_double_fwrite , Ptr CFile -> Ptr <gsl_vector_complex_long_double> -> IO CInt
+-- ccall gsl_vector_complex_long_double_get , Ptr <gsl_vector_complex_long_double> -> CSize -> IO <gsl_complex_long_double>
+-- ccall gsl_vector_complex_long_double_imag , Ptr <gsl_vector_complex_long_double> -> IO <gsl_vector_long_double_view>
+-- #ccall gsl_vector_complex_long_double_isneg , Ptr <gsl_vector_complex_long_double> -> IO CInt
+-- #ccall gsl_vector_complex_long_double_isnonneg , Ptr <gsl_vector_complex_long_double> -> IO CInt
+-- #ccall gsl_vector_complex_long_double_isnull , Ptr <gsl_vector_complex_long_double> -> IO CInt
+-- #ccall gsl_vector_complex_long_double_ispos , Ptr <gsl_vector_complex_long_double> -> IO CInt
+-- #ccall gsl_vector_complex_long_double_memcpy , Ptr <gsl_vector_complex_long_double> -> Ptr <gsl_vector_complex_long_double> -> IO CInt
+-- #ccall gsl_vector_complex_long_double_mul , Ptr <gsl_vector_complex_long_double> -> Ptr <gsl_vector_complex_long_double> -> IO CInt
+-- #ccall gsl_vector_complex_long_double_ptr , Ptr <gsl_vector_complex_long_double> -> CSize -> IO (Ptr <gsl_complex_long_double>)
+-- ccall gsl_vector_complex_long_double_real , Ptr <gsl_vector_complex_long_double> -> IO <gsl_vector_long_double_view>
+-- #ccall gsl_vector_complex_long_double_reverse , Ptr <gsl_vector_complex_long_double> -> IO CInt
+-- ccall gsl_vector_complex_long_double_scale , Ptr <gsl_vector_complex_long_double> -> <gsl_complex_long_double> -> IO CInt
+-- ccall gsl_vector_complex_long_double_set , Ptr <gsl_vector_complex_long_double> -> CSize -> <gsl_complex_long_double> -> IO ()
+-- ccall gsl_vector_complex_long_double_set_all , Ptr <gsl_vector_complex_long_double> -> <gsl_complex_long_double> -> IO ()
+-- #ccall gsl_vector_complex_long_double_set_basis , Ptr <gsl_vector_complex_long_double> -> CSize -> IO CInt
+-- #ccall gsl_vector_complex_long_double_set_zero , Ptr <gsl_vector_complex_long_double> -> IO ()
+-- #ccall gsl_vector_complex_long_double_sub , Ptr <gsl_vector_complex_long_double> -> Ptr <gsl_vector_complex_long_double> -> IO CInt
+-- ccall gsl_vector_complex_long_double_subvector , Ptr <gsl_vector_complex_long_double> -> CSize -> CSize -> IO <gsl_vector_complex_long_double_view>
+-- ccall gsl_vector_complex_long_double_subvector_with_stride , Ptr <gsl_vector_complex_long_double> -> CSize -> CSize -> CSize -> IO <gsl_vector_complex_long_double_view>
+-- #ccall gsl_vector_complex_long_double_swap , Ptr <gsl_vector_complex_long_double> -> Ptr <gsl_vector_complex_long_double> -> IO CInt
+-- #ccall gsl_vector_complex_long_double_swap_elements , Ptr <gsl_vector_complex_long_double> -> CSize -> CSize -> IO CInt
+-- ccall gsl_vector_complex_long_double_view_array , Ptr CLDouble -> CSize -> IO <gsl_vector_complex_long_double_view>
+-- ccall gsl_vector_complex_long_double_view_array_with_stride , Ptr CLDouble -> CSize -> CSize -> IO <gsl_vector_complex_long_double_view>
+#ccall gsl_vector_complex_memcpy , Ptr <gsl_vector_complex> -> Ptr <gsl_vector_complex> -> IO CInt
+#ccall gsl_vector_complex_mul , Ptr <gsl_vector_complex> -> Ptr <gsl_vector_complex> -> IO CInt
+#ccall gsl_vector_complex_ptr , Ptr <gsl_vector_complex> -> CSize -> IO (Ptr <gsl_complex>)
+-- ccall gsl_vector_complex_real , Ptr <gsl_vector_complex> -> IO <gsl_vector_view>
+#ccall gsl_vector_complex_reverse , Ptr <gsl_vector_complex> -> IO CInt
+-- ccall gsl_vector_complex_scale , Ptr <gsl_vector_complex> -> <gsl_complex> -> IO CInt
+-- ccall gsl_vector_complex_set , Ptr <gsl_vector_complex> -> CSize -> <gsl_complex> -> IO ()
+-- ccall gsl_vector_complex_set_all , Ptr <gsl_vector_complex> -> <gsl_complex> -> IO ()
+#ccall gsl_vector_complex_set_basis , Ptr <gsl_vector_complex> -> CSize -> IO CInt
+#ccall gsl_vector_complex_set_zero , Ptr <gsl_vector_complex> -> IO ()
+#ccall gsl_vector_complex_sub , Ptr <gsl_vector_complex> -> Ptr <gsl_vector_complex> -> IO CInt
+-- ccall gsl_vector_complex_subvector , Ptr <gsl_vector_complex> -> CSize -> CSize -> IO <gsl_vector_complex_view>
+-- ccall gsl_vector_complex_subvector_with_stride , Ptr <gsl_vector_complex> -> CSize -> CSize -> CSize -> IO <gsl_vector_complex_view>
+#ccall gsl_vector_complex_swap , Ptr <gsl_vector_complex> -> Ptr <gsl_vector_complex> -> IO CInt
+#ccall gsl_vector_complex_swap_elements , Ptr <gsl_vector_complex> -> CSize -> CSize -> IO CInt
+-- ccall gsl_vector_complex_view_array , Ptr CDouble -> CSize -> IO <gsl_vector_complex_view>
+-- ccall gsl_vector_complex_view_array_with_stride , Ptr CDouble -> CSize -> CSize -> IO <gsl_vector_complex_view>
+#ccall gsl_vector_const_ptr , Ptr <gsl_vector> -> CSize -> IO (Ptr CDouble)
+-- ccall gsl_vector_const_subvector , Ptr <gsl_vector> -> CSize -> CSize -> IO <gsl_vector_const_view>
+-- ccall gsl_vector_const_subvector_with_stride , Ptr <gsl_vector> -> CSize -> CSize -> CSize -> IO <gsl_vector_const_view>
+-- ccall gsl_vector_const_view_array , Ptr CDouble -> CSize -> IO <gsl_vector_const_view>
+-- ccall gsl_vector_const_view_array_with_stride , Ptr CDouble -> CSize -> CSize -> IO <gsl_vector_const_view>
+#ccall gsl_vector_div , Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_vector_float_add , Ptr <gsl_vector_float> -> Ptr <gsl_vector_float> -> IO CInt
+#ccall gsl_vector_float_add_constant , Ptr <gsl_vector_float> -> CDouble -> IO CInt
+#ccall gsl_vector_float_alloc , CSize -> IO (Ptr <gsl_vector_float>)
+#ccall gsl_vector_float_alloc_col_from_matrix , Ptr <gsl_matrix_float> -> CSize -> IO (Ptr <gsl_vector_float>)
+#ccall gsl_vector_float_alloc_from_block , Ptr <gsl_block_float> -> CSize -> CSize -> CSize -> IO (Ptr <gsl_vector_float>)
+#ccall gsl_vector_float_alloc_from_vector , Ptr <gsl_vector_float> -> CSize -> CSize -> CSize -> IO (Ptr <gsl_vector_float>)
+#ccall gsl_vector_float_alloc_row_from_matrix , Ptr <gsl_matrix_float> -> CSize -> IO (Ptr <gsl_vector_float>)
+#ccall gsl_vector_float_calloc , CSize -> IO (Ptr <gsl_vector_float>)
+#ccall gsl_vector_float_const_ptr , Ptr <gsl_vector_float> -> CSize -> IO (Ptr CFloat)
+-- ccall gsl_vector_float_const_subvector , Ptr <gsl_vector_float> -> CSize -> CSize -> IO <gsl_vector_float_const_view>
+-- ccall gsl_vector_float_const_subvector_with_stride , Ptr <gsl_vector_float> -> CSize -> CSize -> CSize -> IO <gsl_vector_float_const_view>
+-- ccall gsl_vector_float_const_view_array , Ptr CFloat -> CSize -> IO <gsl_vector_float_const_view>
+-- ccall gsl_vector_float_const_view_array_with_stride , Ptr CFloat -> CSize -> CSize -> IO <gsl_vector_float_const_view>
+#ccall gsl_vector_float_div , Ptr <gsl_vector_float> -> Ptr <gsl_vector_float> -> IO CInt
+#ccall gsl_vector_float_fprintf , Ptr CFile -> Ptr <gsl_vector_float> -> CString -> IO CInt
+#ccall gsl_vector_float_fread , Ptr CFile -> Ptr <gsl_vector_float> -> IO CInt
+#ccall gsl_vector_float_free , Ptr <gsl_vector_float> -> IO ()
+#ccall gsl_vector_float_fscanf , Ptr CFile -> Ptr <gsl_vector_float> -> IO CInt
+#ccall gsl_vector_float_fwrite , Ptr CFile -> Ptr <gsl_vector_float> -> IO CInt
+#ccall gsl_vector_float_get , Ptr <gsl_vector_float> -> CSize -> IO CFloat
+#ccall gsl_vector_float_isneg , Ptr <gsl_vector_float> -> IO CInt
+#ccall gsl_vector_float_isnonneg , Ptr <gsl_vector_float> -> IO CInt
+#ccall gsl_vector_float_isnull , Ptr <gsl_vector_float> -> IO CInt
+#ccall gsl_vector_float_ispos , Ptr <gsl_vector_float> -> IO CInt
+#ccall gsl_vector_float_max , Ptr <gsl_vector_float> -> IO CFloat
+#ccall gsl_vector_float_max_index , Ptr <gsl_vector_float> -> IO CSize
+#ccall gsl_vector_float_memcpy , Ptr <gsl_vector_float> -> Ptr <gsl_vector_float> -> IO CInt
+#ccall gsl_vector_float_min , Ptr <gsl_vector_float> -> IO CFloat
+#ccall gsl_vector_float_min_index , Ptr <gsl_vector_float> -> IO CSize
+#ccall gsl_vector_float_minmax , Ptr <gsl_vector_float> -> Ptr CFloat -> Ptr CFloat -> IO ()
+#ccall gsl_vector_float_minmax_index , Ptr <gsl_vector_float> -> Ptr CSize -> Ptr CSize -> IO ()
+#ccall gsl_vector_float_mul , Ptr <gsl_vector_float> -> Ptr <gsl_vector_float> -> IO CInt
+#ccall gsl_vector_float_ptr , Ptr <gsl_vector_float> -> CSize -> IO (Ptr CFloat)
+#ccall gsl_vector_float_reverse , Ptr <gsl_vector_float> -> IO CInt
+#ccall gsl_vector_float_scale , Ptr <gsl_vector_float> -> CDouble -> IO CInt
+#ccall gsl_vector_float_set , Ptr <gsl_vector_float> -> CSize -> CFloat -> IO ()
+#ccall gsl_vector_float_set_all , Ptr <gsl_vector_float> -> CFloat -> IO ()
+#ccall gsl_vector_float_set_basis , Ptr <gsl_vector_float> -> CSize -> IO CInt
+#ccall gsl_vector_float_set_zero , Ptr <gsl_vector_float> -> IO ()
+#ccall gsl_vector_float_sub , Ptr <gsl_vector_float> -> Ptr <gsl_vector_float> -> IO CInt
+-- ccall gsl_vector_float_subvector , Ptr <gsl_vector_float> -> CSize -> CSize -> IO <gsl_vector_float_view>
+-- ccall gsl_vector_float_subvector_with_stride , Ptr <gsl_vector_float> -> CSize -> CSize -> CSize -> IO <gsl_vector_float_view>
+#ccall gsl_vector_float_swap , Ptr <gsl_vector_float> -> Ptr <gsl_vector_float> -> IO CInt
+#ccall gsl_vector_float_swap_elements , Ptr <gsl_vector_float> -> CSize -> CSize -> IO CInt
+-- ccall gsl_vector_float_view_array , Ptr CFloat -> CSize -> IO <gsl_vector_float_view>
+-- ccall gsl_vector_float_view_array_with_stride , Ptr CFloat -> CSize -> CSize -> IO <gsl_vector_float_view>
+#ccall gsl_vector_fprintf , Ptr CFile -> Ptr <gsl_vector> -> CString -> IO CInt
+#ccall gsl_vector_fread , Ptr CFile -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_vector_free , Ptr <gsl_vector> -> IO ()
+#ccall gsl_vector_fscanf , Ptr CFile -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_vector_fwrite , Ptr CFile -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_vector_get , Ptr <gsl_vector> -> CSize -> IO CDouble
+#ccall gsl_vector_int_add , Ptr <gsl_vector_int> -> Ptr <gsl_vector_int> -> IO CInt
+#ccall gsl_vector_int_add_constant , Ptr <gsl_vector_int> -> CDouble -> IO CInt
+#ccall gsl_vector_int_alloc , CSize -> IO (Ptr <gsl_vector_int>)
+#ccall gsl_vector_int_alloc_col_from_matrix , Ptr <gsl_matrix_int> -> CSize -> IO (Ptr <gsl_vector_int>)
+#ccall gsl_vector_int_alloc_from_block , Ptr <gsl_block_int> -> CSize -> CSize -> CSize -> IO (Ptr <gsl_vector_int>)
+#ccall gsl_vector_int_alloc_from_vector , Ptr <gsl_vector_int> -> CSize -> CSize -> CSize -> IO (Ptr <gsl_vector_int>)
+#ccall gsl_vector_int_alloc_row_from_matrix , Ptr <gsl_matrix_int> -> CSize -> IO (Ptr <gsl_vector_int>)
+#ccall gsl_vector_int_calloc , CSize -> IO (Ptr <gsl_vector_int>)
+#ccall gsl_vector_int_const_ptr , Ptr <gsl_vector_int> -> CSize -> IO (Ptr CInt)
+-- ccall gsl_vector_int_const_subvector , Ptr <gsl_vector_int> -> CSize -> CSize -> IO <gsl_vector_int_const_view>
+-- ccall gsl_vector_int_const_subvector_with_stride , Ptr <gsl_vector_int> -> CSize -> CSize -> CSize -> IO <gsl_vector_int_const_view>
+-- ccall gsl_vector_int_const_view_array , Ptr CInt -> CSize -> IO <gsl_vector_int_const_view>
+-- ccall gsl_vector_int_const_view_array_with_stride , Ptr CInt -> CSize -> CSize -> IO <gsl_vector_int_const_view>
+#ccall gsl_vector_int_div , Ptr <gsl_vector_int> -> Ptr <gsl_vector_int> -> IO CInt
+#ccall gsl_vector_int_fprintf , Ptr CFile -> Ptr <gsl_vector_int> -> CString -> IO CInt
+#ccall gsl_vector_int_fread , Ptr CFile -> Ptr <gsl_vector_int> -> IO CInt
+#ccall gsl_vector_int_free , Ptr <gsl_vector_int> -> IO ()
+#ccall gsl_vector_int_fscanf , Ptr CFile -> Ptr <gsl_vector_int> -> IO CInt
+#ccall gsl_vector_int_fwrite , Ptr CFile -> Ptr <gsl_vector_int> -> IO CInt
+#ccall gsl_vector_int_get , Ptr <gsl_vector_int> -> CSize -> IO CInt
+#ccall gsl_vector_int_isneg , Ptr <gsl_vector_int> -> IO CInt
+#ccall gsl_vector_int_isnonneg , Ptr <gsl_vector_int> -> IO CInt
+#ccall gsl_vector_int_isnull , Ptr <gsl_vector_int> -> IO CInt
+#ccall gsl_vector_int_ispos , Ptr <gsl_vector_int> -> IO CInt
+#ccall gsl_vector_int_max , Ptr <gsl_vector_int> -> IO CInt
+#ccall gsl_vector_int_max_index , Ptr <gsl_vector_int> -> IO CSize
+#ccall gsl_vector_int_memcpy , Ptr <gsl_vector_int> -> Ptr <gsl_vector_int> -> IO CInt
+#ccall gsl_vector_int_min , Ptr <gsl_vector_int> -> IO CInt
+#ccall gsl_vector_int_min_index , Ptr <gsl_vector_int> -> IO CSize
+#ccall gsl_vector_int_minmax , Ptr <gsl_vector_int> -> Ptr CInt -> Ptr CInt -> IO ()
+#ccall gsl_vector_int_minmax_index , Ptr <gsl_vector_int> -> Ptr CSize -> Ptr CSize -> IO ()
+#ccall gsl_vector_int_mul , Ptr <gsl_vector_int> -> Ptr <gsl_vector_int> -> IO CInt
+#ccall gsl_vector_int_ptr , Ptr <gsl_vector_int> -> CSize -> IO (Ptr CInt)
+#ccall gsl_vector_int_reverse , Ptr <gsl_vector_int> -> IO CInt
+#ccall gsl_vector_int_scale , Ptr <gsl_vector_int> -> CDouble -> IO CInt
+#ccall gsl_vector_int_set , Ptr <gsl_vector_int> -> CSize -> CInt -> IO ()
+#ccall gsl_vector_int_set_all , Ptr <gsl_vector_int> -> CInt -> IO ()
+#ccall gsl_vector_int_set_basis , Ptr <gsl_vector_int> -> CSize -> IO CInt
+#ccall gsl_vector_int_set_zero , Ptr <gsl_vector_int> -> IO ()
+#ccall gsl_vector_int_sub , Ptr <gsl_vector_int> -> Ptr <gsl_vector_int> -> IO CInt
+-- ccall gsl_vector_int_subvector , Ptr <gsl_vector_int> -> CSize -> CSize -> IO <gsl_vector_int_view>
+-- ccall gsl_vector_int_subvector_with_stride , Ptr <gsl_vector_int> -> CSize -> CSize -> CSize -> IO <gsl_vector_int_view>
+#ccall gsl_vector_int_swap , Ptr <gsl_vector_int> -> Ptr <gsl_vector_int> -> IO CInt
+#ccall gsl_vector_int_swap_elements , Ptr <gsl_vector_int> -> CSize -> CSize -> IO CInt
+-- ccall gsl_vector_int_view_array , Ptr CInt -> CSize -> IO <gsl_vector_int_view>
+-- ccall gsl_vector_int_view_array_with_stride , Ptr CInt -> CSize -> CSize -> IO <gsl_vector_int_view>
+#ccall gsl_vector_isneg , Ptr <gsl_vector> -> IO CInt
+#ccall gsl_vector_isnonneg , Ptr <gsl_vector> -> IO CInt
+#ccall gsl_vector_isnull , Ptr <gsl_vector> -> IO CInt
+#ccall gsl_vector_ispos , Ptr <gsl_vector> -> IO CInt
+#ccall gsl_vector_equal , Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_vector_long_add , Ptr <gsl_vector_long> -> Ptr <gsl_vector_long> -> IO CInt
+#ccall gsl_vector_long_add_constant , Ptr <gsl_vector_long> -> CDouble -> IO CInt
+#ccall gsl_vector_long_alloc , CSize -> IO (Ptr <gsl_vector_long>)
+#ccall gsl_vector_long_alloc_col_from_matrix , Ptr <gsl_matrix_long> -> CSize -> IO (Ptr <gsl_vector_long>)
+#ccall gsl_vector_long_alloc_from_block , Ptr <gsl_block_long> -> CSize -> CSize -> CSize -> IO (Ptr <gsl_vector_long>)
+#ccall gsl_vector_long_alloc_from_vector , Ptr <gsl_vector_long> -> CSize -> CSize -> CSize -> IO (Ptr <gsl_vector_long>)
+#ccall gsl_vector_long_alloc_row_from_matrix , Ptr <gsl_matrix_long> -> CSize -> IO (Ptr <gsl_vector_long>)
+#ccall gsl_vector_long_calloc , CSize -> IO (Ptr <gsl_vector_long>)
+#ccall gsl_vector_long_const_ptr , Ptr <gsl_vector_long> -> CSize -> IO (Ptr CLong)
+-- ccall gsl_vector_long_const_subvector , Ptr <gsl_vector_long> -> CSize -> CSize -> IO <gsl_vector_long_const_view>
+-- ccall gsl_vector_long_const_subvector_with_stride , Ptr <gsl_vector_long> -> CSize -> CSize -> CSize -> IO <gsl_vector_long_const_view>
+-- ccall gsl_vector_long_const_view_array , Ptr CLong -> CSize -> IO <gsl_vector_long_const_view>
+-- ccall gsl_vector_long_const_view_array_with_stride , Ptr CLong -> CSize -> CSize -> IO <gsl_vector_long_const_view>
+#ccall gsl_vector_long_div , Ptr <gsl_vector_long> -> Ptr <gsl_vector_long> -> IO CInt
+-- #ccall gsl_vector_long_double_add , Ptr <gsl_vector_long_double> -> Ptr <gsl_vector_long_double> -> IO CInt
+-- #ccall gsl_vector_long_double_add_constant , Ptr <gsl_vector_long_double> -> CDouble -> IO CInt
+-- #ccall gsl_vector_long_double_alloc , CSize -> IO (Ptr <gsl_vector_long_double>)
+-- #ccall gsl_vector_long_double_alloc_col_from_matrix , Ptr <gsl_matrix_long_double> -> CSize -> IO (Ptr <gsl_vector_long_double>)
+-- #ccall gsl_vector_long_double_alloc_from_block , Ptr <gsl_block_long_double> -> CSize -> CSize -> CSize -> IO (Ptr <gsl_vector_long_double>)
+-- #ccall gsl_vector_long_double_alloc_from_vector , Ptr <gsl_vector_long_double> -> CSize -> CSize -> CSize -> IO (Ptr <gsl_vector_long_double>)
+-- #ccall gsl_vector_long_double_alloc_row_from_matrix , Ptr <gsl_matrix_long_double> -> CSize -> IO (Ptr <gsl_vector_long_double>)
+-- #ccall gsl_vector_long_double_calloc , CSize -> IO (Ptr <gsl_vector_long_double>)
+-- #ccall gsl_vector_long_double_const_ptr , Ptr <gsl_vector_long_double> -> CSize -> IO (Ptr CLDouble)
+-- ccall gsl_vector_long_double_const_subvector , Ptr <gsl_vector_long_double> -> CSize -> CSize -> IO <gsl_vector_long_double_const_view>
+-- ccall gsl_vector_long_double_const_subvector_with_stride , Ptr <gsl_vector_long_double> -> CSize -> CSize -> CSize -> IO <gsl_vector_long_double_const_view>
+-- ccall gsl_vector_long_double_const_view_array , Ptr CLDouble -> CSize -> IO <gsl_vector_long_double_const_view>
+-- ccall gsl_vector_long_double_const_view_array_with_stride , Ptr CLDouble -> CSize -> CSize -> IO <gsl_vector_long_double_const_view>
+-- #ccall gsl_vector_long_double_div , Ptr <gsl_vector_long_double> -> Ptr <gsl_vector_long_double> -> IO CInt
+-- #ccall gsl_vector_long_double_fprintf , Ptr CFile -> Ptr <gsl_vector_long_double> -> CString -> IO CInt
+-- #ccall gsl_vector_long_double_fread , Ptr CFile -> Ptr <gsl_vector_long_double> -> IO CInt
+-- #ccall gsl_vector_long_double_free , Ptr <gsl_vector_long_double> -> IO ()
+-- #ccall gsl_vector_long_double_fscanf , Ptr CFile -> Ptr <gsl_vector_long_double> -> IO CInt
+-- #ccall gsl_vector_long_double_fwrite , Ptr CFile -> Ptr <gsl_vector_long_double> -> IO CInt
+-- #ccall gsl_vector_long_double_get , Ptr <gsl_vector_long_double> -> CSize -> IO CLDouble
+-- #ccall gsl_vector_long_double_isneg , Ptr <gsl_vector_long_double> -> IO CInt
+-- #ccall gsl_vector_long_double_isnonneg , Ptr <gsl_vector_long_double> -> IO CInt
+-- #ccall gsl_vector_long_double_isnull , Ptr <gsl_vector_long_double> -> IO CInt
+-- #ccall gsl_vector_long_double_ispos , Ptr <gsl_vector_long_double> -> IO CInt
+-- #ccall gsl_vector_long_double_max , Ptr <gsl_vector_long_double> -> IO CLDouble
+-- #ccall gsl_vector_long_double_max_index , Ptr <gsl_vector_long_double> -> IO CSize
+-- #ccall gsl_vector_long_double_memcpy , Ptr <gsl_vector_long_double> -> Ptr <gsl_vector_long_double> -> IO CInt
+-- #ccall gsl_vector_long_double_min , Ptr <gsl_vector_long_double> -> IO CLDouble
+-- #ccall gsl_vector_long_double_min_index , Ptr <gsl_vector_long_double> -> IO CSize
+-- #ccall gsl_vector_long_double_minmax , Ptr <gsl_vector_long_double> -> Ptr CLDouble -> Ptr CLDouble -> IO ()
+-- #ccall gsl_vector_long_double_minmax_index , Ptr <gsl_vector_long_double> -> Ptr CSize -> Ptr CSize -> IO ()
+-- #ccall gsl_vector_long_double_mul , Ptr <gsl_vector_long_double> -> Ptr <gsl_vector_long_double> -> IO CInt
+-- #ccall gsl_vector_long_double_ptr , Ptr <gsl_vector_long_double> -> CSize -> IO (Ptr CLDouble)
+-- #ccall gsl_vector_long_double_reverse , Ptr <gsl_vector_long_double> -> IO CInt
+-- #ccall gsl_vector_long_double_scale , Ptr <gsl_vector_long_double> -> CDouble -> IO CInt
+-- #ccall gsl_vector_long_double_set , Ptr <gsl_vector_long_double> -> CSize -> CLDouble -> IO ()
+-- #ccall gsl_vector_long_double_set_all , Ptr <gsl_vector_long_double> -> CLDouble -> IO ()
+-- #ccall gsl_vector_long_double_set_basis , Ptr <gsl_vector_long_double> -> CSize -> IO CInt
+-- #ccall gsl_vector_long_double_set_zero , Ptr <gsl_vector_long_double> -> IO ()
+-- #ccall gsl_vector_long_double_sub , Ptr <gsl_vector_long_double> -> Ptr <gsl_vector_long_double> -> IO CInt
+-- ccall gsl_vector_long_double_subvector , Ptr <gsl_vector_long_double> -> CSize -> CSize -> IO <gsl_vector_long_double_view>
+-- ccall gsl_vector_long_double_subvector_with_stride , Ptr <gsl_vector_long_double> -> CSize -> CSize -> CSize -> IO <gsl_vector_long_double_view>
+-- #ccall gsl_vector_long_double_swap , Ptr <gsl_vector_long_double> -> Ptr <gsl_vector_long_double> -> IO CInt
+-- #ccall gsl_vector_long_double_swap_elements , Ptr <gsl_vector_long_double> -> CSize -> CSize -> IO CInt
+-- ccall gsl_vector_long_double_view_array , Ptr CLDouble -> CSize -> IO <gsl_vector_long_double_view>
+-- ccall gsl_vector_long_double_view_array_with_stride , Ptr CLDouble -> CSize -> CSize -> IO <gsl_vector_long_double_view>
+#ccall gsl_vector_long_fprintf , Ptr CFile -> Ptr <gsl_vector_long> -> CString -> IO CInt
+#ccall gsl_vector_long_fread , Ptr CFile -> Ptr <gsl_vector_long> -> IO CInt
+#ccall gsl_vector_long_free , Ptr <gsl_vector_long> -> IO ()
+#ccall gsl_vector_long_fscanf , Ptr CFile -> Ptr <gsl_vector_long> -> IO CInt
+#ccall gsl_vector_long_fwrite , Ptr CFile -> Ptr <gsl_vector_long> -> IO CInt
+#ccall gsl_vector_long_get , Ptr <gsl_vector_long> -> CSize -> IO CLong
+#ccall gsl_vector_long_isneg , Ptr <gsl_vector_long> -> IO CInt
+#ccall gsl_vector_long_isnonneg , Ptr <gsl_vector_long> -> IO CInt
+#ccall gsl_vector_long_isnull , Ptr <gsl_vector_long> -> IO CInt
+#ccall gsl_vector_long_ispos , Ptr <gsl_vector_long> -> IO CInt
+#ccall gsl_vector_long_max , Ptr <gsl_vector_long> -> IO CLong
+#ccall gsl_vector_long_max_index , Ptr <gsl_vector_long> -> IO CSize
+#ccall gsl_vector_long_memcpy , Ptr <gsl_vector_long> -> Ptr <gsl_vector_long> -> IO CInt
+#ccall gsl_vector_long_min , Ptr <gsl_vector_long> -> IO CLong
+#ccall gsl_vector_long_min_index , Ptr <gsl_vector_long> -> IO CSize
+#ccall gsl_vector_long_minmax , Ptr <gsl_vector_long> -> Ptr CLong -> Ptr CLong -> IO ()
+#ccall gsl_vector_long_minmax_index , Ptr <gsl_vector_long> -> Ptr CSize -> Ptr CSize -> IO ()
+#ccall gsl_vector_long_mul , Ptr <gsl_vector_long> -> Ptr <gsl_vector_long> -> IO CInt
+#ccall gsl_vector_long_ptr , Ptr <gsl_vector_long> -> CSize -> IO (Ptr CLong)
+#ccall gsl_vector_long_reverse , Ptr <gsl_vector_long> -> IO CInt
+#ccall gsl_vector_long_scale , Ptr <gsl_vector_long> -> CDouble -> IO CInt
+#ccall gsl_vector_long_set , Ptr <gsl_vector_long> -> CSize -> CLong -> IO ()
+#ccall gsl_vector_long_set_all , Ptr <gsl_vector_long> -> CLong -> IO ()
+#ccall gsl_vector_long_set_basis , Ptr <gsl_vector_long> -> CSize -> IO CInt
+#ccall gsl_vector_long_set_zero , Ptr <gsl_vector_long> -> IO ()
+#ccall gsl_vector_long_sub , Ptr <gsl_vector_long> -> Ptr <gsl_vector_long> -> IO CInt
+-- ccall gsl_vector_long_subvector , Ptr <gsl_vector_long> -> CSize -> CSize -> IO <gsl_vector_long_view>
+-- ccall gsl_vector_long_subvector_with_stride , Ptr <gsl_vector_long> -> CSize -> CSize -> CSize -> IO <gsl_vector_long_view>
+#ccall gsl_vector_long_swap , Ptr <gsl_vector_long> -> Ptr <gsl_vector_long> -> IO CInt
+#ccall gsl_vector_long_swap_elements , Ptr <gsl_vector_long> -> CSize -> CSize -> IO CInt
+-- ccall gsl_vector_long_view_array , Ptr CLong -> CSize -> IO <gsl_vector_long_view>
+-- ccall gsl_vector_long_view_array_with_stride , Ptr CLong -> CSize -> CSize -> IO <gsl_vector_long_view>
+#ccall gsl_vector_max , Ptr <gsl_vector> -> IO CDouble
+#ccall gsl_vector_max_index , Ptr <gsl_vector> -> IO CSize
+#ccall gsl_vector_memcpy , Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_vector_min , Ptr <gsl_vector> -> IO CDouble
+#ccall gsl_vector_min_index , Ptr <gsl_vector> -> IO CSize
+#ccall gsl_vector_minmax , Ptr <gsl_vector> -> Ptr CDouble -> Ptr CDouble -> IO ()
+#ccall gsl_vector_minmax_index , Ptr <gsl_vector> -> Ptr CSize -> Ptr CSize -> IO ()
+#ccall gsl_vector_mul , Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_vector_ptr , Ptr <gsl_vector> -> CSize -> IO (Ptr CDouble)
+#ccall gsl_vector_reverse , Ptr <gsl_vector> -> IO CInt
+#ccall gsl_vector_scale , Ptr <gsl_vector> -> CDouble -> IO CInt
+#ccall gsl_vector_set , Ptr <gsl_vector> -> CSize -> CDouble -> IO ()
+#ccall gsl_vector_set_all , Ptr <gsl_vector> -> CDouble -> IO ()
+#ccall gsl_vector_set_basis , Ptr <gsl_vector> -> CSize -> IO CInt
+#ccall gsl_vector_set_zero , Ptr <gsl_vector> -> IO ()
+#ccall gsl_vector_short_add , Ptr <gsl_vector_short> -> Ptr <gsl_vector_short> -> IO CInt
+#ccall gsl_vector_short_add_constant , Ptr <gsl_vector_short> -> CDouble -> IO CInt
+#ccall gsl_vector_short_alloc , CSize -> IO (Ptr <gsl_vector_short>)
+#ccall gsl_vector_short_alloc_col_from_matrix , Ptr <gsl_matrix_short> -> CSize -> IO (Ptr <gsl_vector_short>)
+#ccall gsl_vector_short_alloc_from_block , Ptr <gsl_block_short> -> CSize -> CSize -> CSize -> IO (Ptr <gsl_vector_short>)
+#ccall gsl_vector_short_alloc_from_vector , Ptr <gsl_vector_short> -> CSize -> CSize -> CSize -> IO (Ptr <gsl_vector_short>)
+#ccall gsl_vector_short_alloc_row_from_matrix , Ptr <gsl_matrix_short> -> CSize -> IO (Ptr <gsl_vector_short>)
+#ccall gsl_vector_short_calloc , CSize -> IO (Ptr <gsl_vector_short>)
+#ccall gsl_vector_short_const_ptr , Ptr <gsl_vector_short> -> CSize -> IO (Ptr CShort)
+-- ccall gsl_vector_short_const_subvector , Ptr <gsl_vector_short> -> CSize -> CSize -> IO <gsl_vector_short_const_view>
+-- ccall gsl_vector_short_const_subvector_with_stride , Ptr <gsl_vector_short> -> CSize -> CSize -> CSize -> IO <gsl_vector_short_const_view>
+-- ccall gsl_vector_short_const_view_array , Ptr CShort -> CSize -> IO <gsl_vector_short_const_view>
+-- ccall gsl_vector_short_const_view_array_with_stride , Ptr CShort -> CSize -> CSize -> IO <gsl_vector_short_const_view>
+#ccall gsl_vector_short_div , Ptr <gsl_vector_short> -> Ptr <gsl_vector_short> -> IO CInt
+#ccall gsl_vector_short_fprintf , Ptr CFile -> Ptr <gsl_vector_short> -> CString -> IO CInt
+#ccall gsl_vector_short_fread , Ptr CFile -> Ptr <gsl_vector_short> -> IO CInt
+#ccall gsl_vector_short_free , Ptr <gsl_vector_short> -> IO ()
+#ccall gsl_vector_short_fscanf , Ptr CFile -> Ptr <gsl_vector_short> -> IO CInt
+#ccall gsl_vector_short_fwrite , Ptr CFile -> Ptr <gsl_vector_short> -> IO CInt
+#ccall gsl_vector_short_get , Ptr <gsl_vector_short> -> CSize -> IO CShort
+#ccall gsl_vector_short_isneg , Ptr <gsl_vector_short> -> IO CInt
+#ccall gsl_vector_short_isnonneg , Ptr <gsl_vector_short> -> IO CInt
+#ccall gsl_vector_short_isnull , Ptr <gsl_vector_short> -> IO CInt
+#ccall gsl_vector_short_ispos , Ptr <gsl_vector_short> -> IO CInt
+#ccall gsl_vector_short_max , Ptr <gsl_vector_short> -> IO CShort
+#ccall gsl_vector_short_max_index , Ptr <gsl_vector_short> -> IO CSize
+#ccall gsl_vector_short_memcpy , Ptr <gsl_vector_short> -> Ptr <gsl_vector_short> -> IO CInt
+#ccall gsl_vector_short_min , Ptr <gsl_vector_short> -> IO CShort
+#ccall gsl_vector_short_min_index , Ptr <gsl_vector_short> -> IO CSize
+#ccall gsl_vector_short_minmax , Ptr <gsl_vector_short> -> Ptr CShort -> Ptr CShort -> IO ()
+#ccall gsl_vector_short_minmax_index , Ptr <gsl_vector_short> -> Ptr CSize -> Ptr CSize -> IO ()
+#ccall gsl_vector_short_mul , Ptr <gsl_vector_short> -> Ptr <gsl_vector_short> -> IO CInt
+#ccall gsl_vector_short_ptr , Ptr <gsl_vector_short> -> CSize -> IO (Ptr CShort)
+#ccall gsl_vector_short_reverse , Ptr <gsl_vector_short> -> IO CInt
+#ccall gsl_vector_short_scale , Ptr <gsl_vector_short> -> CDouble -> IO CInt
+#ccall gsl_vector_short_set , Ptr <gsl_vector_short> -> CSize -> CShort -> IO ()
+#ccall gsl_vector_short_set_all , Ptr <gsl_vector_short> -> CShort -> IO ()
+#ccall gsl_vector_short_set_basis , Ptr <gsl_vector_short> -> CSize -> IO CInt
+#ccall gsl_vector_short_set_zero , Ptr <gsl_vector_short> -> IO ()
+#ccall gsl_vector_short_sub , Ptr <gsl_vector_short> -> Ptr <gsl_vector_short> -> IO CInt
+-- ccall gsl_vector_short_subvector , Ptr <gsl_vector_short> -> CSize -> CSize -> IO <gsl_vector_short_view>
+-- ccall gsl_vector_short_subvector_with_stride , Ptr <gsl_vector_short> -> CSize -> CSize -> CSize -> IO <gsl_vector_short_view>
+#ccall gsl_vector_short_swap , Ptr <gsl_vector_short> -> Ptr <gsl_vector_short> -> IO CInt
+#ccall gsl_vector_short_swap_elements , Ptr <gsl_vector_short> -> CSize -> CSize -> IO CInt
+-- ccall gsl_vector_short_view_array , Ptr CShort -> CSize -> IO <gsl_vector_short_view>
+-- ccall gsl_vector_short_view_array_with_stride , Ptr CShort -> CSize -> CSize -> IO <gsl_vector_short_view>
+#ccall gsl_vector_sub , Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+-- ccall gsl_vector_subvector , Ptr <gsl_vector> -> CSize -> CSize -> IO <gsl_vector_view>
+-- ccall gsl_vector_subvector_with_stride , Ptr <gsl_vector> -> CSize -> CSize -> CSize -> IO <gsl_vector_view>
+#ccall gsl_vector_swap , Ptr <gsl_vector> -> Ptr <gsl_vector> -> IO CInt
+#ccall gsl_vector_swap_elements , Ptr <gsl_vector> -> CSize -> CSize -> IO CInt
+#ccall gsl_vector_uchar_add , Ptr <gsl_vector_uchar> -> Ptr <gsl_vector_uchar> -> IO CInt
+#ccall gsl_vector_uchar_add_constant , Ptr <gsl_vector_uchar> -> CDouble -> IO CInt
+#ccall gsl_vector_uchar_alloc , CSize -> IO (Ptr <gsl_vector_uchar>)
+#ccall gsl_vector_uchar_alloc_col_from_matrix , Ptr <gsl_matrix_uchar> -> CSize -> IO (Ptr <gsl_vector_uchar>)
+#ccall gsl_vector_uchar_alloc_from_block , Ptr <gsl_block_uchar> -> CSize -> CSize -> CSize -> IO (Ptr <gsl_vector_uchar>)
+#ccall gsl_vector_uchar_alloc_from_vector , Ptr <gsl_vector_uchar> -> CSize -> CSize -> CSize -> IO (Ptr <gsl_vector_uchar>)
+#ccall gsl_vector_uchar_alloc_row_from_matrix , Ptr <gsl_matrix_uchar> -> CSize -> IO (Ptr <gsl_vector_uchar>)
+#ccall gsl_vector_uchar_calloc , CSize -> IO (Ptr <gsl_vector_uchar>)
+#ccall gsl_vector_uchar_const_ptr , Ptr <gsl_vector_uchar> -> CSize -> IO (Ptr CUChar)
+-- ccall gsl_vector_uchar_const_subvector , Ptr <gsl_vector_uchar> -> CSize -> CSize -> IO <gsl_vector_uchar_const_view>
+-- ccall gsl_vector_uchar_const_subvector_with_stride , Ptr <gsl_vector_uchar> -> CSize -> CSize -> CSize -> IO <gsl_vector_uchar_const_view>
+-- ccall gsl_vector_uchar_const_view_array , Ptr CUChar -> CSize -> IO <gsl_vector_uchar_const_view>
+-- ccall gsl_vector_uchar_const_view_array_with_stride , Ptr CUChar -> CSize -> CSize -> IO <gsl_vector_uchar_const_view>
+#ccall gsl_vector_uchar_div , Ptr <gsl_vector_uchar> -> Ptr <gsl_vector_uchar> -> IO CInt
+#ccall gsl_vector_uchar_fprintf , Ptr CFile -> Ptr <gsl_vector_uchar> -> CString -> IO CInt
+#ccall gsl_vector_uchar_fread , Ptr CFile -> Ptr <gsl_vector_uchar> -> IO CInt
+#ccall gsl_vector_uchar_free , Ptr <gsl_vector_uchar> -> IO ()
+#ccall gsl_vector_uchar_fscanf , Ptr CFile -> Ptr <gsl_vector_uchar> -> IO CInt
+#ccall gsl_vector_uchar_fwrite , Ptr CFile -> Ptr <gsl_vector_uchar> -> IO CInt
+#ccall gsl_vector_uchar_get , Ptr <gsl_vector_uchar> -> CSize -> IO CUChar
+#ccall gsl_vector_uchar_isneg , Ptr <gsl_vector_uchar> -> IO CInt
+#ccall gsl_vector_uchar_isnonneg , Ptr <gsl_vector_uchar> -> IO CInt
+#ccall gsl_vector_uchar_isnull , Ptr <gsl_vector_uchar> -> IO CInt
+#ccall gsl_vector_uchar_ispos , Ptr <gsl_vector_uchar> -> IO CInt
+#ccall gsl_vector_uchar_max , Ptr <gsl_vector_uchar> -> IO CUChar
+#ccall gsl_vector_uchar_max_index , Ptr <gsl_vector_uchar> -> IO CSize
+#ccall gsl_vector_uchar_memcpy , Ptr <gsl_vector_uchar> -> Ptr <gsl_vector_uchar> -> IO CInt
+#ccall gsl_vector_uchar_min , Ptr <gsl_vector_uchar> -> IO CUChar
+#ccall gsl_vector_uchar_min_index , Ptr <gsl_vector_uchar> -> IO CSize
+#ccall gsl_vector_uchar_minmax , Ptr <gsl_vector_uchar> -> Ptr CUChar -> Ptr CUChar -> IO ()
+#ccall gsl_vector_uchar_minmax_index , Ptr <gsl_vector_uchar> -> Ptr CSize -> Ptr CSize -> IO ()
+#ccall gsl_vector_uchar_mul , Ptr <gsl_vector_uchar> -> Ptr <gsl_vector_uchar> -> IO CInt
+#ccall gsl_vector_uchar_ptr , Ptr <gsl_vector_uchar> -> CSize -> IO (Ptr CUChar)
+#ccall gsl_vector_uchar_reverse , Ptr <gsl_vector_uchar> -> IO CInt
+#ccall gsl_vector_uchar_scale , Ptr <gsl_vector_uchar> -> CDouble -> IO CInt
+#ccall gsl_vector_uchar_set , Ptr <gsl_vector_uchar> -> CSize -> CUChar -> IO ()
+#ccall gsl_vector_uchar_set_all , Ptr <gsl_vector_uchar> -> CUChar -> IO ()
+#ccall gsl_vector_uchar_set_basis , Ptr <gsl_vector_uchar> -> CSize -> IO CInt
+#ccall gsl_vector_uchar_set_zero , Ptr <gsl_vector_uchar> -> IO ()
+#ccall gsl_vector_uchar_sub , Ptr <gsl_vector_uchar> -> Ptr <gsl_vector_uchar> -> IO CInt
+-- ccall gsl_vector_uchar_subvector , Ptr <gsl_vector_uchar> -> CSize -> CSize -> IO <gsl_vector_uchar_view>
+-- ccall gsl_vector_uchar_subvector_with_stride , Ptr <gsl_vector_uchar> -> CSize -> CSize -> CSize -> IO <gsl_vector_uchar_view>
+#ccall gsl_vector_uchar_swap , Ptr <gsl_vector_uchar> -> Ptr <gsl_vector_uchar> -> IO CInt
+#ccall gsl_vector_uchar_swap_elements , Ptr <gsl_vector_uchar> -> CSize -> CSize -> IO CInt
+-- ccall gsl_vector_uchar_view_array , Ptr CUChar -> CSize -> IO <gsl_vector_uchar_view>
+-- ccall gsl_vector_uchar_view_array_with_stride , Ptr CUChar -> CSize -> CSize -> IO <gsl_vector_uchar_view>
+#ccall gsl_vector_uint_add , Ptr <gsl_vector_uint> -> Ptr <gsl_vector_uint> -> IO CInt
+#ccall gsl_vector_uint_add_constant , Ptr <gsl_vector_uint> -> CDouble -> IO CInt
+#ccall gsl_vector_uint_alloc , CSize -> IO (Ptr <gsl_vector_uint>)
+#ccall gsl_vector_uint_alloc_col_from_matrix , Ptr <gsl_matrix_uint> -> CSize -> IO (Ptr <gsl_vector_uint>)
+#ccall gsl_vector_uint_alloc_from_block , Ptr <gsl_block_uint> -> CSize -> CSize -> CSize -> IO (Ptr <gsl_vector_uint>)
+#ccall gsl_vector_uint_alloc_from_vector , Ptr <gsl_vector_uint> -> CSize -> CSize -> CSize -> IO (Ptr <gsl_vector_uint>)
+#ccall gsl_vector_uint_alloc_row_from_matrix , Ptr <gsl_matrix_uint> -> CSize -> IO (Ptr <gsl_vector_uint>)
+#ccall gsl_vector_uint_calloc , CSize -> IO (Ptr <gsl_vector_uint>)
+#ccall gsl_vector_uint_const_ptr , Ptr <gsl_vector_uint> -> CSize -> IO (Ptr CUInt)
+-- ccall gsl_vector_uint_const_subvector , Ptr <gsl_vector_uint> -> CSize -> CSize -> IO <gsl_vector_uint_const_view>
+-- ccall gsl_vector_uint_const_subvector_with_stride , Ptr <gsl_vector_uint> -> CSize -> CSize -> CSize -> IO <gsl_vector_uint_const_view>
+-- ccall gsl_vector_uint_const_view_array , Ptr CUInt -> CSize -> IO <gsl_vector_uint_const_view>
+-- ccall gsl_vector_uint_const_view_array_with_stride , Ptr CUInt -> CSize -> CSize -> IO <gsl_vector_uint_const_view>
+#ccall gsl_vector_uint_div , Ptr <gsl_vector_uint> -> Ptr <gsl_vector_uint> -> IO CInt
+#ccall gsl_vector_uint_fprintf , Ptr CFile -> Ptr <gsl_vector_uint> -> CString -> IO CInt
+#ccall gsl_vector_uint_fread , Ptr CFile -> Ptr <gsl_vector_uint> -> IO CInt
+#ccall gsl_vector_uint_free , Ptr <gsl_vector_uint> -> IO ()
+#ccall gsl_vector_uint_fscanf , Ptr CFile -> Ptr <gsl_vector_uint> -> IO CInt
+#ccall gsl_vector_uint_fwrite , Ptr CFile -> Ptr <gsl_vector_uint> -> IO CInt
+#ccall gsl_vector_uint_get , Ptr <gsl_vector_uint> -> CSize -> IO CUInt
+#ccall gsl_vector_uint_isneg , Ptr <gsl_vector_uint> -> IO CInt
+#ccall gsl_vector_uint_isnonneg , Ptr <gsl_vector_uint> -> IO CInt
+#ccall gsl_vector_uint_isnull , Ptr <gsl_vector_uint> -> IO CInt
+#ccall gsl_vector_uint_ispos , Ptr <gsl_vector_uint> -> IO CInt
+#ccall gsl_vector_uint_max , Ptr <gsl_vector_uint> -> IO CUInt
+#ccall gsl_vector_uint_max_index , Ptr <gsl_vector_uint> -> IO CSize
+#ccall gsl_vector_uint_memcpy , Ptr <gsl_vector_uint> -> Ptr <gsl_vector_uint> -> IO CInt
+#ccall gsl_vector_uint_min , Ptr <gsl_vector_uint> -> IO CUInt
+#ccall gsl_vector_uint_min_index , Ptr <gsl_vector_uint> -> IO CSize
+#ccall gsl_vector_uint_minmax , Ptr <gsl_vector_uint> -> Ptr CUInt -> Ptr CUInt -> IO ()
+#ccall gsl_vector_uint_minmax_index , Ptr <gsl_vector_uint> -> Ptr CSize -> Ptr CSize -> IO ()
+#ccall gsl_vector_uint_mul , Ptr <gsl_vector_uint> -> Ptr <gsl_vector_uint> -> IO CInt
+#ccall gsl_vector_uint_ptr , Ptr <gsl_vector_uint> -> CSize -> IO (Ptr CUInt)
+#ccall gsl_vector_uint_reverse , Ptr <gsl_vector_uint> -> IO CInt
+#ccall gsl_vector_uint_scale , Ptr <gsl_vector_uint> -> CDouble -> IO CInt
+#ccall gsl_vector_uint_set , Ptr <gsl_vector_uint> -> CSize -> CUInt -> IO ()
+#ccall gsl_vector_uint_set_all , Ptr <gsl_vector_uint> -> CUInt -> IO ()
+#ccall gsl_vector_uint_set_basis , Ptr <gsl_vector_uint> -> CSize -> IO CInt
+#ccall gsl_vector_uint_set_zero , Ptr <gsl_vector_uint> -> IO ()
+#ccall gsl_vector_uint_sub , Ptr <gsl_vector_uint> -> Ptr <gsl_vector_uint> -> IO CInt
+-- ccall gsl_vector_uint_subvector , Ptr <gsl_vector_uint> -> CSize -> CSize -> IO <gsl_vector_uint_view>
+-- ccall gsl_vector_uint_subvector_with_stride , Ptr <gsl_vector_uint> -> CSize -> CSize -> CSize -> IO <gsl_vector_uint_view>
+#ccall gsl_vector_uint_swap , Ptr <gsl_vector_uint> -> Ptr <gsl_vector_uint> -> IO CInt
+#ccall gsl_vector_uint_swap_elements , Ptr <gsl_vector_uint> -> CSize -> CSize -> IO CInt
+-- ccall gsl_vector_uint_view_array , Ptr CUInt -> CSize -> IO <gsl_vector_uint_view>
+-- ccall gsl_vector_uint_view_array_with_stride , Ptr CUInt -> CSize -> CSize -> IO <gsl_vector_uint_view>
+#ccall gsl_vector_ulong_add , Ptr <gsl_vector_ulong> -> Ptr <gsl_vector_ulong> -> IO CInt
+#ccall gsl_vector_ulong_add_constant , Ptr <gsl_vector_ulong> -> CDouble -> IO CInt
+#ccall gsl_vector_ulong_alloc , CSize -> IO (Ptr <gsl_vector_ulong>)
+#ccall gsl_vector_ulong_alloc_col_from_matrix , Ptr <gsl_matrix_ulong> -> CSize -> IO (Ptr <gsl_vector_ulong>)
+#ccall gsl_vector_ulong_alloc_from_block , Ptr <gsl_block_ulong> -> CSize -> CSize -> CSize -> IO (Ptr <gsl_vector_ulong>)
+#ccall gsl_vector_ulong_alloc_from_vector , Ptr <gsl_vector_ulong> -> CSize -> CSize -> CSize -> IO (Ptr <gsl_vector_ulong>)
+#ccall gsl_vector_ulong_alloc_row_from_matrix , Ptr <gsl_matrix_ulong> -> CSize -> IO (Ptr <gsl_vector_ulong>)
+#ccall gsl_vector_ulong_calloc , CSize -> IO (Ptr <gsl_vector_ulong>)
+#ccall gsl_vector_ulong_const_ptr , Ptr <gsl_vector_ulong> -> CSize -> IO (Ptr CULong)
+-- ccall gsl_vector_ulong_const_subvector , Ptr <gsl_vector_ulong> -> CSize -> CSize -> IO <gsl_vector_ulong_const_view>
+-- ccall gsl_vector_ulong_const_subvector_with_stride , Ptr <gsl_vector_ulong> -> CSize -> CSize -> CSize -> IO <gsl_vector_ulong_const_view>
+-- ccall gsl_vector_ulong_const_view_array , Ptr CULong -> CSize -> IO <gsl_vector_ulong_const_view>
+-- ccall gsl_vector_ulong_const_view_array_with_stride , Ptr CULong -> CSize -> CSize -> IO <gsl_vector_ulong_const_view>
+#ccall gsl_vector_ulong_div , Ptr <gsl_vector_ulong> -> Ptr <gsl_vector_ulong> -> IO CInt
+#ccall gsl_vector_ulong_fprintf , Ptr CFile -> Ptr <gsl_vector_ulong> -> CString -> IO CInt
+#ccall gsl_vector_ulong_fread , Ptr CFile -> Ptr <gsl_vector_ulong> -> IO CInt
+#ccall gsl_vector_ulong_free , Ptr <gsl_vector_ulong> -> IO ()
+#ccall gsl_vector_ulong_fscanf , Ptr CFile -> Ptr <gsl_vector_ulong> -> IO CInt
+#ccall gsl_vector_ulong_fwrite , Ptr CFile -> Ptr <gsl_vector_ulong> -> IO CInt
+#ccall gsl_vector_ulong_get , Ptr <gsl_vector_ulong> -> CSize -> IO CULong
+#ccall gsl_vector_ulong_isneg , Ptr <gsl_vector_ulong> -> IO CInt
+#ccall gsl_vector_ulong_isnonneg , Ptr <gsl_vector_ulong> -> IO CInt
+#ccall gsl_vector_ulong_isnull , Ptr <gsl_vector_ulong> -> IO CInt
+#ccall gsl_vector_ulong_ispos , Ptr <gsl_vector_ulong> -> IO CInt
+#ccall gsl_vector_ulong_max , Ptr <gsl_vector_ulong> -> IO CULong
+#ccall gsl_vector_ulong_max_index , Ptr <gsl_vector_ulong> -> IO CSize
+#ccall gsl_vector_ulong_memcpy , Ptr <gsl_vector_ulong> -> Ptr <gsl_vector_ulong> -> IO CInt
+#ccall gsl_vector_ulong_min , Ptr <gsl_vector_ulong> -> IO CULong
+#ccall gsl_vector_ulong_min_index , Ptr <gsl_vector_ulong> -> IO CSize
+#ccall gsl_vector_ulong_minmax , Ptr <gsl_vector_ulong> -> Ptr CULong -> Ptr CULong -> IO ()
+#ccall gsl_vector_ulong_minmax_index , Ptr <gsl_vector_ulong> -> Ptr CSize -> Ptr CSize -> IO ()
+#ccall gsl_vector_ulong_mul , Ptr <gsl_vector_ulong> -> Ptr <gsl_vector_ulong> -> IO CInt
+#ccall gsl_vector_ulong_ptr , Ptr <gsl_vector_ulong> -> CSize -> IO (Ptr CULong)
+#ccall gsl_vector_ulong_reverse , Ptr <gsl_vector_ulong> -> IO CInt
+#ccall gsl_vector_ulong_scale , Ptr <gsl_vector_ulong> -> CDouble -> IO CInt
+#ccall gsl_vector_ulong_set , Ptr <gsl_vector_ulong> -> CSize -> CULong -> IO ()
+#ccall gsl_vector_ulong_set_all , Ptr <gsl_vector_ulong> -> CULong -> IO ()
+#ccall gsl_vector_ulong_set_basis , Ptr <gsl_vector_ulong> -> CSize -> IO CInt
+#ccall gsl_vector_ulong_set_zero , Ptr <gsl_vector_ulong> -> IO ()
+#ccall gsl_vector_ulong_sub , Ptr <gsl_vector_ulong> -> Ptr <gsl_vector_ulong> -> IO CInt
+-- ccall gsl_vector_ulong_subvector , Ptr <gsl_vector_ulong> -> CSize -> CSize -> IO <gsl_vector_ulong_view>
+-- ccall gsl_vector_ulong_subvector_with_stride , Ptr <gsl_vector_ulong> -> CSize -> CSize -> CSize -> IO <gsl_vector_ulong_view>
+#ccall gsl_vector_ulong_swap , Ptr <gsl_vector_ulong> -> Ptr <gsl_vector_ulong> -> IO CInt
+#ccall gsl_vector_ulong_swap_elements , Ptr <gsl_vector_ulong> -> CSize -> CSize -> IO CInt
+-- ccall gsl_vector_ulong_view_array , Ptr CULong -> CSize -> IO <gsl_vector_ulong_view>
+-- ccall gsl_vector_ulong_view_array_with_stride , Ptr CULong -> CSize -> CSize -> IO <gsl_vector_ulong_view>
+#ccall gsl_vector_ushort_add , Ptr <gsl_vector_ushort> -> Ptr <gsl_vector_ushort> -> IO CInt
+#ccall gsl_vector_ushort_add_constant , Ptr <gsl_vector_ushort> -> CDouble -> IO CInt
+#ccall gsl_vector_ushort_alloc , CSize -> IO (Ptr <gsl_vector_ushort>)
+#ccall gsl_vector_ushort_alloc_col_from_matrix , Ptr <gsl_matrix_ushort> -> CSize -> IO (Ptr <gsl_vector_ushort>)
+#ccall gsl_vector_ushort_alloc_from_block , Ptr <gsl_block_ushort> -> CSize -> CSize -> CSize -> IO (Ptr <gsl_vector_ushort>)
+#ccall gsl_vector_ushort_alloc_from_vector , Ptr <gsl_vector_ushort> -> CSize -> CSize -> CSize -> IO (Ptr <gsl_vector_ushort>)
+#ccall gsl_vector_ushort_alloc_row_from_matrix , Ptr <gsl_matrix_ushort> -> CSize -> IO (Ptr <gsl_vector_ushort>)
+#ccall gsl_vector_ushort_calloc , CSize -> IO (Ptr <gsl_vector_ushort>)
+#ccall gsl_vector_ushort_const_ptr , Ptr <gsl_vector_ushort> -> CSize -> IO (Ptr CUShort)
+-- ccall gsl_vector_ushort_const_subvector , Ptr <gsl_vector_ushort> -> CSize -> CSize -> IO <gsl_vector_ushort_const_view>
+-- ccall gsl_vector_ushort_const_subvector_with_stride , Ptr <gsl_vector_ushort> -> CSize -> CSize -> CSize -> IO <gsl_vector_ushort_const_view>
+-- ccall gsl_vector_ushort_const_view_array , Ptr CUShort -> CSize -> IO <gsl_vector_ushort_const_view>
+-- ccall gsl_vector_ushort_const_view_array_with_stride , Ptr CUShort -> CSize -> CSize -> IO <gsl_vector_ushort_const_view>
+#ccall gsl_vector_ushort_div , Ptr <gsl_vector_ushort> -> Ptr <gsl_vector_ushort> -> IO CInt
+#ccall gsl_vector_ushort_fprintf , Ptr CFile -> Ptr <gsl_vector_ushort> -> CString -> IO CInt
+#ccall gsl_vector_ushort_fread , Ptr CFile -> Ptr <gsl_vector_ushort> -> IO CInt
+#ccall gsl_vector_ushort_free , Ptr <gsl_vector_ushort> -> IO ()
+#ccall gsl_vector_ushort_fscanf , Ptr CFile -> Ptr <gsl_vector_ushort> -> IO CInt
+#ccall gsl_vector_ushort_fwrite , Ptr CFile -> Ptr <gsl_vector_ushort> -> IO CInt
+#ccall gsl_vector_ushort_get , Ptr <gsl_vector_ushort> -> CSize -> IO CUShort
+#ccall gsl_vector_ushort_isneg , Ptr <gsl_vector_ushort> -> IO CInt
+#ccall gsl_vector_ushort_isnonneg , Ptr <gsl_vector_ushort> -> IO CInt
+#ccall gsl_vector_ushort_isnull , Ptr <gsl_vector_ushort> -> IO CInt
+#ccall gsl_vector_ushort_ispos , Ptr <gsl_vector_ushort> -> IO CInt
+#ccall gsl_vector_ushort_max , Ptr <gsl_vector_ushort> -> IO CUShort
+#ccall gsl_vector_ushort_max_index , Ptr <gsl_vector_ushort> -> IO CSize
+#ccall gsl_vector_ushort_memcpy , Ptr <gsl_vector_ushort> -> Ptr <gsl_vector_ushort> -> IO CInt
+#ccall gsl_vector_ushort_min , Ptr <gsl_vector_ushort> -> IO CUShort
+#ccall gsl_vector_ushort_min_index , Ptr <gsl_vector_ushort> -> IO CSize
+#ccall gsl_vector_ushort_minmax , Ptr <gsl_vector_ushort> -> Ptr CUShort -> Ptr CUShort -> IO ()
+#ccall gsl_vector_ushort_minmax_index , Ptr <gsl_vector_ushort> -> Ptr CSize -> Ptr CSize -> IO ()
+#ccall gsl_vector_ushort_mul , Ptr <gsl_vector_ushort> -> Ptr <gsl_vector_ushort> -> IO CInt
+#ccall gsl_vector_ushort_ptr , Ptr <gsl_vector_ushort> -> CSize -> IO (Ptr CUShort)
+#ccall gsl_vector_ushort_reverse , Ptr <gsl_vector_ushort> -> IO CInt
+#ccall gsl_vector_ushort_scale , Ptr <gsl_vector_ushort> -> CDouble -> IO CInt
+#ccall gsl_vector_ushort_set , Ptr <gsl_vector_ushort> -> CSize -> CUShort -> IO ()
+#ccall gsl_vector_ushort_set_all , Ptr <gsl_vector_ushort> -> CUShort -> IO ()
+#ccall gsl_vector_ushort_set_basis , Ptr <gsl_vector_ushort> -> CSize -> IO CInt
+#ccall gsl_vector_ushort_set_zero , Ptr <gsl_vector_ushort> -> IO ()
+#ccall gsl_vector_ushort_sub , Ptr <gsl_vector_ushort> -> Ptr <gsl_vector_ushort> -> IO CInt
+-- ccall gsl_vector_ushort_subvector , Ptr <gsl_vector_ushort> -> CSize -> CSize -> IO <gsl_vector_ushort_view>
+-- ccall gsl_vector_ushort_subvector_with_stride , Ptr <gsl_vector_ushort> -> CSize -> CSize -> CSize -> IO <gsl_vector_ushort_view>
+#ccall gsl_vector_ushort_swap , Ptr <gsl_vector_ushort> -> Ptr <gsl_vector_ushort> -> IO CInt
+#ccall gsl_vector_ushort_swap_elements , Ptr <gsl_vector_ushort> -> CSize -> CSize -> IO CInt
+-- ccall gsl_vector_ushort_view_array , Ptr CUShort -> CSize -> IO <gsl_vector_ushort_view>
+-- ccall gsl_vector_ushort_view_array_with_stride , Ptr CUShort -> CSize -> CSize -> IO <gsl_vector_ushort_view>
+-- ccall gsl_vector_view_array , Ptr CDouble -> CSize -> IO <gsl_vector_view>
+-- ccall gsl_vector_view_array_with_stride , Ptr CDouble -> CSize -> CSize -> IO <gsl_vector_view>
diff --git a/src/Bindings/Gsl/Version.c b/src/Bindings/Gsl/Version.c
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/Version.c
@@ -0,0 +1,5 @@
+#include <bindings.cmacros.h>
+#include <gsl/gsl_version.h>
+
+BC_GLOBALARRAY(GSL_VERSION,char)
+BC_GLOBALARRAY(gsl_version,char)
diff --git a/src/Bindings/Gsl/Version.hsc b/src/Bindings/Gsl/Version.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/Version.hsc
@@ -0,0 +1,10 @@
+#include <bindings.dsl.h>
+#include <gsl/gsl_version.h>
+
+module Bindings.Gsl.Version where
+#strict_import
+
+#globalarray GSL_VERSION , CChar
+#num GSL_MAJOR_VERSION
+#num GSL_MINOR_VERSION
+#globalarray gsl_version , CChar
diff --git a/src/Bindings/Gsl/WaveletTransforms.hsc b/src/Bindings/Gsl/WaveletTransforms.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Gsl/WaveletTransforms.hsc
@@ -0,0 +1,63 @@
+#include <bindings.dsl.h>
+#include <gsl/gsl_wavelet.h>
+#include <gsl/gsl_wavelet2d.h>
+
+-- | <http://www.gnu.org/software/gsl/manual/html_node/Wavelet-Transforms.html>
+
+module Bindings.Gsl.WaveletTransforms where
+#strict_import
+import Bindings.Gsl.VectorsAndMatrices.DataTypes
+
+#integral_t gsl_wavelet_direction
+
+#num gsl_wavelet_forward
+#num gsl_wavelet_backward
+
+#starttype gsl_wavelet_type
+#field name , CString
+#field init , FunPtr ( Ptr (Ptr CDouble) -> Ptr (Ptr CDouble) -> Ptr (Ptr CDouble) -> Ptr (Ptr CDouble) -> Ptr CSize -> Ptr CSize -> CSize -> IO  CInt)
+#stoptype
+
+#starttype gsl_wavelet
+#field type , Ptr <gsl_wavelet_type>
+#field h1 , Ptr CDouble
+#field g1 , Ptr CDouble
+#field h2 , Ptr CDouble
+#field g2 , Ptr CDouble
+#field nc , CSize
+#field offset , CSize
+#stoptype
+
+#starttype gsl_wavelet_workspace
+#field scratch , Ptr CDouble
+#field n , CSize
+#stoptype
+
+#globalvar gsl_wavelet_daubechies , Ptr gsl_wavelet_type
+#globalvar gsl_wavelet_daubechies_centered , Ptr gsl_wavelet_type
+#globalvar gsl_wavelet_haar , Ptr gsl_wavelet_type
+#globalvar gsl_wavelet_haar_centered , Ptr gsl_wavelet_type
+#globalvar gsl_wavelet_bspline , Ptr gsl_wavelet_type
+#globalvar gsl_wavelet_bspline_centered , Ptr gsl_wavelet_type
+
+#ccall gsl_wavelet_alloc , Ptr <gsl_wavelet_type> -> CSize -> IO (Ptr <gsl_wavelet>)
+#ccall gsl_wavelet_free , Ptr <gsl_wavelet> -> IO ()
+#ccall gsl_wavelet_name , Ptr <gsl_wavelet> -> IO CString
+#ccall gsl_wavelet_workspace_alloc , CSize -> IO (Ptr <gsl_wavelet_workspace>)
+#ccall gsl_wavelet_workspace_free , Ptr <gsl_wavelet_workspace> -> IO ()
+#ccall gsl_wavelet_transform , Ptr <gsl_wavelet> -> Ptr CDouble -> CSize -> CSize -> <gsl_wavelet_direction> -> Ptr <gsl_wavelet_workspace> -> IO CInt
+#ccall gsl_wavelet_transform_forward , Ptr <gsl_wavelet> -> Ptr CDouble -> CSize -> CSize -> Ptr <gsl_wavelet_workspace> -> IO CInt
+#ccall gsl_wavelet_transform_inverse , Ptr <gsl_wavelet> -> Ptr CDouble -> CSize -> CSize -> Ptr <gsl_wavelet_workspace> -> IO CInt
+#ccall gsl_wavelet2d_transform , Ptr <gsl_wavelet> -> Ptr CDouble -> CSize -> CSize -> CSize -> <gsl_wavelet_direction> -> Ptr <gsl_wavelet_workspace> -> IO CInt
+#ccall gsl_wavelet2d_transform_forward , Ptr <gsl_wavelet> -> Ptr CDouble -> CSize -> CSize -> CSize -> Ptr <gsl_wavelet_workspace> -> IO CInt
+#ccall gsl_wavelet2d_transform_inverse , Ptr <gsl_wavelet> -> Ptr CDouble -> CSize -> CSize -> CSize -> Ptr <gsl_wavelet_workspace> -> IO CInt
+#ccall gsl_wavelet2d_nstransform , Ptr <gsl_wavelet> -> Ptr CDouble -> CSize -> CSize -> CSize -> <gsl_wavelet_direction> -> Ptr <gsl_wavelet_workspace> -> IO CInt
+#ccall gsl_wavelet2d_nstransform_forward , Ptr <gsl_wavelet> -> Ptr CDouble -> CSize -> CSize -> CSize -> Ptr <gsl_wavelet_workspace> -> IO CInt
+#ccall gsl_wavelet2d_nstransform_inverse , Ptr <gsl_wavelet> -> Ptr CDouble -> CSize -> CSize -> CSize -> Ptr <gsl_wavelet_workspace> -> IO CInt
+#ccall gsl_wavelet2d_transform_matrix , Ptr <gsl_wavelet> -> Ptr <gsl_matrix> -> <gsl_wavelet_direction> -> Ptr <gsl_wavelet_workspace> -> IO CInt
+#ccall gsl_wavelet2d_transform_matrix_forward , Ptr <gsl_wavelet> -> Ptr <gsl_matrix> -> Ptr <gsl_wavelet_workspace> -> IO CInt
+#ccall gsl_wavelet2d_transform_matrix_inverse , Ptr <gsl_wavelet> -> Ptr <gsl_matrix> -> Ptr <gsl_wavelet_workspace> -> IO CInt
+#ccall gsl_wavelet2d_nstransform_matrix , Ptr <gsl_wavelet> -> Ptr <gsl_matrix> -> <gsl_wavelet_direction> -> Ptr <gsl_wavelet_workspace> -> IO CInt
+#ccall gsl_wavelet2d_nstransform_matrix_forward , Ptr <gsl_wavelet> -> Ptr <gsl_matrix> -> Ptr <gsl_wavelet_workspace> -> IO CInt
+#ccall gsl_wavelet2d_nstransform_matrix_inverse , Ptr <gsl_wavelet> -> Ptr <gsl_matrix> -> Ptr <gsl_wavelet_workspace> -> IO CInt
+
