diff --git a/app/Command/Bundle.hs b/app/Command/Bundle.hs index 4ea338a241..115c439a36 100644 --- a/app/Command/Bundle.hs +++ b/app/Command/Bundle.hs @@ -7,7 +7,6 @@ module Command.Bundle (command) where import Data.Traversable (for) -import Data.Monoid ((<>)) import Data.Aeson (encode) import Data.Maybe (isNothing) import Control.Applicative diff --git a/app/Command/Compile.hs b/app/Command/Compile.hs index cb91b6173a..713524c595 100644 --- a/app/Command/Compile.hs +++ b/app/Command/Compile.hs @@ -8,7 +8,6 @@ module Command.Compile (command) where import Control.Applicative import Control.Monad -import Control.Monad.Writer.Strict import qualified Data.Aeson as A import Data.Bool (bool) import qualified Data.ByteString.Lazy as B diff --git a/app/Command/Hierarchy.hs b/app/Command/Hierarchy.hs index 1bb9346534..0966c9a7b6 100644 --- a/app/Command/Hierarchy.hs +++ b/app/Command/Hierarchy.hs @@ -22,7 +22,6 @@ import Protolude (catMaybes) import Control.Applicative (optional) import Data.Foldable (for_) -import Data.Monoid ((<>)) import qualified Data.Text as T import qualified Data.Text.IO as T import Options.Applicative (Parser) diff --git a/app/Command/Publish.hs b/app/Command/Publish.hs index 0440bae107..bffb3e838a 100644 --- a/app/Command/Publish.hs +++ b/app/Command/Publish.hs @@ -5,7 +5,6 @@ module Command.Publish (command) where import Control.Monad.IO.Class (liftIO) import qualified Data.Aeson as A import qualified Data.ByteString.Lazy.Char8 as BL -import Data.Monoid ((<>)) import Data.Time.Clock (getCurrentTime) import Data.Version (Version(..)) import Language.PureScript.Publish diff --git a/app/Command/REPL.hs b/app/Command/REPL.hs index 04033b57eb..1093733c7b 100644 --- a/app/Command/REPL.hs +++ b/app/Command/REPL.hs @@ -31,7 +31,6 @@ import Control.Monad.Trans.State.Strict (StateT, evalStateT) import Control.Monad.Trans.Reader (ReaderT, runReaderT) import Data.FileEmbed (embedStringFile) import Data.Foldable (for_) -import Data.Monoid ((<>)) import Data.String (IsString(..)) import Data.Text (Text, unpack) import Data.Traversable (for) diff --git a/app/Main.hs b/app/Main.hs index 1f5ec06ef9..f3e72ab68a 100644 --- a/app/Main.hs +++ b/app/Main.hs @@ -15,7 +15,6 @@ import qualified Command.Ide as Ide import qualified Command.Publish as Publish import qualified Command.REPL as REPL import Data.Foldable (fold) -import Data.Monoid ((<>)) import qualified Options.Applicative as Opts import System.Environment (getArgs) import qualified System.IO as IO diff --git a/appveyor.yml b/appveyor.yml index d2788c2071..a3fa6b1c51 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -3,9 +3,12 @@ version: '{build}' environment: # Keep the path as short as possible, just in case. STACK_ROOT: c:\s - STACK_VER: 1.6.3 + STACK_VER: 1.7.1 RELEASE_USER: purescript RELEASE_REPO: purescript + # See https://github.com/commercialhaskell/stack/issues/3944, might no + # longer be necessary after we've moved to a snapshot with network >= 0.2.7.1 + TMP: "c:\\tmp" branches: # Only build master and tagged versions, i.e. not feature branches; feature # branches already get built after opening a pull request. @@ -19,7 +22,7 @@ cache: - c:\s -> appveyor/cache-buster.txt install: - git submodule update --init -- ps: Install-Product node 6 +- ps: Install-Product node 8 - npm install -g bower - ps: | diff --git a/package.yaml b/package.yaml index 16f9ed8722..01094bf840 100644 --- a/package.yaml +++ b/package.yaml @@ -32,15 +32,16 @@ extra-source-files: - CONTRIBUTORS.md - CONTRIBUTING.md dependencies: - - aeson >=1.0 && <1.3 + - aeson >=1.0 && <1.4 - aeson-better-errors >=0.8 - ansi-terminal >=0.7.1 && <0.9 - - base >=4.8 && <4.11 + - base >=4.8 && <4.12 - base-compat >=0.6.0 - blaze-html >=0.8.1 && <0.10 - bower-json >=1.0.0.1 && <1.1 - boxes >=0.1.4 && <0.2.0 - bytestring + - Cabal >= 2.2 - cheapskate >=0.1 && <0.2 - clock - containers @@ -70,7 +71,6 @@ dependencies: - scientific >=0.3.4.9 && <0.4 - semigroups >=0.16.2 && <0.19 - sourcemap >=0.1.6 - - spdx ==0.2.* - split - stm >=0.2.4.0 - stringsearch diff --git a/src/Language/PureScript/AST/Binders.hs b/src/Language/PureScript/AST/Binders.hs index 82d23e03b5..19e1d18db8 100644 --- a/src/Language/PureScript/AST/Binders.hs +++ b/src/Language/PureScript/AST/Binders.hs @@ -5,8 +5,6 @@ module Language.PureScript.AST.Binders where import Prelude.Compat -import Data.Semigroup - import Language.PureScript.AST.SourcePos import Language.PureScript.AST.Literals import Language.PureScript.Names diff --git a/src/Language/PureScript/AST/SourcePos.hs b/src/Language/PureScript/AST/SourcePos.hs index 60605d7aaa..6ad67542d7 100644 --- a/src/Language/PureScript/AST/SourcePos.hs +++ b/src/Language/PureScript/AST/SourcePos.hs @@ -8,7 +8,6 @@ import Prelude.Compat import Control.DeepSeq (NFData) import Data.Aeson ((.=), (.:)) -import Data.Monoid import Data.Text (Text) import GHC.Generics (Generic) import Language.PureScript.Comments diff --git a/src/Language/PureScript/AST/Traversals.hs b/src/Language/PureScript/AST/Traversals.hs index f4a35f5f40..4852488938 100644 --- a/src/Language/PureScript/AST/Traversals.hs +++ b/src/Language/PureScript/AST/Traversals.hs @@ -264,66 +264,66 @@ everythingOnValues , CaseAlternative -> r , DoNotationElement -> r ) -everythingOnValues (<>) f g h i j = (f', g', h', i', j') +everythingOnValues (<>.) f g h i j = (f', g', h', i', j') where f' :: Declaration -> r - f' d@(DataBindingGroupDeclaration ds) = foldl (<>) (f d) (fmap f' ds) - f' d@(ValueDeclaration vd) = foldl (<>) (f d) (fmap h' (valdeclBinders vd) ++ concatMap (\(GuardedExpr grd v) -> fmap k' grd ++ [g' v]) (valdeclExpression vd)) - f' d@(BindingGroupDeclaration ds) = foldl (<>) (f d) (fmap (\(_, _, val) -> g' val) ds) - f' d@(TypeClassDeclaration _ _ _ _ _ ds) = foldl (<>) (f d) (fmap f' ds) - f' d@(TypeInstanceDeclaration _ _ _ _ _ _ _ (ExplicitInstance ds)) = foldl (<>) (f d) (fmap f' ds) - f' d@(BoundValueDeclaration _ b expr) = f d <> h' b <> g' expr + f' d@(DataBindingGroupDeclaration ds) = foldl (<>.) (f d) (fmap f' ds) + f' d@(ValueDeclaration vd) = foldl (<>.) (f d) (fmap h' (valdeclBinders vd) ++ concatMap (\(GuardedExpr grd v) -> fmap k' grd ++ [g' v]) (valdeclExpression vd)) + f' d@(BindingGroupDeclaration ds) = foldl (<>.) (f d) (fmap (\(_, _, val) -> g' val) ds) + f' d@(TypeClassDeclaration _ _ _ _ _ ds) = foldl (<>.) (f d) (fmap f' ds) + f' d@(TypeInstanceDeclaration _ _ _ _ _ _ _ (ExplicitInstance ds)) = foldl (<>.) (f d) (fmap f' ds) + f' d@(BoundValueDeclaration _ b expr) = f d <>. h' b <>. g' expr f' d = f d g' :: Expr -> r g' v@(Literal _ l) = lit (g v) g' l - g' v@(UnaryMinus _ v1) = g v <> g' v1 - g' v@(BinaryNoParens op v1 v2) = g v <> g' op <> g' v1 <> g' v2 - g' v@(Parens v1) = g v <> g' v1 - g' v@(TypeClassDictionaryConstructorApp _ v1) = g v <> g' v1 - g' v@(Accessor _ v1) = g v <> g' v1 - g' v@(ObjectUpdate obj vs) = foldl (<>) (g v <> g' obj) (fmap (g' . snd) vs) - g' v@(ObjectUpdateNested obj vs) = foldl (<>) (g v <> g' obj) (fmap g' vs) - g' v@(Abs b v1) = g v <> h' b <> g' v1 - g' v@(App v1 v2) = g v <> g' v1 <> g' v2 - g' v@(IfThenElse v1 v2 v3) = g v <> g' v1 <> g' v2 <> g' v3 - g' v@(Case vs alts) = foldl (<>) (foldl (<>) (g v) (fmap g' vs)) (fmap i' alts) - g' v@(TypedValue _ v1 _) = g v <> g' v1 - g' v@(Let _ ds v1) = foldl (<>) (g v) (fmap f' ds) <> g' v1 - g' v@(Do es) = foldl (<>) (g v) (fmap j' es) - g' v@(Ado es v1) = foldl (<>) (g v) (fmap j' es) <> g' v1 - g' v@(PositionedValue _ _ v1) = g v <> g' v1 + g' v@(UnaryMinus _ v1) = g v <>. g' v1 + g' v@(BinaryNoParens op v1 v2) = g v <>. g' op <>. g' v1 <>. g' v2 + g' v@(Parens v1) = g v <>. g' v1 + g' v@(TypeClassDictionaryConstructorApp _ v1) = g v <>. g' v1 + g' v@(Accessor _ v1) = g v <>. g' v1 + g' v@(ObjectUpdate obj vs) = foldl (<>.) (g v <>. g' obj) (fmap (g' . snd) vs) + g' v@(ObjectUpdateNested obj vs) = foldl (<>.) (g v <>. g' obj) (fmap g' vs) + g' v@(Abs b v1) = g v <>. h' b <>. g' v1 + g' v@(App v1 v2) = g v <>. g' v1 <>. g' v2 + g' v@(IfThenElse v1 v2 v3) = g v <>. g' v1 <>. g' v2 <>. g' v3 + g' v@(Case vs alts) = foldl (<>.) (foldl (<>.) (g v) (fmap g' vs)) (fmap i' alts) + g' v@(TypedValue _ v1 _) = g v <>. g' v1 + g' v@(Let _ ds v1) = foldl (<>.) (g v) (fmap f' ds) <>. g' v1 + g' v@(Do es) = foldl (<>.) (g v) (fmap j' es) + g' v@(Ado es v1) = foldl (<>.) (g v) (fmap j' es) <>. g' v1 + g' v@(PositionedValue _ _ v1) = g v <>. g' v1 g' v = g v h' :: Binder -> r h' b@(LiteralBinder _ l) = lit (h b) h' l - h' b@(ConstructorBinder _ _ bs) = foldl (<>) (h b) (fmap h' bs) - h' b@(BinaryNoParensBinder b1 b2 b3) = h b <> h' b1 <> h' b2 <> h' b3 - h' b@(ParensInBinder b1) = h b <> h' b1 - h' b@(NamedBinder _ _ b1) = h b <> h' b1 - h' b@(PositionedBinder _ _ b1) = h b <> h' b1 - h' b@(TypedBinder _ b1) = h b <> h' b1 + h' b@(ConstructorBinder _ _ bs) = foldl (<>.) (h b) (fmap h' bs) + h' b@(BinaryNoParensBinder b1 b2 b3) = h b <>. h' b1 <>. h' b2 <>. h' b3 + h' b@(ParensInBinder b1) = h b <>. h' b1 + h' b@(NamedBinder _ _ b1) = h b <>. h' b1 + h' b@(PositionedBinder _ _ b1) = h b <>. h' b1 + h' b@(TypedBinder _ b1) = h b <>. h' b1 h' b = h b lit :: r -> (a -> r) -> Literal a -> r - lit r go (ArrayLiteral as) = foldl (<>) r (fmap go as) - lit r go (ObjectLiteral as) = foldl (<>) r (fmap (go . snd) as) + lit r go (ArrayLiteral as) = foldl (<>.) r (fmap go as) + lit r go (ObjectLiteral as) = foldl (<>.) r (fmap (go . snd) as) lit r _ _ = r i' :: CaseAlternative -> r i' ca@(CaseAlternative bs gs) = - foldl (<>) (i ca) (fmap h' bs ++ concatMap (\(GuardedExpr grd val) -> fmap k' grd ++ [g' val]) gs) + foldl (<>.) (i ca) (fmap h' bs ++ concatMap (\(GuardedExpr grd val) -> fmap k' grd ++ [g' val]) gs) j' :: DoNotationElement -> r - j' e@(DoNotationValue v) = j e <> g' v - j' e@(DoNotationBind b v) = j e <> h' b <> g' v - j' e@(DoNotationLet ds) = foldl (<>) (j e) (fmap f' ds) - j' e@(PositionedDoNotationElement _ _ e1) = j e <> j' e1 + j' e@(DoNotationValue v) = j e <>. g' v + j' e@(DoNotationBind b v) = j e <>. h' b <>. g' v + j' e@(DoNotationLet ds) = foldl (<>.) (j e) (fmap f' ds) + j' e@(PositionedDoNotationElement _ _ e1) = j e <>. j' e1 k' :: Guard -> r k' (ConditionGuard e) = g' e - k' (PatternGuard b e) = h' b <> g' e + k' (PatternGuard b e) = h' b <>. g' e everythingWithContextOnValues :: forall s r @@ -340,50 +340,50 @@ everythingWithContextOnValues , Binder -> r , CaseAlternative -> r , DoNotationElement -> r) -everythingWithContextOnValues s0 r0 (<>) f g h i j = (f'' s0, g'' s0, h'' s0, i'' s0, j'' s0) +everythingWithContextOnValues s0 r0 (<>.) f g h i j = (f'' s0, g'' s0, h'' s0, i'' s0, j'' s0) where f'' :: s -> Declaration -> r - f'' s d = let (s', r) = f s d in r <> f' s' d + f'' s d = let (s', r) = f s d in r <>. f' s' d f' :: s -> Declaration -> r - f' s (DataBindingGroupDeclaration ds) = foldl (<>) r0 (fmap (f'' s) ds) - f' s (ValueDeclaration vd) = foldl (<>) r0 (fmap (h'' s) (valdeclBinders vd) ++ concatMap (\(GuardedExpr grd v) -> fmap (k' s) grd ++ [g'' s v]) (valdeclExpression vd)) - f' s (BindingGroupDeclaration ds) = foldl (<>) r0 (fmap (\(_, _, val) -> g'' s val) ds) - f' s (TypeClassDeclaration _ _ _ _ _ ds) = foldl (<>) r0 (fmap (f'' s) ds) - f' s (TypeInstanceDeclaration _ _ _ _ _ _ _ (ExplicitInstance ds)) = foldl (<>) r0 (fmap (f'' s) ds) + f' s (DataBindingGroupDeclaration ds) = foldl (<>.) r0 (fmap (f'' s) ds) + f' s (ValueDeclaration vd) = foldl (<>.) r0 (fmap (h'' s) (valdeclBinders vd) ++ concatMap (\(GuardedExpr grd v) -> fmap (k' s) grd ++ [g'' s v]) (valdeclExpression vd)) + f' s (BindingGroupDeclaration ds) = foldl (<>.) r0 (fmap (\(_, _, val) -> g'' s val) ds) + f' s (TypeClassDeclaration _ _ _ _ _ ds) = foldl (<>.) r0 (fmap (f'' s) ds) + f' s (TypeInstanceDeclaration _ _ _ _ _ _ _ (ExplicitInstance ds)) = foldl (<>.) r0 (fmap (f'' s) ds) f' _ _ = r0 g'' :: s -> Expr -> r - g'' s v = let (s', r) = g s v in r <> g' s' v + g'' s v = let (s', r) = g s v in r <>. g' s' v g' :: s -> Expr -> r g' s (Literal _ l) = lit g'' s l g' s (UnaryMinus _ v1) = g'' s v1 - g' s (BinaryNoParens op v1 v2) = g'' s op <> g'' s v1 <> g'' s v2 + g' s (BinaryNoParens op v1 v2) = g'' s op <>. g'' s v1 <>. g'' s v2 g' s (Parens v1) = g'' s v1 g' s (TypeClassDictionaryConstructorApp _ v1) = g'' s v1 g' s (Accessor _ v1) = g'' s v1 - g' s (ObjectUpdate obj vs) = foldl (<>) (g'' s obj) (fmap (g'' s . snd) vs) - g' s (ObjectUpdateNested obj vs) = foldl (<>) (g'' s obj) (fmap (g'' s) vs) - g' s (Abs binder v1) = h'' s binder <> g'' s v1 - g' s (App v1 v2) = g'' s v1 <> g'' s v2 - g' s (IfThenElse v1 v2 v3) = g'' s v1 <> g'' s v2 <> g'' s v3 - g' s (Case vs alts) = foldl (<>) (foldl (<>) r0 (fmap (g'' s) vs)) (fmap (i'' s) alts) + g' s (ObjectUpdate obj vs) = foldl (<>.) (g'' s obj) (fmap (g'' s . snd) vs) + g' s (ObjectUpdateNested obj vs) = foldl (<>.) (g'' s obj) (fmap (g'' s) vs) + g' s (Abs binder v1) = h'' s binder <>. g'' s v1 + g' s (App v1 v2) = g'' s v1 <>. g'' s v2 + g' s (IfThenElse v1 v2 v3) = g'' s v1 <>. g'' s v2 <>. g'' s v3 + g' s (Case vs alts) = foldl (<>.) (foldl (<>.) r0 (fmap (g'' s) vs)) (fmap (i'' s) alts) g' s (TypedValue _ v1 _) = g'' s v1 - g' s (Let _ ds v1) = foldl (<>) r0 (fmap (f'' s) ds) <> g'' s v1 - g' s (Do es) = foldl (<>) r0 (fmap (j'' s) es) - g' s (Ado es v1) = foldl (<>) r0 (fmap (j'' s) es) <> g'' s v1 + g' s (Let _ ds v1) = foldl (<>.) r0 (fmap (f'' s) ds) <>. g'' s v1 + g' s (Do es) = foldl (<>.) r0 (fmap (j'' s) es) + g' s (Ado es v1) = foldl (<>.) r0 (fmap (j'' s) es) <>. g'' s v1 g' s (PositionedValue _ _ v1) = g'' s v1 g' _ _ = r0 h'' :: s -> Binder -> r - h'' s b = let (s', r) = h s b in r <> h' s' b + h'' s b = let (s', r) = h s b in r <>. h' s' b h' :: s -> Binder -> r h' s (LiteralBinder _ l) = lit h'' s l - h' s (ConstructorBinder _ _ bs) = foldl (<>) r0 (fmap (h'' s) bs) - h' s (BinaryNoParensBinder b1 b2 b3) = h'' s b1 <> h'' s b2 <> h'' s b3 + h' s (ConstructorBinder _ _ bs) = foldl (<>.) r0 (fmap (h'' s) bs) + h' s (BinaryNoParensBinder b1 b2 b3) = h'' s b1 <>. h'' s b2 <>. h'' s b3 h' s (ParensInBinder b) = h'' s b h' s (NamedBinder _ _ b1) = h'' s b1 h' s (PositionedBinder _ _ b1) = h'' s b1 @@ -391,28 +391,28 @@ everythingWithContextOnValues s0 r0 (<>) f g h i j = (f'' s0, g'' s0, h'' s0, i' h' _ _ = r0 lit :: (s -> a -> r) -> s -> Literal a -> r - lit go s (ArrayLiteral as) = foldl (<>) r0 (fmap (go s) as) - lit go s (ObjectLiteral as) = foldl (<>) r0 (fmap (go s . snd) as) + lit go s (ArrayLiteral as) = foldl (<>.) r0 (fmap (go s) as) + lit go s (ObjectLiteral as) = foldl (<>.) r0 (fmap (go s . snd) as) lit _ _ _ = r0 i'' :: s -> CaseAlternative -> r - i'' s ca = let (s', r) = i s ca in r <> i' s' ca + i'' s ca = let (s', r) = i s ca in r <>. i' s' ca i' :: s -> CaseAlternative -> r - i' s (CaseAlternative bs gs) = foldl (<>) r0 (fmap (h'' s) bs ++ concatMap (\(GuardedExpr grd val) -> fmap (k' s) grd ++ [g'' s val]) gs) + i' s (CaseAlternative bs gs) = foldl (<>.) r0 (fmap (h'' s) bs ++ concatMap (\(GuardedExpr grd val) -> fmap (k' s) grd ++ [g'' s val]) gs) j'' :: s -> DoNotationElement -> r - j'' s e = let (s', r) = j s e in r <> j' s' e + j'' s e = let (s', r) = j s e in r <>. j' s' e j' :: s -> DoNotationElement -> r j' s (DoNotationValue v) = g'' s v - j' s (DoNotationBind b v) = h'' s b <> g'' s v - j' s (DoNotationLet ds) = foldl (<>) r0 (fmap (f'' s) ds) + j' s (DoNotationBind b v) = h'' s b <>. g'' s v + j' s (DoNotationLet ds) = foldl (<>.) r0 (fmap (f'' s) ds) j' s (PositionedDoNotationElement _ _ e1) = j'' s e1 k' :: s -> Guard -> r k' s (ConditionGuard e) = g'' s e - k' s (PatternGuard b e) = h'' s b <> g'' s e + k' s (PatternGuard b e) = h'' s b <>. g'' s e everywhereWithContextOnValuesM :: forall m s @@ -514,9 +514,6 @@ everythingWithScope ) everythingWithScope f g h i j = (f'', g'', h'', i'', \s -> snd . j'' s) where - -- Avoid importing Data.Monoid and getting shadowed names above - (<>) = mappend - f'' :: S.Set ScopedIdent -> Declaration -> r f'' s a = f s a <> f' s a @@ -635,7 +632,7 @@ accumTypes f = everythingOnValues mappend forDecls forValues (const mempty) (con forDecls (DataDeclaration _ _ _ _ dctors) = mconcat (concatMap (fmap f . snd) dctors) forDecls (ExternDeclaration _ _ ty) = f ty forDecls (TypeClassDeclaration _ _ _ implies _ _) = mconcat (concatMap (fmap f . constraintArgs) implies) - forDecls (TypeInstanceDeclaration _ _ _ _ cs _ tys _) = mconcat (concatMap (fmap f . constraintArgs) cs) `mappend` mconcat (fmap f tys) + forDecls (TypeInstanceDeclaration _ _ _ _ cs _ tys _) = mconcat (concatMap (fmap f . constraintArgs) cs) <> mconcat (fmap f tys) forDecls (TypeSynonymDeclaration _ _ _ ty) = f ty forDecls (TypeDeclaration td) = f (tydeclType td) forDecls _ = mempty @@ -657,16 +654,16 @@ accumKinds accumKinds f = everythingOnValues mappend forDecls forValues (const mempty) (const mempty) (const mempty) where forDecls (DataDeclaration _ _ _ args dctors) = - foldMap (foldMap f . snd) args `mappend` + foldMap (foldMap f . snd) args <> foldMap (foldMap forTypes . snd) dctors forDecls (TypeClassDeclaration _ _ args implies _ _) = - foldMap (foldMap f . snd) args `mappend` + foldMap (foldMap f . snd) args <> foldMap (foldMap forTypes . constraintArgs) implies forDecls (TypeInstanceDeclaration _ _ _ _ cs _ tys _) = - foldMap (foldMap forTypes . constraintArgs) cs `mappend` + foldMap (foldMap forTypes . constraintArgs) cs <> foldMap forTypes tys forDecls (TypeSynonymDeclaration _ _ args ty) = - foldMap (foldMap f . snd) args `mappend` + foldMap (foldMap f . snd) args <> forTypes ty forDecls (TypeDeclaration td) = forTypes (tydeclType td) forDecls (ExternDeclaration _ _ ty) = forTypes ty diff --git a/src/Language/PureScript/CodeGen/JS.hs b/src/Language/PureScript/CodeGen/JS.hs index 266c560422..adf235f81e 100644 --- a/src/Language/PureScript/CodeGen/JS.hs +++ b/src/Language/PureScript/CodeGen/JS.hs @@ -19,7 +19,6 @@ import Data.List ((\\), intersect) import qualified Data.Foldable as F import qualified Data.Map as M import Data.Maybe (fromMaybe, isNothing) -import Data.Monoid ((<>)) import Data.String (fromString) import Data.Text (Text) import qualified Data.Text as T diff --git a/src/Language/PureScript/CodeGen/JS/Common.hs b/src/Language/PureScript/CodeGen/JS/Common.hs index 259cd4afa2..603b75d3c0 100644 --- a/src/Language/PureScript/CodeGen/JS/Common.hs +++ b/src/Language/PureScript/CodeGen/JS/Common.hs @@ -4,7 +4,6 @@ module Language.PureScript.CodeGen.JS.Common where import Prelude.Compat import Data.Char -import Data.Monoid ((<>)) import Data.Text (Text) import qualified Data.Text as T diff --git a/src/Language/PureScript/CodeGen/JS/Printer.hs b/src/Language/PureScript/CodeGen/JS/Printer.hs index d8b59dc268..da67fa78eb 100644 --- a/src/Language/PureScript/CodeGen/JS/Printer.hs +++ b/src/Language/PureScript/CodeGen/JS/Printer.hs @@ -13,7 +13,6 @@ import Control.PatternArrows import qualified Control.Arrow as A import Data.Maybe (fromMaybe) -import Data.Monoid ((<>)) import Data.Text (Text) import qualified Data.Text as T diff --git a/src/Language/PureScript/CoreFn/Traversals.hs b/src/Language/PureScript/CoreFn/Traversals.hs index 20b0cd320f..5415911863 100644 --- a/src/Language/PureScript/CoreFn/Traversals.hs +++ b/src/Language/PureScript/CoreFn/Traversals.hs @@ -50,27 +50,27 @@ everythingOnValues :: (r -> r -> r) -> (Binder a -> r) -> (CaseAlternative a -> r) -> (Bind a -> r, Expr a -> r, Binder a -> r, CaseAlternative a -> r) -everythingOnValues (<>) f g h i = (f', g', h', i') +everythingOnValues (<>.) f g h i = (f', g', h', i') where - f' b@(NonRec _ _ e) = f b <> g' e - f' b@(Rec es) = foldl (<>) (f b) (map (g' . snd) es) + f' b@(NonRec _ _ e) = f b <>. g' e + f' b@(Rec es) = foldl (<>.) (f b) (map (g' . snd) es) - g' v@(Literal _ l) = foldl (<>) (g v) (map g' (extractLiteral l)) - g' v@(Accessor _ _ e1) = g v <> g' e1 - g' v@(ObjectUpdate _ obj vs) = foldl (<>) (g v <> g' obj) (map (g' . snd) vs) - g' v@(Abs _ _ e1) = g v <> g' e1 - g' v@(App _ e1 e2) = g v <> g' e1 <> g' e2 - g' v@(Case _ vs alts) = foldl (<>) (foldl (<>) (g v) (map g' vs)) (map i' alts) - g' v@(Let _ ds e1) = foldl (<>) (g v) (map f' ds) <> g' e1 + g' v@(Literal _ l) = foldl (<>.) (g v) (map g' (extractLiteral l)) + g' v@(Accessor _ _ e1) = g v <>. g' e1 + g' v@(ObjectUpdate _ obj vs) = foldl (<>.) (g v <>. g' obj) (map (g' . snd) vs) + g' v@(Abs _ _ e1) = g v <>. g' e1 + g' v@(App _ e1 e2) = g v <>. g' e1 <>. g' e2 + g' v@(Case _ vs alts) = foldl (<>.) (foldl (<>.) (g v) (map g' vs)) (map i' alts) + g' v@(Let _ ds e1) = foldl (<>.) (g v) (map f' ds) <>. g' e1 g' v = g v - h' b@(LiteralBinder _ l) = foldl (<>) (h b) (map h' (extractLiteral l)) - h' b@(ConstructorBinder _ _ _ bs) = foldl (<>) (h b) (map h' bs) - h' b@(NamedBinder _ _ b1) = h b <> h' b1 + h' b@(LiteralBinder _ l) = foldl (<>.) (h b) (map h' (extractLiteral l)) + h' b@(ConstructorBinder _ _ _ bs) = foldl (<>.) (h b) (map h' bs) + h' b@(NamedBinder _ _ b1) = h b <>. h' b1 h' b = h b - i' ca@(CaseAlternative bs (Right val)) = foldl (<>) (i ca) (map h' bs) <> g' val - i' ca@(CaseAlternative bs (Left gs)) = foldl (<>) (i ca) (map h' bs ++ concatMap (\(grd, val) -> [g' grd, g' val]) gs) + i' ca@(CaseAlternative bs (Right val)) = foldl (<>.) (i ca) (map h' bs) <>. g' val + i' ca@(CaseAlternative bs (Left gs)) = foldl (<>.) (i ca) (map h' bs ++ concatMap (\(grd, val) -> [g' grd, g' val]) gs) extractLiteral (ArrayLiteral xs) = xs extractLiteral (ObjectLiteral xs) = map snd xs diff --git a/src/Language/PureScript/CoreImp/AST.hs b/src/Language/PureScript/CoreImp/AST.hs index 36062336ae..b6dcad1446 100644 --- a/src/Language/PureScript/CoreImp/AST.hs +++ b/src/Language/PureScript/CoreImp/AST.hs @@ -201,24 +201,24 @@ everywhereTopDownM f = f >=> go where go other = f other everything :: (r -> r -> r) -> (AST -> r) -> AST -> r -everything (<>) f = go where - go j@(Unary _ _ j1) = f j <> go j1 - go j@(Binary _ _ j1 j2) = f j <> go j1 <> go j2 - go j@(ArrayLiteral _ js) = foldl (<>) (f j) (map go js) - go j@(Indexer _ j1 j2) = f j <> go j1 <> go j2 - go j@(ObjectLiteral _ js) = foldl (<>) (f j) (map (go . snd) js) - go j@(Function _ _ _ j1) = f j <> go j1 - go j@(App _ j1 js) = foldl (<>) (f j <> go j1) (map go js) - go j@(Block _ js) = foldl (<>) (f j) (map go js) - go j@(VariableIntroduction _ _ (Just j1)) = f j <> go j1 - go j@(Assignment _ j1 j2) = f j <> go j1 <> go j2 - go j@(While _ j1 j2) = f j <> go j1 <> go j2 - go j@(For _ _ j1 j2 j3) = f j <> go j1 <> go j2 <> go j3 - go j@(ForIn _ _ j1 j2) = f j <> go j1 <> go j2 - go j@(IfElse _ j1 j2 Nothing) = f j <> go j1 <> go j2 - go j@(IfElse _ j1 j2 (Just j3)) = f j <> go j1 <> go j2 <> go j3 - go j@(Return _ j1) = f j <> go j1 - go j@(Throw _ j1) = f j <> go j1 - go j@(InstanceOf _ j1 j2) = f j <> go j1 <> go j2 - go j@(Comment _ _ j1) = f j <> go j1 +everything (<>.) f = go where + go j@(Unary _ _ j1) = f j <>. go j1 + go j@(Binary _ _ j1 j2) = f j <>. go j1 <>. go j2 + go j@(ArrayLiteral _ js) = foldl (<>.) (f j) (map go js) + go j@(Indexer _ j1 j2) = f j <>. go j1 <>. go j2 + go j@(ObjectLiteral _ js) = foldl (<>.) (f j) (map (go . snd) js) + go j@(Function _ _ _ j1) = f j <>. go j1 + go j@(App _ j1 js) = foldl (<>.) (f j <>. go j1) (map go js) + go j@(Block _ js) = foldl (<>.) (f j) (map go js) + go j@(VariableIntroduction _ _ (Just j1)) = f j <>. go j1 + go j@(Assignment _ j1 j2) = f j <>. go j1 <>. go j2 + go j@(While _ j1 j2) = f j <>. go j1 <>. go j2 + go j@(For _ _ j1 j2 j3) = f j <>. go j1 <>. go j2 <>. go j3 + go j@(ForIn _ _ j1 j2) = f j <>. go j1 <>. go j2 + go j@(IfElse _ j1 j2 Nothing) = f j <>. go j1 <>. go j2 + go j@(IfElse _ j1 j2 (Just j3)) = f j <>. go j1 <>. go j2 <>. go j3 + go j@(Return _ j1) = f j <>. go j1 + go j@(Throw _ j1) = f j <>. go j1 + go j@(InstanceOf _ j1 j2) = f j <>. go j1 <>. go j2 + go j@(Comment _ _ j1) = f j <>. go j1 go other = f other diff --git a/src/Language/PureScript/CoreImp/Optimizer/Inliner.hs b/src/Language/PureScript/CoreImp/Optimizer/Inliner.hs index 391f9391d6..96001d3ef5 100644 --- a/src/Language/PureScript/CoreImp/Optimizer/Inliner.hs +++ b/src/Language/PureScript/CoreImp/Optimizer/Inliner.hs @@ -16,7 +16,6 @@ import Prelude.Compat import Control.Monad.Supply.Class (MonadSupply, freshName) import Data.Maybe (fromMaybe) -import Data.Monoid ((<>)) import Data.String (IsString, fromString) import Data.Text (Text) import qualified Data.Text as T diff --git a/src/Language/PureScript/CoreImp/Optimizer/TCO.hs b/src/Language/PureScript/CoreImp/Optimizer/TCO.hs index 0a5d949668..fcf49fcbef 100644 --- a/src/Language/PureScript/CoreImp/Optimizer/TCO.hs +++ b/src/Language/PureScript/CoreImp/Optimizer/TCO.hs @@ -4,7 +4,6 @@ module Language.PureScript.CoreImp.Optimizer.TCO (tco) where import Prelude.Compat import Data.Text (Text) -import Data.Monoid ((<>)) import Language.PureScript.CoreImp.AST import Language.PureScript.AST.SourcePos (SourceSpan) import Safe (headDef, tailSafe) diff --git a/src/Language/PureScript/Docs/AsHtml.hs b/src/Language/PureScript/Docs/AsHtml.hs index 80856c94cb..adeeab7c54 100644 --- a/src/Language/PureScript/Docs/AsHtml.hs +++ b/src/Language/PureScript/Docs/AsHtml.hs @@ -20,7 +20,6 @@ import Control.Monad (unless) import Data.Char (isUpper) import Data.Either (isRight) import Data.Maybe (fromMaybe) -import Data.Monoid ((<>)) import Data.Foldable (for_) import Data.String (fromString) diff --git a/src/Language/PureScript/Docs/AsMarkdown.hs b/src/Language/PureScript/Docs/AsMarkdown.hs index 6cb3b4e47b..13c513baa4 100644 --- a/src/Language/PureScript/Docs/AsMarkdown.hs +++ b/src/Language/PureScript/Docs/AsMarkdown.hs @@ -13,7 +13,6 @@ import Control.Monad.Error.Class (MonadError) import Control.Monad.Writer (Writer, tell, execWriter) import Data.Foldable (for_) -import Data.Monoid ((<>)) import Data.List (partition) import Data.Text (Text) import qualified Data.Text as T diff --git a/src/Language/PureScript/Docs/Convert/ReExports.hs b/src/Language/PureScript/Docs/Convert/ReExports.hs index 4d48cb14dd..241acaab49 100644 --- a/src/Language/PureScript/Docs/Convert/ReExports.hs +++ b/src/Language/PureScript/Docs/Convert/ReExports.hs @@ -14,7 +14,6 @@ import Control.Monad.Trans.State.Strict (execState) import Data.Either import Data.Map (Map) import Data.Maybe (mapMaybe) -import Data.Monoid ((<>)) import qualified Data.Map as Map import Data.Text (Text) import qualified Data.Text as T @@ -415,12 +414,13 @@ data TypeClassEnv = TypeClassEnv } deriving (Show) +instance Semigroup TypeClassEnv where + (TypeClassEnv a1 b1 c1) <> (TypeClassEnv a2 b2 c2) = + TypeClassEnv (a1 <> a2) (b1 <> b2) (c1 <> c2) + instance Monoid TypeClassEnv where mempty = TypeClassEnv mempty mempty mempty - mappend (TypeClassEnv a1 b1 c1) - (TypeClassEnv a2 b2 c2) = - TypeClassEnv (a1 <> a2) (b1 <> b2) (c1 <> c2) -- | -- Take a TypeClassEnv and handle all of the type class members in it, either diff --git a/src/Language/PureScript/Docs/Convert/Single.hs b/src/Language/PureScript/Docs/Convert/Single.hs index deaccf2db5..045fe34c4a 100644 --- a/src/Language/PureScript/Docs/Convert/Single.hs +++ b/src/Language/PureScript/Docs/Convert/Single.hs @@ -114,7 +114,7 @@ convertDeclaration (P.ValueDecl sa _ _ _ [P.MkUnguarded (P.TypedValue _ _ ty)]) convertDeclaration (P.ValueDecl sa _ _ _ _) title = -- If no explicit type declaration was provided, insert a wildcard, so that -- the actual type will be added during type checking. - basicDeclaration sa title (ValueDeclaration P.TypeWildcard{}) + basicDeclaration sa title (ValueDeclaration (P.TypeWildcard (fst sa))) convertDeclaration (P.ExternDeclaration sa _ ty) title = basicDeclaration sa title (ValueDeclaration ty) convertDeclaration (P.DataDeclaration sa dtype _ args ctors) title = diff --git a/src/Language/PureScript/Docs/Prim.hs b/src/Language/PureScript/Docs/Prim.hs index ed16e734af..0116788428 100644 --- a/src/Language/PureScript/Docs/Prim.hs +++ b/src/Language/PureScript/Docs/Prim.hs @@ -7,7 +7,6 @@ module Language.PureScript.Docs.Prim ) where import Prelude.Compat hiding (fail) -import Data.Monoid ((<>)) import Data.Text (Text) import qualified Data.Text as T import qualified Data.Map as Map diff --git a/src/Language/PureScript/Docs/Render.hs b/src/Language/PureScript/Docs/Render.hs index 572449386e..c0c656589f 100644 --- a/src/Language/PureScript/Docs/Render.hs +++ b/src/Language/PureScript/Docs/Render.hs @@ -12,7 +12,6 @@ module Language.PureScript.Docs.Render where import Prelude.Compat import Data.Maybe (maybeToList) -import Data.Monoid ((<>)) import Data.Text (Text) import qualified Data.Text as T diff --git a/src/Language/PureScript/Docs/RenderedCode/RenderKind.hs b/src/Language/PureScript/Docs/RenderedCode/RenderKind.hs index 3539a1244f..bbdbe8ce03 100644 --- a/src/Language/PureScript/Docs/RenderedCode/RenderKind.hs +++ b/src/Language/PureScript/Docs/RenderedCode/RenderKind.hs @@ -12,7 +12,6 @@ import Prelude.Compat import Control.Arrow (ArrowPlus(..)) import Control.PatternArrows as PA -import Data.Monoid ((<>)) import Data.Maybe (fromMaybe) import qualified Data.Text as T diff --git a/src/Language/PureScript/Docs/RenderedCode/RenderType.hs b/src/Language/PureScript/Docs/RenderedCode/RenderType.hs index 15f51dc94c..3857dfd171 100644 --- a/src/Language/PureScript/Docs/RenderedCode/RenderType.hs +++ b/src/Language/PureScript/Docs/RenderedCode/RenderType.hs @@ -13,7 +13,6 @@ module Language.PureScript.Docs.RenderedCode.RenderType import Prelude.Compat import Data.Maybe (fromMaybe) -import Data.Monoid ((<>)) import Data.Text (Text) import Control.Arrow ((<+>)) diff --git a/src/Language/PureScript/Docs/RenderedCode/Types.hs b/src/Language/PureScript/Docs/RenderedCode/Types.hs index 0d64e301b1..ecf1b0a9fb 100644 --- a/src/Language/PureScript/Docs/RenderedCode/Types.hs +++ b/src/Language/PureScript/Docs/RenderedCode/Types.hs @@ -49,7 +49,6 @@ import GHC.Generics (Generic) import Control.DeepSeq (NFData) import Control.Monad.Error.Class (MonadError(..)) -import Data.Monoid ((<>)) import Data.Aeson.BetterErrors (Parse, nth, withText, withValue, toAesonParser, perhaps, asText, eachInArray) import qualified Data.Aeson as A import Data.Text (Text) @@ -248,7 +247,7 @@ asRenderedCodeElement = -- newtype RenderedCode = RC { unRC :: [RenderedCodeElement] } - deriving (Show, Eq, Ord, Monoid) + deriving (Show, Eq, Ord, Semigroup, Monoid) instance A.ToJSON RenderedCode where toJSON (RC elems) = A.toJSON elems diff --git a/src/Language/PureScript/Docs/Utils/MonoidExtras.hs b/src/Language/PureScript/Docs/Utils/MonoidExtras.hs index a9d317e603..0d4d0bfd7f 100644 --- a/src/Language/PureScript/Docs/Utils/MonoidExtras.hs +++ b/src/Language/PureScript/Docs/Utils/MonoidExtras.hs @@ -6,4 +6,3 @@ mintersperse :: (Monoid m) => m -> [m] -> m mintersperse _ [] = mempty mintersperse _ [x] = x mintersperse sep (x:xs) = x <> sep <> mintersperse sep xs - diff --git a/src/Language/PureScript/Errors.hs b/src/Language/PureScript/Errors.hs index 135f98aa2f..0028f3b233 100644 --- a/src/Language/PureScript/Errors.hs +++ b/src/Language/PureScript/Errors.hs @@ -186,7 +186,7 @@ errorCode em = case unwrapErrorMessage em of -- | A stack trace for an error newtype MultipleErrors = MultipleErrors { runMultipleErrors :: [ErrorMessage] - } deriving (Show, Monoid) + } deriving (Show, Semigroup, Monoid) -- | Check whether a collection of errors is empty or not. nonEmpty :: MultipleErrors -> Bool diff --git a/src/Language/PureScript/Errors/JSON.hs b/src/Language/PureScript/Errors/JSON.hs index 65f872d23b..f552f91f03 100644 --- a/src/Language/PureScript/Errors/JSON.hs +++ b/src/Language/PureScript/Errors/JSON.hs @@ -6,7 +6,6 @@ import Prelude.Compat import qualified Data.Aeson.TH as A import qualified Data.List.NonEmpty as NEL -import Data.Monoid ((<>)) import qualified Data.Text as T import Data.Text (Text) diff --git a/src/Language/PureScript/Hierarchy.hs b/src/Language/PureScript/Hierarchy.hs index 837fd3a33a..db6b9b12f6 100644 --- a/src/Language/PureScript/Hierarchy.hs +++ b/src/Language/PureScript/Hierarchy.hs @@ -19,7 +19,6 @@ import Prelude.Compat import Protolude (ordNub) import Data.List (sort) -import Data.Monoid ((<>)) import qualified Data.Text as T import qualified Language.PureScript as P diff --git a/src/Language/PureScript/Ide/Filter.hs b/src/Language/PureScript/Ide/Filter.hs index cdb29f4cbd..b08bb06d0e 100644 --- a/src/Language/PureScript/Ide/Filter.hs +++ b/src/Language/PureScript/Ide/Filter.hs @@ -35,7 +35,7 @@ import Language.PureScript.Ide.Util import qualified Language.PureScript as P newtype Filter = Filter (Endo [Module]) - deriving (Monoid) + deriving (Semigroup, Monoid) type Module = (P.ModuleName, [IdeDeclarationAnn]) diff --git a/src/Language/PureScript/Ide/Matcher.hs b/src/Language/PureScript/Ide/Matcher.hs index 531a29e43c..e5bf21e504 100644 --- a/src/Language/PureScript/Ide/Matcher.hs +++ b/src/Language/PureScript/Ide/Matcher.hs @@ -35,7 +35,7 @@ import Text.Regex.TDFA ((=~)) type ScoredMatch a = (Match a, Double) -newtype Matcher a = Matcher (Endo [Match a]) deriving (Monoid) +newtype Matcher a = Matcher (Endo [Match a]) deriving (Semigroup, Monoid) instance FromJSON (Matcher IdeDeclarationAnn) where parseJSON = withObject "matcher" $ \o -> do diff --git a/src/Language/PureScript/Interactive.hs b/src/Language/PureScript/Interactive.hs index 6fbfc5dbb8..efc7a1e44f 100644 --- a/src/Language/PureScript/Interactive.hs +++ b/src/Language/PureScript/Interactive.hs @@ -16,7 +16,6 @@ import Protolude (ordNub) import Data.List (sort, find, foldl') import Data.Maybe (fromMaybe, mapMaybe) import qualified Data.Map as M -import Data.Monoid ((<>)) import qualified Data.Set as S import Data.Text (Text) import qualified Data.Text as T diff --git a/src/Language/PureScript/Interactive/Printer.hs b/src/Language/PureScript/Interactive/Printer.hs index 38022a7dc3..608129465e 100644 --- a/src/Language/PureScript/Interactive/Printer.hs +++ b/src/Language/PureScript/Interactive/Printer.hs @@ -5,7 +5,6 @@ import Prelude.Compat import Data.List (intersperse) import qualified Data.Map as M import Data.Maybe (mapMaybe) -import Data.Monoid ((<>)) import qualified Data.Text as T import Data.Text (Text) import qualified Language.PureScript as P diff --git a/src/Language/PureScript/Kinds.hs b/src/Language/PureScript/Kinds.hs index 2088a3fb06..01df9dca87 100644 --- a/src/Language/PureScript/Kinds.hs +++ b/src/Language/PureScript/Kinds.hs @@ -102,8 +102,8 @@ everywhereOnKindsM f = go go other = f other everythingOnKinds :: (r -> r -> r) -> (Kind -> r) -> Kind -> r -everythingOnKinds (<>) f = go +everythingOnKinds (<>.) f = go where - go k@(Row k1) = f k <> go k1 - go k@(FunKind k1 k2) = f k <> go k1 <> go k2 + go k@(Row k1) = f k <>. go k1 + go k@(FunKind k1 k2) = f k <>. go k1 <>. go k2 go other = f other diff --git a/src/Language/PureScript/Label.hs b/src/Language/PureScript/Label.hs index b00db4fe9b..accd31463e 100644 --- a/src/Language/PureScript/Label.hs +++ b/src/Language/PureScript/Label.hs @@ -17,6 +17,6 @@ import Language.PureScript.PSString (PSString) -- because records are indexable by PureScript strings at runtime. -- newtype Label = Label { runLabel :: PSString } - deriving (Show, Eq, Ord, IsString, Monoid, A.ToJSON, A.FromJSON, Generic) + deriving (Show, Eq, Ord, IsString, Semigroup, Monoid, A.ToJSON, A.FromJSON, Generic) instance NFData Label diff --git a/src/Language/PureScript/Linter.hs b/src/Language/PureScript/Linter.hs index 59f936af25..49ede59811 100644 --- a/src/Language/PureScript/Linter.hs +++ b/src/Language/PureScript/Linter.hs @@ -10,7 +10,6 @@ import Control.Monad.Writer.Class import Data.List ((\\)) import Data.Maybe (mapMaybe) -import Data.Monoid import qualified Data.Set as S import Data.Text (Text) diff --git a/src/Language/PureScript/Linter/Exhaustive.hs b/src/Language/PureScript/Linter/Exhaustive.hs index 1965925639..4278f509a3 100644 --- a/src/Language/PureScript/Linter/Exhaustive.hs +++ b/src/Language/PureScript/Linter/Exhaustive.hs @@ -20,7 +20,6 @@ import Control.Monad.Supply.Class (MonadSupply, fresh, freshName) import Data.Function (on) import Data.List (foldl', sortBy) import Data.Maybe (fromMaybe) -import Data.Monoid ((<>)) import qualified Data.Map as M import Data.Text (Text) import qualified Data.Text as T diff --git a/src/Language/PureScript/Make/Actions.hs b/src/Language/PureScript/Make/Actions.hs index 254b83bd5e..53f3aca438 100644 --- a/src/Language/PureScript/Make/Actions.hs +++ b/src/Language/PureScript/Make/Actions.hs @@ -24,7 +24,6 @@ import Data.Foldable (for_, minimum) import qualified Data.List.NonEmpty as NEL import qualified Data.Map as M import Data.Maybe (fromMaybe) -import Data.Monoid ((<>)) import qualified Data.Set as S import qualified Data.Text as T import qualified Data.Text.Encoding as TE diff --git a/src/Language/PureScript/Names.hs b/src/Language/PureScript/Names.hs index 16f135f221..e2327c1cc1 100644 --- a/src/Language/PureScript/Names.hs +++ b/src/Language/PureScript/Names.hs @@ -16,7 +16,6 @@ import Control.DeepSeq (NFData) import GHC.Generics (Generic) import Data.Aeson import Data.Aeson.TH -import Data.Monoid ((<>)) import Data.Text (Text) import qualified Data.Text as T diff --git a/src/Language/PureScript/PSString.hs b/src/Language/PureScript/PSString.hs index 0dcb3b40cc..f466257f2a 100644 --- a/src/Language/PureScript/PSString.hs +++ b/src/Language/PureScript/PSString.hs @@ -21,7 +21,6 @@ import Control.Applicative ((<|>)) import Data.Char (chr) import Data.Bits (shiftR) import Data.List (unfoldr) -import Data.Monoid ((<>)) import Data.Scientific (toBoundedInteger) import Data.String (IsString(..)) import Data.ByteString (ByteString) @@ -52,7 +51,7 @@ import qualified Data.Aeson.Types as A -- and arrays of UTF-16 code units (integers) otherwise. -- newtype PSString = PSString { toUTF16CodeUnits :: [Word16] } - deriving (Eq, Ord, Monoid, Generic) + deriving (Eq, Ord, Semigroup, Monoid, Generic) instance NFData PSString diff --git a/src/Language/PureScript/Parser/Common.hs b/src/Language/PureScript/Parser/Common.hs index 6f21f9f16d..0b430baabe 100644 --- a/src/Language/PureScript/Parser/Common.hs +++ b/src/Language/PureScript/Parser/Common.hs @@ -6,7 +6,6 @@ import Prelude.Compat import Control.Applicative ((<|>)) import Control.Monad (guard) import Data.Maybe (fromMaybe) -import Data.Monoid ((<>)) import Data.Text (Text) import qualified Data.Text as T import Language.PureScript.AST.SourcePos diff --git a/src/Language/PureScript/Parser/Declarations.hs b/src/Language/PureScript/Parser/Declarations.hs index 12fc38f9ab..bfc77014cb 100644 --- a/src/Language/PureScript/Parser/Declarations.hs +++ b/src/Language/PureScript/Parser/Declarations.hs @@ -25,7 +25,6 @@ import Control.Monad.Error.Class (MonadError(..)) import Control.Parallel.Strategies (withStrategy, parList, rseq) import Data.Functor (($>)) import Data.Maybe (fromMaybe) -import Data.Monoid ((<>)) import qualified Data.Set as S import Data.Text (Text) import Language.PureScript.AST diff --git a/src/Language/PureScript/Parser/Lexer.hs b/src/Language/PureScript/Parser/Lexer.hs index 71812e8977..377d9b18a8 100644 --- a/src/Language/PureScript/Parser/Lexer.hs +++ b/src/Language/PureScript/Parser/Lexer.hs @@ -70,7 +70,6 @@ import Control.Applicative ((<|>)) import Control.Monad (void, guard) import Control.Monad.Identity (Identity) import Data.Char (isSpace, isAscii, isSymbol, isAlphaNum) -import Data.Monoid ((<>)) import Data.String (fromString) import Data.Text (Text) import qualified Data.Text as T diff --git a/src/Language/PureScript/Pretty/Common.hs b/src/Language/PureScript/Pretty/Common.hs index b7280232e7..e26fa2a3b9 100644 --- a/src/Language/PureScript/Pretty/Common.hs +++ b/src/Language/PureScript/Pretty/Common.hs @@ -10,7 +10,6 @@ import Prelude.Compat import Control.Monad.State (StateT, modify, get) import Data.List (elemIndices, intersperse) -import Data.Monoid ((<>)) import Data.Text (Text) import qualified Data.Text as T import Data.Char (isUpper) @@ -55,11 +54,12 @@ newtype StrPos = StrPos (SourcePos, Text, [SMap]) -- appropriately and advancing source mappings on the right hand side to account for -- the length of the left. -- +instance Semigroup StrPos where + StrPos (a,b,c) <> StrPos (a',b',c') = StrPos (a `addPos` a', b <> b', c ++ (bumpPos a <$> c')) + instance Monoid StrPos where mempty = StrPos (SourcePos 0 0, "", []) - StrPos (a,b,c) `mappend` StrPos (a',b',c') = StrPos (a `addPos` a', b <> b', c ++ (bumpPos a <$> c')) - mconcat ms = let s' = foldMap (\(StrPos(_, s, _)) -> s) ms (p, maps) = foldl plus (SourcePos 0 0, []) ms @@ -88,7 +88,7 @@ instance Emit StrPos where mapping = SMap (T.pack file) startPos zeroPos zeroPos = SourcePos 0 0 -newtype PlainString = PlainString Text deriving Monoid +newtype PlainString = PlainString Text deriving (Semigroup, Monoid) runPlainString :: PlainString -> Text runPlainString (PlainString s) = s diff --git a/src/Language/PureScript/Pretty/Kinds.hs b/src/Language/PureScript/Pretty/Kinds.hs index 24d4451e78..9f950af9f7 100644 --- a/src/Language/PureScript/Pretty/Kinds.hs +++ b/src/Language/PureScript/Pretty/Kinds.hs @@ -10,7 +10,6 @@ import Prelude.Compat import Control.Arrow (ArrowPlus(..)) import Control.PatternArrows as PA -import Data.Monoid ((<>)) import Data.Maybe (fromMaybe) import qualified Data.Text as T import Data.Text (Text) diff --git a/src/Language/PureScript/Pretty/Types.hs b/src/Language/PureScript/Pretty/Types.hs index bee62db14c..40c2956eb5 100644 --- a/src/Language/PureScript/Pretty/Types.hs +++ b/src/Language/PureScript/Pretty/Types.hs @@ -14,7 +14,7 @@ module Language.PureScript.Pretty.Types , prettyPrintObjectKey ) where -import Prelude.Compat +import Prelude.Compat hiding ((<>)) import Control.Arrow ((<+>)) import Control.PatternArrows as PA diff --git a/src/Language/PureScript/Pretty/Values.hs b/src/Language/PureScript/Pretty/Values.hs index bbabf0821c..7902526c03 100644 --- a/src/Language/PureScript/Pretty/Values.hs +++ b/src/Language/PureScript/Pretty/Values.hs @@ -7,7 +7,7 @@ module Language.PureScript.Pretty.Values , prettyPrintBinderAtom ) where -import Prelude.Compat +import Prelude.Compat hiding ((<>)) import Control.Arrow (second) diff --git a/src/Language/PureScript/Publish.hs b/src/Language/PureScript/Publish.hs index 73545bf488..7d1c6306d0 100644 --- a/src/Language/PureScript/Publish.hs +++ b/src/Language/PureScript/Publish.hs @@ -36,7 +36,8 @@ import qualified Data.Text as T import Data.Time.Clock (UTCTime) import Data.Time.Clock.POSIX (posixSecondsToUTCTime) import Data.Version -import qualified Data.SPDX as SPDX +import qualified Distribution.SPDX as SPDX +import qualified Distribution.Parsec.Class as CabalParsec import System.Directory (doesFileExist) import System.FilePath.Glob (globDir1) @@ -230,7 +231,11 @@ checkLicense pkgMeta = -- Check if a string is a valid SPDX license expression. -- isValidSPDX :: String -> Bool -isValidSPDX = (== 1) . length . SPDX.parseExpression +isValidSPDX input = case CabalParsec.simpleParsec input of + Nothing -> False + Just SPDX.NONE -> False + Just _ -> True + extractGithub :: Text -> Maybe (D.GithubUser, D.GithubRepo) extractGithub = stripGitHubPrefixes diff --git a/src/Language/PureScript/Publish/ErrorsWarnings.hs b/src/Language/PureScript/Publish/ErrorsWarnings.hs index 806739574c..38ebc36aeb 100644 --- a/src/Language/PureScript/Publish/ErrorsWarnings.hs +++ b/src/Language/PureScript/Publish/ErrorsWarnings.hs @@ -311,11 +311,12 @@ data CollectedWarnings = CollectedWarnings } deriving (Show, Eq, Ord) +instance Semigroup CollectedWarnings where + (CollectedWarnings as bs cs d es) <> (CollectedWarnings as' bs' cs' d' es') = + CollectedWarnings (as <> as') (bs <> bs') (cs <> cs') (d <> d') (es <> es') + instance Monoid CollectedWarnings where mempty = CollectedWarnings mempty mempty mempty mempty mempty - mappend (CollectedWarnings as bs cs d es) - (CollectedWarnings as' bs' cs' d' es') = - CollectedWarnings (as <> as') (bs <> bs') (cs <> cs') (d <> d') (es <> es') collectWarnings :: [PackageWarning] -> CollectedWarnings collectWarnings = foldMap singular diff --git a/src/Language/PureScript/Renamer.hs b/src/Language/PureScript/Renamer.hs index b99cd9d2ae..4ee82ad0d3 100644 --- a/src/Language/PureScript/Renamer.hs +++ b/src/Language/PureScript/Renamer.hs @@ -10,7 +10,6 @@ import Control.Monad.State import Data.List (find) import Data.Maybe (fromJust, fromMaybe) import qualified Data.Map as M -import Data.Monoid ((<>)) import qualified Data.Set as S import qualified Data.Text as T diff --git a/src/Language/PureScript/Sugar/TypeClasses/Deriving.hs b/src/Language/PureScript/Sugar/TypeClasses/Deriving.hs index a91cbe72fc..351cb3e0bf 100755 --- a/src/Language/PureScript/Sugar/TypeClasses/Deriving.hs +++ b/src/Language/PureScript/Sugar/TypeClasses/Deriving.hs @@ -12,7 +12,6 @@ import Control.Monad.Supply.Class (MonadSupply) import Data.Foldable (for_) import Data.List (foldl', find, sortBy, unzip5) import qualified Data.Map as M -import Data.Monoid ((<>)) import Data.Maybe (fromMaybe, mapMaybe) import Data.Ord (comparing) import qualified Data.Set as S @@ -42,13 +41,15 @@ data NewtypeDerivedInstances = NewtypeDerivedInstances -- ^ A list of newtype instances which were derived in this module. } deriving Show -instance Monoid NewtypeDerivedInstances where - mempty = NewtypeDerivedInstances mempty mempty - mappend x y = +instance Semigroup NewtypeDerivedInstances where + x <> y = NewtypeDerivedInstances { ndiClasses = ndiClasses x <> ndiClasses y , ndiDerivedInstances = ndiDerivedInstances x <> ndiDerivedInstances y } +instance Monoid NewtypeDerivedInstances where + mempty = NewtypeDerivedInstances mempty mempty + -- | Extract the name of the newtype appearing in the last type argument of -- a derived newtype instance. -- diff --git a/src/Language/PureScript/TypeChecker.hs b/src/Language/PureScript/TypeChecker.hs index 3e293e3f07..dce0b28429 100644 --- a/src/Language/PureScript/TypeChecker.hs +++ b/src/Language/PureScript/TypeChecker.hs @@ -22,7 +22,6 @@ import Control.Lens ((^..), _1, _2) import Data.Foldable (for_, traverse_, toList) import Data.List (nub, nubBy, (\\), sort, group) import Data.Maybe -import Data.Monoid ((<>)) import Data.Text (Text) import qualified Data.List.NonEmpty as NEL import qualified Data.Map as M diff --git a/src/Language/PureScript/TypeChecker/Entailment.hs b/src/Language/PureScript/TypeChecker/Entailment.hs index b11f064f69..13f8697bfd 100644 --- a/src/Language/PureScript/TypeChecker/Entailment.hs +++ b/src/Language/PureScript/TypeChecker/Entailment.hs @@ -135,14 +135,15 @@ data Matched t | Unknown deriving (Eq, Show, Functor) +instance Semigroup t => Semigroup (Matched t) where + (Match l) <> (Match r) = Match (l <> r) + Apart <> _ = Apart + _ <> Apart = Apart + _ <> _ = Unknown + instance Monoid t => Monoid (Matched t) where mempty = Match mempty - mappend (Match l) (Match r) = Match (l <> r) - mappend Apart _ = Apart - mappend _ Apart = Apart - mappend _ _ = Unknown - -- | Check that the current set of type class dictionaries entail the specified type class goal, and, if so, -- return a type class dictionary reference. entails diff --git a/src/Language/PureScript/TypeChecker/Skolems.hs b/src/Language/PureScript/TypeChecker/Skolems.hs index f80d87e177..ed7659c92f 100644 --- a/src/Language/PureScript/TypeChecker/Skolems.hs +++ b/src/Language/PureScript/TypeChecker/Skolems.hs @@ -14,7 +14,6 @@ import Control.Monad.Error.Class (MonadError(..)) import Control.Monad.State.Class (MonadState(..), gets, modify) import Data.Foldable (traverse_) import Data.Functor.Identity (Identity(), runIdentity) -import Data.Monoid import Data.Set (Set, fromList, notMember) import Data.Text (Text) import Language.PureScript.AST diff --git a/src/Language/PureScript/TypeChecker/Types.hs b/src/Language/PureScript/TypeChecker/Types.hs index 920d159a6b..51dac649e6 100644 --- a/src/Language/PureScript/TypeChecker/Types.hs +++ b/src/Language/PureScript/TypeChecker/Types.hs @@ -39,7 +39,6 @@ import Data.Either (partitionEithers) import Data.Functor (($>)) import Data.List (transpose, (\\), partition, delete) import Data.Maybe (fromMaybe) -import Data.Monoid ((<>)) import Data.Traversable (for) import qualified Data.List.NonEmpty as NEL import qualified Data.Map as M diff --git a/src/Language/PureScript/TypeClassDictionaries.hs b/src/Language/PureScript/TypeClassDictionaries.hs index af00286035..84b569ca80 100644 --- a/src/Language/PureScript/TypeClassDictionaries.hs +++ b/src/Language/PureScript/TypeClassDictionaries.hs @@ -7,7 +7,6 @@ import Prelude.Compat import GHC.Generics (Generic) import Control.DeepSeq (NFData) -import Data.Monoid ((<>)) import Data.Text (Text, pack) import Language.PureScript.Names diff --git a/src/Language/PureScript/Types.hs b/src/Language/PureScript/Types.hs index d600bf47f7..3ec79431a1 100644 --- a/src/Language/PureScript/Types.hs +++ b/src/Language/PureScript/Types.hs @@ -18,7 +18,6 @@ import qualified Data.Aeson.TH as A import Data.List (sortBy) import Data.Ord (comparing) import Data.Maybe (fromMaybe) -import Data.Monoid ((<>)) import Data.Text (Text) import qualified Data.Text as T import GHC.Generics (Generic) diff --git a/stack.yaml b/stack.yaml index 54c5cf306b..42dbab2418 100644 --- a/stack.yaml +++ b/stack.yaml @@ -1,4 +1,4 @@ -resolver: lts-11.7 +resolver: lts-12.0 packages: - '.' extra-deps: diff --git a/tests/TestCompiler.hs b/tests/TestCompiler.hs index 9c3bed7a0f..2585f2507e 100644 --- a/tests/TestCompiler.hs +++ b/tests/TestCompiler.hs @@ -40,7 +40,6 @@ import Control.Monad import Control.Arrow ((***), (>>>)) import Control.Monad.Reader -import Control.Monad.Writer.Strict import Control.Monad.Trans.Except import System.Exit diff --git a/tests/TestCoreFn.hs b/tests/TestCoreFn.hs index 7c2722038a..2fcb158291 100644 --- a/tests/TestCoreFn.hs +++ b/tests/TestCoreFn.hs @@ -9,7 +9,7 @@ import Prelude () import Prelude.Compat import Data.Aeson -import Data.Aeson.Types +import Data.Aeson.Types as Aeson import Data.Version import Language.PureScript.AST.Literals @@ -37,7 +37,7 @@ parseMod m = in snd <$> parseModule (moduleToJSON v m) isSuccess :: Result a -> Bool -isSuccess (Success _) = True +isSuccess (Aeson.Success _) = True isSuccess _ = False spec :: Spec @@ -52,42 +52,42 @@ spec = context "CoreFnFromJsonTest" $ do r `shouldSatisfy` isSuccess case r of Error _ -> return () - Success m -> moduleName m `shouldBe` mn + Aeson.Success m -> moduleName m `shouldBe` mn specify "should parse source span" $ do let r = parseMod $ Module ss [] mn mp [] [] [] [] r `shouldSatisfy` isSuccess case r of Error _ -> return () - Success m -> moduleSourceSpan m `shouldBe` ss + Aeson.Success m -> moduleSourceSpan m `shouldBe` ss specify "should parse module path" $ do let r = parseMod $ Module ss [] mn mp [] [] [] [] r `shouldSatisfy` isSuccess case r of Error _ -> return () - Success m -> modulePath m `shouldBe` mp + Aeson.Success m -> modulePath m `shouldBe` mp specify "should parse imports" $ do let r = parseMod $ Module ss [] mn mp [(ann, mn)] [] [] [] r `shouldSatisfy` isSuccess case r of Error _ -> return () - Success m -> moduleImports m `shouldBe` [(ann, mn)] + Aeson.Success m -> moduleImports m `shouldBe` [(ann, mn)] specify "should parse exports" $ do let r = parseMod $ Module ss [] mn mp [] [Ident "exp"] [] [] r `shouldSatisfy` isSuccess case r of Error _ -> return () - Success m -> moduleExports m `shouldBe` [Ident "exp"] + Aeson.Success m -> moduleExports m `shouldBe` [Ident "exp"] specify "should parse foreign" $ do let r = parseMod $ Module ss [] mn mp [] [] [Ident "exp"] [] r `shouldSatisfy` isSuccess case r of Error _ -> return () - Success m -> moduleForeign m `shouldBe` [Ident "exp"] + Aeson.Success m -> moduleForeign m `shouldBe` [Ident "exp"] context "Expr" $ do specify "should parse literals" $ do diff --git a/tests/TestPrimDocs.hs b/tests/TestPrimDocs.hs index 1eb68d50e8..584c8a9681 100644 --- a/tests/TestPrimDocs.hs +++ b/tests/TestPrimDocs.hs @@ -3,7 +3,6 @@ module TestPrimDocs where import Prelude import Control.Monad -import Data.Monoid ((<>)) import Data.List ((\\)) import qualified Data.Map as Map import qualified Data.Set as Set