From e83e2023da77ecaa9aaba15bc9bd48757f73b3a9 Mon Sep 17 00:00:00 2001 From: Hiromi ISHII Date: Mon, 25 Dec 2017 20:23:13 +0900 Subject: Workaround for GHC-8.4.x * Adds missing Semigroup instances * Adds `semigroups` to the deps of `hmatrix` * Hides conflicting names from import list with base >= 4.11 * `(Prelude.<>)` and `GHC.TypeNats.Mod` --- packages/base/hmatrix.cabal | 1 + packages/base/src/Internal/Container.hs | 5 ++++- packages/base/src/Internal/Convolution.hs | 4 ++++ packages/base/src/Internal/Modular.hs | 8 ++++++++ packages/base/src/Internal/Util.hs | 4 ++++ packages/base/src/Numeric/LinearAlgebra.hs | 4 ++++ packages/base/src/Numeric/LinearAlgebra/HMatrix.hs | 4 ++++ packages/base/src/Numeric/LinearAlgebra/Static.hs | 4 ++++ packages/base/src/Numeric/Matrix.hs | 8 ++++++++ 9 files changed, 41 insertions(+), 1 deletion(-) (limited to 'packages/base') diff --git a/packages/base/hmatrix.cabal b/packages/base/hmatrix.cabal index 9d03f2b..ab3fff8 100644 --- a/packages/base/hmatrix.cabal +++ b/packages/base/hmatrix.cabal @@ -46,6 +46,7 @@ library split, bytestring, storable-complex, + semigroups, vector >= 0.8 hs-source-dirs: src diff --git a/packages/base/src/Internal/Container.hs b/packages/base/src/Internal/Container.hs index b379530..1520489 100644 --- a/packages/base/src/Internal/Container.hs +++ b/packages/base/src/Internal/Container.hs @@ -1,3 +1,4 @@ +{-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-} @@ -29,7 +30,9 @@ import Internal.Matrix import Internal.Element import Internal.Numeric import Internal.Algorithms(Field,linearSolveSVD,Herm,mTm) - +#if MIN_VERSION_base(4,11,0) +import Prelude hiding ((<>)) +#endif ------------------------------------------------------------------ {- | Creates a real vector containing a range of values: diff --git a/packages/base/src/Internal/Convolution.hs b/packages/base/src/Internal/Convolution.hs index 384fdf8..004e1ff 100644 --- a/packages/base/src/Internal/Convolution.hs +++ b/packages/base/src/Internal/Convolution.hs @@ -1,3 +1,4 @@ +{-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleContexts #-} ----------------------------------------------------------------------------- {- | @@ -23,6 +24,9 @@ import Internal.Numeric import Internal.Element import Internal.Conversion import Internal.Container +#if MIN_VERSION_base(4,11,0) +import Prelude hiding ((<>)) +#endif vectSS :: Element t => Int -> Vector t -> Matrix t diff --git a/packages/base/src/Internal/Modular.hs b/packages/base/src/Internal/Modular.hs index f3c59a8..9d51444 100644 --- a/packages/base/src/Internal/Modular.hs +++ b/packages/base/src/Internal/Modular.hs @@ -1,3 +1,4 @@ +{-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE KindSignatures #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} @@ -38,13 +39,20 @@ import Internal.Util(Normed(..),Indexable(..), gaussElim, gaussElim_1, gaussElim_2, luST, luSolve', luPacked', magnit, invershur) import Internal.ST(mutable) +#if MIN_VERSION_base(4,11,0) +import GHC.TypeLits hiding (Mod) +#else import GHC.TypeLits +#endif import Data.Proxy(Proxy) import Foreign.ForeignPtr(castForeignPtr) import Foreign.Storable import Data.Ratio import Data.Complex import Control.DeepSeq ( NFData(..) ) +#if MIN_VERSION_base(4,11,0) +import Prelude hiding ((<>)) +#endif diff --git a/packages/base/src/Internal/Util.hs b/packages/base/src/Internal/Util.hs index ec21fe4..8c8a31e 100644 --- a/packages/base/src/Internal/Util.hs +++ b/packages/base/src/Internal/Util.hs @@ -1,3 +1,4 @@ +{-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-} @@ -80,6 +81,9 @@ import Control.Arrow((&&&),(***)) import Data.Complex import Data.Function(on) import Internal.ST +#if MIN_VERSION_base(4,11,0) +import Prelude hiding ((<>)) +#endif type ℝ = Double type ℕ = Int diff --git a/packages/base/src/Numeric/LinearAlgebra.hs b/packages/base/src/Numeric/LinearAlgebra.hs index fd100e0..73d4a13 100644 --- a/packages/base/src/Numeric/LinearAlgebra.hs +++ b/packages/base/src/Numeric/LinearAlgebra.hs @@ -1,3 +1,4 @@ +{-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleContexts #-} ----------------------------------------------------------------------------- @@ -190,6 +191,9 @@ import Internal.Random import Internal.Sparse((!#>)) import Internal.CG import Internal.Conversion +#if MIN_VERSION_base(4,11,0) +import Prelude hiding ((<>)) +#endif {- | dense matrix product diff --git a/packages/base/src/Numeric/LinearAlgebra/HMatrix.hs b/packages/base/src/Numeric/LinearAlgebra/HMatrix.hs index 5ce529c..3a84645 100644 --- a/packages/base/src/Numeric/LinearAlgebra/HMatrix.hs +++ b/packages/base/src/Numeric/LinearAlgebra/HMatrix.hs @@ -1,3 +1,4 @@ +{-# LANGUAGE CPP #-} -------------------------------------------------------------------------------- {- | Module : Numeric.LinearAlgebra.HMatrix @@ -19,6 +20,9 @@ module Numeric.LinearAlgebra.HMatrix ( import Numeric.LinearAlgebra import Internal.Util import Internal.Algorithms(cholSH, mbCholSH, eigSH', eigenvaluesSH', geigSH') +#if MIN_VERSION_base(4,11,0) +import Prelude hiding ((<>)) +#endif infixr 8 <·> (<·>) :: Numeric t => Vector t -> Vector t -> t diff --git a/packages/base/src/Numeric/LinearAlgebra/Static.hs b/packages/base/src/Numeric/LinearAlgebra/Static.hs index 3000dcb..e328904 100644 --- a/packages/base/src/Numeric/LinearAlgebra/Static.hs +++ b/packages/base/src/Numeric/LinearAlgebra/Static.hs @@ -1,3 +1,4 @@ +{-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE KindSignatures #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} @@ -80,6 +81,9 @@ import Control.Arrow((***)) import Text.Printf import Data.Type.Equality ((:~:)(Refl)) import qualified Data.Bifunctor as BF (first) +#if MIN_VERSION_base(4,11,0) +import Prelude hiding ((<>)) +#endif ud1 :: R n -> Vector ℝ ud1 (R (Dim v)) = v diff --git a/packages/base/src/Numeric/Matrix.hs b/packages/base/src/Numeric/Matrix.hs index 5400f26..06da150 100644 --- a/packages/base/src/Numeric/Matrix.hs +++ b/packages/base/src/Numeric/Matrix.hs @@ -32,8 +32,11 @@ import Internal.Element import Internal.Numeric import qualified Data.Monoid as M import Data.List(partition) +import qualified Data.Foldable as F +import qualified Data.Semigroup as S import Internal.Chain + ------------------------------------------------------------------- instance Container Matrix a => Eq (Matrix a) where @@ -84,6 +87,11 @@ adaptScalarM f1 f2 f3 x y | isScalar y = f3 x (y @@>(0,0) ) | otherwise = f2 x y +instance (Container Vector t, Eq t, Num (Vector t), Product t) => S.Semigroup (Matrix t) + where + (<>) = mappend + sconcat = mconcat . F.toList + instance (Container Vector t, Eq t, Num (Vector t), Product t) => M.Monoid (Matrix t) where mempty = 1 -- cgit v1.2.3