diff --git a/Data/Eigen/Matrix.hs b/Data/Eigen/Matrix.hs
--- a/Data/Eigen/Matrix.hs
+++ b/Data/Eigen/Matrix.hs
@@ -307,7 +307,7 @@
 
 -- | Diagonal of the matrix
 diagonal :: Matrix -> Matrix
-diagonal = _unop swap I.c_diagonal
+diagonal = _unop (\(rows, cols) -> (min rows cols, 1)) I.c_diagonal
 
 {- | Inverse of the matrix
 
diff --git a/eigen.cabal b/eigen.cabal
--- a/eigen.cabal
+++ b/eigen.cabal
@@ -1,5 +1,5 @@
 name:           eigen
-version:        1.2.3
+version:        1.2.4
 homepage:       https://github.com/osidorkin/haskell-eigen
 synopsis:       Eigen C++ library (linear algebra: matrices, vectors, numerical solvers).
 description:    This module provides Haskell binding for Eigen C++ library.
@@ -365,7 +365,7 @@
                         Data.Eigen.Matrix
                         Data.Eigen.Matrix.Mutable
                         Data.Eigen.Parallel
-                        
+
     other-modules:      Data.Eigen.Internal
 
     ghc-options:        -Wall -fno-warn-name-shadowing
