git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
removes superfluous constraints.

Since GHC 7.10 Monad is a superclass of Applicative.

commitf1dfe1e8ab22692ae9e256261c585832b4e878b7 authorChristoph Hegemann <christoph.hegemann1337@gmail.com> dateThu 10 Mar 2016, 03:42 (11 years ago) parentebf600a
51 files changed+174−185
psc-bundle/Main.hs+2−2 psc-ide-server/Main.hs+1−1 psc/Main.hs+1−1 src/Control/Monad/Supply.hs+1−1 src/Language/PureScript/AST/Traversals.hs+3−3 src/Language/PureScript/Bundle.hs+2−2 src/Language/PureScript/CodeGen/JS.hs+1−1 src/Language/PureScript/CodeGen/JS/AST.hs+1−1 src/Language/PureScript/CodeGen/JS/Optimizer.hs+2−2 src/Language/PureScript/CodeGen/JS/Optimizer/Inliner.hs+1−1 src/Language/PureScript/Docs/AsMarkdown.hs+1−2 src/Language/PureScript/Docs/Convert.hs+6−6 src/Language/PureScript/Docs/Convert/ReExports.hs+13−22 src/Language/PureScript/Docs/ParseAndBookmark.hs+2−2 src/Language/PureScript/Errors.hs+4−4 src/Language/PureScript/Ide.hs+3−3 src/Language/PureScript/Ide/CaseSplit.hs+1−1 src/Language/PureScript/Ide/Externs.hs+1−1 src/Language/PureScript/Ide/SourceFile.hs+3−4 src/Language/PureScript/Ide/State.hs+7−7 src/Language/PureScript/Ide/Types.hs+1−1 src/Language/PureScript/Kinds.hs+1−1 src/Language/PureScript/Linter.hs+1−1 src/Language/PureScript/Linter/Exhaustive.hs+2−2 src/Language/PureScript/Linter/Imports.hs+2−2 src/Language/PureScript/Make.hs+1−1 src/Language/PureScript/Parser/Declarations.hs+1−1 src/Language/PureScript/Parser/JS.hs+1−1 src/Language/PureScript/Sugar.hs+1−1 src/Language/PureScript/Sugar/BindingGroups.hs+3−3 src/Language/PureScript/Sugar/CaseDeclarations.hs+6−6 src/Language/PureScript/Sugar/DoNotation.hs+2−2 src/Language/PureScript/Sugar/Names.hs+4−4 src/Language/PureScript/Sugar/Names/Exports.hs+3−3 src/Language/PureScript/Sugar/Names/Imports.hs+4−4 src/Language/PureScript/Sugar/ObjectWildcards.hs+1−1 src/Language/PureScript/Sugar/Operators.hs+3−3 src/Language/PureScript/Sugar/TypeClasses.hs+4−4 src/Language/PureScript/Sugar/TypeClasses/Deriving.hs+6−6 src/Language/PureScript/Sugar/TypeDeclarations.hs+1−1 src/Language/PureScript/TypeChecker.hs+12−12 src/Language/PureScript/TypeChecker/Entailment.hs+1−1 src/Language/PureScript/TypeChecker/Kinds.hs+11−11 src/Language/PureScript/TypeChecker/Monad.hs+15−15 src/Language/PureScript/TypeChecker/Rows.hs+1−1 src/Language/PureScript/TypeChecker/Skolems.hs+1−1 src/Language/PureScript/TypeChecker/Subsumption.hs+2−2 src/Language/PureScript/TypeChecker/Synonyms.hs+1−1 src/Language/PureScript/TypeChecker/Types.hs+19−19 src/Language/PureScript/TypeChecker/Unify.hs+5−5 src/Language/PureScript/Types.hs+2−2
psc-bundle/Main.hs+2−2
@@ -51,7 +51,7 @@ data Options = Options
5151 } deriving Show
5252
5353-- | Given a filename, assuming it is in the correct place on disk, infer a ModuleIdentifier.
54−guessModuleIdentifier :: (Applicative m, MonadError ErrorMessage m) => FilePath -> m ModuleIdentifier
54+guessModuleIdentifier :: (MonadError ErrorMessage m) => FilePath -> m ModuleIdentifier
5555guessModuleIdentifier filename = ModuleIdentifier (takeFileName (takeDirectory filename)) <$> guessModuleType (takeFileName filename)
5656 where
5757 guessModuleType "index.js" = pure Regular
@@ -61,7 +61,7 @@ guessModuleIdentifier filename = ModuleIdentifier (takeFileName (takeDirectory f
6161-- | The main application function.
6262-- This function parses the input files, performs dead code elimination, filters empty modules
6363-- and generates and prints the final Javascript bundle.
64−app :: (Applicative m, MonadError ErrorMessage m, MonadIO m) => Options -> m String
64+app :: (MonadError ErrorMessage m, MonadIO m) => Options -> m String
6565app Options{..} = do
6666 inputFiles <- concat <$> mapM (liftIO . glob) optionsInputFiles
6767 when (null inputFiles) . liftIO $ do
psc-ide-server/Main.hs+1−1
@@ -124,7 +124,7 @@ startServer port env = withSocketsDo $ do
124124 liftIO (hClose h)
125125
126126
127−acceptCommand :: (Applicative m, MonadIO m, MonadLogger m, MonadError T.Text m)
127+acceptCommand :: (MonadIO m, MonadLogger m, MonadError T.Text m)
128128 => Socket -> m (T.Text, Handle)
129129acceptCommand sock = do
130130 h <- acceptConnection
psc/Main.hs+1−1
@@ -107,7 +107,7 @@ globWarningOnMisses warn = concatMapM globWithWarning
107107readInput :: InputOptions -> IO [(Either P.RebuildPolicy FilePath, String)]
108108readInput InputOptions{..} = forM ioInputFiles $ \inFile -> (Right inFile, ) <$> readUTF8File inFile
109109
110−parseInputs :: (Functor m, Applicative m, MonadError P.MultipleErrors m, MonadWriter P.MultipleErrors m)
110+parseInputs :: (MonadError P.MultipleErrors m, MonadWriter P.MultipleErrors m)
111111 => [(Either P.RebuildPolicy FilePath, String)]
112112 -> [(FilePath, P.ForeignJS)]
113113 -> m ([(Either P.RebuildPolicy FilePath, P.Module)], M.Map P.ModuleName FilePath)
src/Control/Monad/Supply.hs+1−1
@@ -27,7 +27,7 @@ import Control.Monad.Error.Class (MonadError(..))
2727import Control.Monad.Reader
2828import Control.Monad.Writer
2929
30−newtype SupplyT m a = SupplyT { unSupplyT :: StateT Integer m a }
30+newtype SupplyT m a = SupplyT { unSupplyT :: StateT Integer m a }
3131 deriving (Functor, Applicative, Monad, MonadTrans, MonadError e, MonadWriter w, MonadReader r)
3232
3333runSupplyT :: Integer -> SupplyT m a -> m (a, Integer)
src/Language/PureScript/AST/Traversals.hs+3−3
@@ -91,7 +91,7 @@ everywhereOnValues f g h = (f', g', h')
9191
9292everywhereOnValuesTopDownM
9393 :: forall m
94− . (Functor m, Applicative m, Monad m)
94+ . (Monad m)
9595 => (Declaration -> m Declaration)
9696 -> (Expr -> m Expr)
9797 -> (Binder -> m Binder)
@@ -160,7 +160,7 @@ everywhereOnValuesTopDownM f g h = (f' <=< f, g' <=< g, h' <=< h)
160160
161161everywhereOnValuesM
162162 :: forall m
163− . (Functor m, Applicative m, Monad m)
163+ . (Monad m)
164164 => (Declaration -> m Declaration)
165165 -> (Expr -> m Expr)
166166 -> (Binder -> m Binder)
@@ -389,7 +389,7 @@ everythingWithContextOnValues s0 r0 (<>) f g h i j = (f'' s0, g'' s0, h'' s0, i'
389389
390390everywhereWithContextOnValuesM
391391 :: forall m s
392− . (Functor m, Applicative m, Monad m)
392+ . (Monad m)
393393 => s
394394 -> (s -> Declaration -> m (s, Declaration))
395395 -> (s -> Expr -> m (s, Expr))
src/Language/PureScript/Bundle.hs+2−2
@@ -209,7 +209,7 @@ withDeps (Module modulePath es) = Module modulePath (map expandDeps es)
209209--
210210-- Each type of module element is matched using pattern guards, and everything else is bundled into the
211211-- Other constructor.
212−toModule :: forall m. (Applicative m, MonadError ErrorMessage m) => Maybe FilePath -> S.Set String -> ModuleIdentifier -> JSNode -> m Module
212+toModule :: forall m. (MonadError ErrorMessage m) => Maybe FilePath -> S.Set String -> ModuleIdentifier -> JSNode -> m Module
213213toModule requirePath mids mid top
214214 | JSSourceElementsTop ns <- node top = Module mid <$> traverse toModuleElement ns
215215 | otherwise = err InvalidTopLevel
@@ -533,7 +533,7 @@ codeGen optionsMainModule optionsNamespace ms = renderToString (NN (JSSourceElem
533533-- | The bundling function.
534534-- This function performs dead code elimination, filters empty modules
535535-- and generates and prints the final Javascript bundle.
536−bundle :: (Applicative m, MonadError ErrorMessage m)
536+bundle :: (MonadError ErrorMessage m)
537537 => [(ModuleIdentifier, String)] -- ^ The input modules. Each module should be javascript rendered from 'Language.PureScript.Make' or @psc@.
538538 -> [ModuleIdentifier] -- ^ Entry points. These module identifiers are used as the roots for dead-code elimination
539539 -> Maybe String -- ^ An optional main module.
src/Language/PureScript/CodeGen/JS.hs+1−1
@@ -47,7 +47,7 @@ import System.FilePath.Posix ((</>))
4747--
4848moduleToJs
4949 :: forall m
50− . (Applicative m, Monad m, MonadReader Options m, MonadSupply m, MonadError MultipleErrors m)
50+ . (Monad m, MonadReader Options m, MonadSupply m, MonadError MultipleErrors m)
5151 => Module Ann
5252 -> Maybe JS
5353 -> m [JS]
src/Language/PureScript/CodeGen/JS/AST.hs+1−1
@@ -347,7 +347,7 @@ everywhereOnJS f = go
347347everywhereOnJSTopDown :: (JS -> JS) -> JS -> JS
348348everywhereOnJSTopDown f = runIdentity . everywhereOnJSTopDownM (Identity . f)
349349
350−everywhereOnJSTopDownM :: (Applicative m, Monad m) => (JS -> m JS) -> JS -> m JS
350+everywhereOnJSTopDownM :: (Monad m) => (JS -> m JS) -> JS -> m JS
351351everywhereOnJSTopDownM f = f >=> go
352352 where
353353 f' = f >=> go
src/Language/PureScript/CodeGen/JS/Optimizer.hs+2−2
@@ -43,12 +43,12 @@ import Language.PureScript.CodeGen.JS.Optimizer.Blocks
4343-- |
4444-- Apply a series of optimizer passes to simplified Javascript code
4545--
46−optimize :: (Monad m, MonadReader Options m, Applicative m, MonadSupply m) => JS -> m JS
46+optimize :: (Monad m, MonadReader Options m, MonadSupply m) => JS -> m JS
4747optimize js = do
4848 noOpt <- asks optionsNoOptimizations
4949 if noOpt then return js else optimize' js
5050
51−optimize' :: (Monad m, MonadReader Options m, Applicative m, MonadSupply m) => JS -> m JS
51+optimize' :: (Monad m, MonadReader Options m, MonadSupply m) => JS -> m JS
5252optimize' js = do
5353 opts <- ask
5454 js' <- untilFixedPoint (inlineFnComposition . tidyUp . applyAll
src/Language/PureScript/CodeGen/JS/Optimizer/Inliner.hs+1−1
@@ -235,7 +235,7 @@ inlineCommonOperators = applyAll $
235235
236236-- (f <<< g $ x) = f (g x)
237237-- (f <<< g) = \x -> f (g x)
238−inlineFnComposition :: (Applicative m, MonadSupply m) => JS -> m JS
238+inlineFnComposition :: (MonadSupply m) => JS -> m JS
239239inlineFnComposition = everywhereOnJSTopDownM convert
240240 where
241241 convert :: (MonadSupply m) => JS -> m JS
src/Language/PureScript/Docs/AsMarkdown.hs+1−2
@@ -29,8 +29,7 @@ import qualified Language.PureScript.Docs.Render as Render
2929-- Markdown-formatted String.
3030--
3131renderModulesAsMarkdown ::
32− (Functor m, Applicative m,
33− MonadError P.MultipleErrors m) =>
32+ (MonadError P.MultipleErrors m) =>
3433 [P.Module] ->
3534 m String
3635renderModulesAsMarkdown =
src/Language/PureScript/Docs/Convert.hs+6−6
@@ -38,7 +38,7 @@ import Language.PureScript.Docs.Convert.ReExports (updateReExports)
3838-- documentation.
3939--
4040convertModulesInPackage ::
41− (Functor m, Applicative m, MonadError P.MultipleErrors m) =>
41+ (MonadError P.MultipleErrors m) =>
4242 [InPackage P.Module] ->
4343 m [Module]
4444convertModulesInPackage modules =
@@ -66,7 +66,7 @@ convertModulesInPackage modules =
6666-- types.
6767--
6868convertModules ::
69− (Functor m, Applicative m, MonadError P.MultipleErrors m) =>
69+ (MonadError P.MultipleErrors m) =>
7070 [P.Module] ->
7171 m [Module]
7272convertModules =
@@ -81,7 +81,7 @@ importPrim = P.addDefaultImport (P.ModuleName [P.ProperName C.prim])
8181-- Convert a sorted list of modules.
8282--
8383convertSorted ::
84− (Functor m, Applicative m, MonadError P.MultipleErrors m) =>
84+ (MonadError P.MultipleErrors m) =>
8585 [P.Module] ->
8686 m [Module]
8787convertSorted modules = do
@@ -99,7 +99,7 @@ convertSorted modules = do
9999-- types.
100100--
101101typeCheckIfNecessary ::
102− (Functor m, Applicative m, MonadError P.MultipleErrors m) =>
102+ (MonadError P.MultipleErrors m) =>
103103 [P.Module] ->
104104 [Module] ->
105105 m [Module]
@@ -122,7 +122,7 @@ typeCheckIfNecessary modules convertedModules =
122122-- were not provided.
123123--
124124typeCheck ::
125− (Functor m, MonadError P.MultipleErrors m) =>
125+ (MonadError P.MultipleErrors m) =>
126126 [P.Module] ->
127127 m ([P.Module], P.Environment)
128128typeCheck =
@@ -182,7 +182,7 @@ runParser p s = either (Left . show) Right $ do
182182-- documentation information from.
183183--
184184partiallyDesugar ::
185− (Functor m, Applicative m, MonadError P.MultipleErrors m) =>
185+ (MonadError P.MultipleErrors m) =>
186186 [P.Module]
187187 -> m (P.Env, [P.Module])
188188partiallyDesugar = P.evalSupplyT 0 . desugar'
src/Language/PureScript/Docs/Convert/ReExports.hs+13−22
@@ -69,8 +69,7 @@ updateReExports env order modules =
6969-- have already been converted.
7070--
7171getReExports ::
72− (Functor m, Applicative m,
73− MonadState (Map P.ModuleName Module) m) =>
72+ (MonadState (Map P.ModuleName Module) m) =>
7473 P.Env ->
7574 P.ModuleName ->
7675 m [(P.ModuleName, [Declaration])]
@@ -105,9 +104,7 @@ getReExports env mn =
105104-- class members are listed.
106105--
107106collectDeclarations ::
108− (Functor m, Applicative m,
109− MonadState (Map P.ModuleName Module) m,
110− MonadReader P.ModuleName m) =>
107+ (MonadState (Map P.ModuleName Module) m, MonadReader P.ModuleName m) =>
111108 P.Imports ->
112109 P.Exports ->
113110 m [(P.ModuleName, [Declaration])]
@@ -154,7 +151,7 @@ collectDeclarations imports exports = do
154151-- instantiate @name@ as both 'P.Ident' and 'P.ProperName'.
155152--
156153findImport ::
157− (Show name, Eq name, Applicative m, MonadReader P.ModuleName m) =>
154+ (Show name, Eq name, MonadReader P.ModuleName m) =>
158155 [P.ImportRecord name] ->
159156 (name, P.ModuleName) ->
160157 m (P.ModuleName, name)
@@ -174,9 +171,8 @@ findImport imps (name, orig) =
174171 internalErrorInModule ("findImport: not found: " ++ show (name, orig))
175172
176173lookupValueDeclaration ::
177− (Applicative m,
178− MonadState (Map P.ModuleName Module) m,
179− MonadReader P.ModuleName m) =>
174+ (MonadState (Map P.ModuleName Module) m,
175+ MonadReader P.ModuleName m) =>
180176 P.ModuleName ->
181177 P.Ident ->
182178 m (P.ModuleName, [Either (String, P.Constraint, ChildDeclaration) Declaration])
@@ -233,9 +229,8 @@ lookupValueDeclaration importedFrom ident = do
233229-- are only included in the output if they are listed in the arguments.
234230--
235231lookupTypeDeclaration ::
236− (Applicative m,
237− MonadState (Map P.ModuleName Module) m,
238− MonadReader P.ModuleName m) =>
232+ (MonadState (Map P.ModuleName Module) m,
233+ MonadReader P.ModuleName m) =>
239234 P.ModuleName ->
240235 P.ProperName 'P.TypeName ->
241236 m (P.ModuleName, [Declaration])
@@ -251,9 +246,8 @@ lookupTypeDeclaration importedFrom ty = do
251246 ("lookupTypeDeclaration: unexpected result: " ++ show other)
252247
253248lookupTypeClassDeclaration ::
254− (Applicative m,
255− MonadState (Map P.ModuleName Module) m,
256− MonadReader P.ModuleName m) =>
249+ (MonadState (Map P.ModuleName Module) m,
250+ MonadReader P.ModuleName m) =>
257251 P.ModuleName ->
258252 P.ProperName 'P.ClassName ->
259253 m (P.ModuleName, [Declaration])
@@ -276,9 +270,8 @@ lookupTypeClassDeclaration importedFrom tyClass = do
276270-- state, or raise an internal error if it is not there.
277271--
278272lookupModuleDeclarations ::
279− (Applicative m,
280− MonadState (Map P.ModuleName Module) m,
281− MonadReader P.ModuleName m) =>
273+ (MonadState (Map P.ModuleName Module) m,
274+ MonadReader P.ModuleName m) =>
282275 String ->
283276 P.ModuleName ->
284277 m [Declaration]
@@ -293,8 +286,7 @@ lookupModuleDeclarations definedIn moduleName = do
293286 pure (allDeclarations mdl)
294287
295288handleTypeClassMembers ::
296− (Functor m, Applicative m,
297− MonadReader P.ModuleName m) =>
289+ (MonadReader P.ModuleName m) =>
298290 Map P.ModuleName [Either (String, P.Constraint, ChildDeclaration) Declaration] ->
299291 Map P.ModuleName [Declaration] ->
300292 m (Map P.ModuleName [Declaration], Map P.ModuleName [Declaration])
@@ -364,8 +356,7 @@ instance Monoid TypeClassEnv where
364356-- Returns a tuple of (values, type classes).
365357--
366358handleEnv ::
367− (Functor m, Applicative m,
368− MonadReader P.ModuleName m) =>
359+ (MonadReader P.ModuleName m) =>
369360 TypeClassEnv ->
370361 m ([Declaration], [Declaration])
371362handleEnv TypeClassEnv{..} =
src/Language/PureScript/Docs/ParseAndBookmark.hs+2−2
@@ -35,7 +35,7 @@ import Language.PureScript.Docs.Convert (collectBookmarks)
3535-- * Collect a list of bookmarks from the whole set of source files
3636-- * Return the parsed modules and the bookmarks
3737parseAndBookmark ::
38− (Functor m, Applicative m, MonadError P.MultipleErrors m, MonadIO m) =>
38+ (MonadError P.MultipleErrors m, MonadIO m) =>
3939 [FilePath]
4040 -> [(PackageName, FilePath)]
4141 -> m ([InPackage P.Module], [Bookmark])
@@ -82,7 +82,7 @@ fileInfoToString (FromDep _ fn) = fn
8282parseFile :: FilePath -> IO (FilePath, String)
8383parseFile input' = (,) input' <$> readFile input'
8484
85−parseAs :: (Functor m, MonadIO m) => (FilePath -> a) -> FilePath -> m (a, String)
85+parseAs :: (MonadIO m) => (FilePath -> a) -> FilePath -> m (a, String)
8686parseAs g = fmap (first g) . liftIO . parseFile
8787
8888getDepsModuleNames :: [InPackage (FilePath, P.Module)] -> M.Map P.ModuleName PackageName
src/Language/PureScript/Errors.hs+4−4
@@ -1283,7 +1283,7 @@ renderBox = unlines
12831283rethrow :: (MonadError e m) => (e -> e) -> m a -> m a
12841284rethrow f = flip catchError $ \e -> throwError (f e)
12851285
1286−reifyErrors :: (Functor m, MonadError e m) => m a -> m (Either e a)
1286+reifyErrors :: (MonadError e m) => m a -> m (Either e a)
12871287reifyErrors ma = catchError (fmap Right ma) (return . Left)
12881288
12891289reflectErrors :: (MonadError e m) => m (Either e a) -> m a
@@ -1310,13 +1310,13 @@ withPosition pos (ErrorMessage hints se) = ErrorMessage (PositionedError pos : h
13101310-- |
13111311-- Collect errors in in parallel
13121312--
1313−parU :: (MonadError MultipleErrors m, Functor m) => [a] -> (a -> m b) -> m [b]
1313+parU :: (MonadError MultipleErrors m) => [a] -> (a -> m b) -> m [b]
13141314parU xs f = forM xs (withError . f) >>= collectErrors
13151315 where
1316− withError :: (MonadError MultipleErrors m, Functor m) => m a -> m (Either MultipleErrors a)
1316+ withError :: (MonadError MultipleErrors m) => m a -> m (Either MultipleErrors a)
13171317 withError u = catchError (Right <$> u) (return . Left)
13181318
1319− collectErrors :: (MonadError MultipleErrors m, Functor m) => [Either MultipleErrors a] -> m [a]
1319+ collectErrors :: (MonadError MultipleErrors m) => [Either MultipleErrors a] -> m [a]
13201320 collectErrors es = case lefts es of
13211321 [] -> return $ rights es
13221322 errs -> throwError $ fold errs
src/Language/PureScript/Ide.hs+3−3
@@ -74,12 +74,12 @@ findType :: (PscIde m, MonadLogger m) =>
7474findType search filters =
7575 CompletionResult . getExactMatches search filters <$> getAllModulesWithReexports
7676
77−findPursuitCompletions :: (Applicative m, MonadIO m, MonadLogger m) =>
77+findPursuitCompletions :: (MonadIO m, MonadLogger m) =>
7878 PursuitQuery -> m Success
7979findPursuitCompletions (PursuitQuery q) =
8080 PursuitResult <$> liftIO (searchPursuitForDeclarations q)
8181
82−findPursuitPackages :: (Applicative m, MonadIO m, MonadLogger m) =>
82+findPursuitPackages :: (MonadIO m, MonadLogger m) =>
8383 PursuitQuery -> m Success
8484findPursuitPackages (PursuitQuery q) =
8585 PursuitResult <$> liftIO (findPackagesForModuleIdent q)
@@ -118,7 +118,7 @@ caseSplit l b e csa t = do
118118addClause :: Text -> CS.WildcardAnnotations -> Success
119119addClause t wca = MultilineTextResult (CS.addClause t wca)
120120
121−importsForFile :: (Applicative m, MonadIO m, MonadLogger m, MonadError PscIdeError m) =>
121+importsForFile :: (MonadIO m, MonadLogger m, MonadError PscIdeError m) =>
122122 FilePath -> m Success
123123importsForFile fp = do
124124 imports <- getImportsForFile fp
src/Language/PureScript/Ide/CaseSplit.hs+1−1
@@ -78,7 +78,7 @@ findTypeDeclaration' t ExternsFile{..} =
7878 EDType tn _ _ -> tn == t
7979 _ -> False) efDeclarations
8080
81−splitTypeConstructor :: (Applicative m, MonadError PscIdeError m) =>
81+splitTypeConstructor :: (MonadError PscIdeError m) =>
8282 Type -> m (ProperName 'TypeName, [Type])
8383splitTypeConstructor = go []
8484 where
src/Language/PureScript/Ide/Externs.hs+1−1
@@ -34,7 +34,7 @@ import Language.PureScript.Ide.Types
3434import qualified Language.PureScript.Names as N
3535import qualified Language.PureScript.Pretty as PP
3636
37−readExternFile :: (Applicative m, MonadIO m, MonadError PscIdeError m) =>
37+readExternFile :: (MonadIO m, MonadError PscIdeError m) =>
3838 FilePath -> m PE.ExternsFile
3939readExternFile fp = do
4040 parseResult <- liftIO (decodeT <$> T.readFile fp)
src/Language/PureScript/Ide/SourceFile.hs+3−4
@@ -3,8 +3,7 @@
33{-# LANGUAGE OverloadedStrings #-}
44module Language.PureScript.Ide.SourceFile where
55
6−import Prelude ()
7−import Prelude.Compat
6+import Prelude
87
98import Control.Monad.Error.Class
109import Control.Monad.IO.Class
@@ -22,7 +21,7 @@ import qualified Language.PureScript.Names as N
2221import qualified Language.PureScript.Parser as P
2322import System.Directory
2423
25−parseModuleFromFile :: (Applicative m, MonadIO m, MonadError PscIdeError m) =>
24+parseModuleFromFile :: (MonadIO m, MonadError PscIdeError m) =>
2625 FilePath -> m D.Module
2726parseModuleFromFile fp = do
2827 exists <- liftIO (doesFileExist fp)
@@ -46,7 +45,7 @@ getImports (D.Module _ _ _ declarations _) =
4645 isImport (D.PositionedDeclaration _ _ (i@D.ImportDeclaration{})) = Just i
4746 isImport _ = Nothing
4847
49−getImportsForFile :: (Applicative m, MonadIO m, MonadError PscIdeError m) =>
48+getImportsForFile :: (MonadIO m, MonadError PscIdeError m) =>
5049 FilePath -> m [ModuleImport]
5150getImportsForFile fp = do
5251 module' <- parseModuleFromFile fp
src/Language/PureScript/Ide/State.hs+7−7
@@ -25,38 +25,38 @@ import Language.PureScript.Ide.Reexports
2525import Language.PureScript.Ide.Types
2626import Language.PureScript.Names
2727
28−getPscIdeState :: (PscIde m, Functor m) =>
28+getPscIdeState :: (PscIde m) =>
2929 m (M.Map ModuleIdent [ExternDecl])
3030getPscIdeState = do
3131 stateVar <- envStateVar <$> ask
3232 liftIO $ pscStateModules <$> readTVarIO stateVar
3333
34−getExternFiles :: (PscIde m, Functor m) =>
34+getExternFiles :: (PscIde m) =>
3535 m (M.Map ModuleName ExternsFile)
3636getExternFiles = do
3737 stateVar <- envStateVar <$> ask
3838 liftIO (externsFiles <$> readTVarIO stateVar)
3939
40−getAllDecls :: (PscIde m, Functor m) => m [ExternDecl]
40+getAllDecls :: (PscIde m) => m [ExternDecl]
4141getAllDecls = concat <$> getPscIdeState
4242
43−getAllModules :: (PscIde m, Functor m) => m [Module]
43+getAllModules :: (PscIde m) => m [Module]
4444getAllModules = M.toList <$> getPscIdeState
4545
46−getAllModulesWithReexports :: (PscIde m, MonadLogger m, Applicative m) =>
46+getAllModulesWithReexports :: (PscIde m, MonadLogger m) =>
4747 m [Module]
4848getAllModulesWithReexports = do
4949 mis <- M.keys <$> getPscIdeState
5050 ms <- traverse getModuleWithReexports mis
5151 pure (catMaybes ms)
5252
53−getModule :: (PscIde m, MonadLogger m, Applicative m) =>
53+getModule :: (PscIde m, MonadLogger m) =>
5454 ModuleIdent -> m (Maybe Module)
5555getModule m = do
5656 modules <- getPscIdeState
5757 pure ((m,) <$> M.lookup m modules)
5858
59−getModuleWithReexports :: (PscIde m, MonadLogger m, Applicative m) =>
59+getModuleWithReexports :: (PscIde m, MonadLogger m) =>
6060 ModuleIdent -> m (Maybe Module)
6161getModuleWithReexports mi = do
6262 m <- getModule mi
src/Language/PureScript/Ide/Types.hs+1−1
@@ -79,7 +79,7 @@ data PscIdeEnvironment =
7979 , envConfiguration :: Configuration
8080 }
8181
82−type PscIde m = (Applicative m, MonadIO m, MonadReader PscIdeEnvironment m)
82+type PscIde m = (MonadIO m, MonadReader PscIdeEnvironment m)
8383
8484data PscIdeState =
8585 PscIdeState
src/Language/PureScript/Kinds.hs+1−1
@@ -42,7 +42,7 @@ everywhereOnKinds f = go
4242 go (FunKind k1 k2) = f (FunKind (go k1) (go k2))
4343 go other = f other
4444
45−everywhereOnKindsM :: (Functor m, Applicative m, Monad m) => (Kind -> m Kind) -> Kind -> m Kind
45+everywhereOnKindsM :: Monad m => (Kind -> m Kind) -> Kind -> m Kind
4646everywhereOnKindsM f = go
4747 where
4848 go (Row k1) = (Row <$> go k1) >>= f
src/Language/PureScript/Linter.hs+1−1
@@ -29,7 +29,7 @@ import Language.PureScript.Linter.Imports as L
2929-- | Lint the PureScript AST.
3030-- |
3131-- | Right now, this pass only performs a shadowing check.
32−lint :: forall m. (Applicative m, MonadWriter MultipleErrors m) => Module -> m ()
32+lint :: forall m. (MonadWriter MultipleErrors m) => Module -> m ()
3333lint (Module _ _ mn ds _) = censor (addHint (ErrorInModule mn)) $ mapM_ lintDeclaration ds
3434 where
3535 moduleNames :: S.Set Ident
src/Language/PureScript/Linter/Exhaustive.hs+2−2
@@ -261,7 +261,7 @@ checkExhaustive hasConstraint env mn numArgs cas = makeResult . first nub $ fold
261261-- |
262262-- Exhaustivity checking over a list of declarations
263263--
264−checkExhaustiveDecls :: forall m. (Applicative m, MonadWriter MultipleErrors m) => Environment -> ModuleName -> [Declaration] -> m ()
264+checkExhaustiveDecls :: forall m. MonadWriter MultipleErrors m => Environment -> ModuleName -> [Declaration] -> m ()
265265checkExhaustiveDecls env mn = mapM_ onDecl
266266 where
267267 onDecl :: Declaration -> m ()
@@ -310,5 +310,5 @@ checkExhaustiveDecls env mn = mapM_ onDecl
310310-- |
311311-- Exhaustivity checking over a single module
312312--
313−checkExhaustiveModule :: forall m. (Applicative m, MonadWriter MultipleErrors m) => Environment -> Module -> m ()
313+checkExhaustiveModule :: forall m. MonadWriter MultipleErrors m => Environment -> Module -> m ()
314314checkExhaustiveModule env (Module _ _ mn ds _) = censor (addHint (ErrorInModule mn)) $ checkExhaustiveDecls env mn ds
src/Language/PureScript/Linter/Imports.hs+2−2
@@ -70,7 +70,7 @@ type UsedImports = M.Map ModuleName [Name]
7070--
7171lintImports
7272 :: forall m
73− . (Applicative m, MonadError MultipleErrors m, MonadWriter MultipleErrors m)
73+ . (MonadError MultipleErrors m, MonadWriter MultipleErrors m)
7474 => Module
7575 -> Env
7676 -> UsedImports
@@ -170,7 +170,7 @@ lintImports (Module _ _ mn mdecls mexports) env usedImps = do
170170
171171lintImportDecl
172172 :: forall m
173− . (Applicative m, MonadError MultipleErrors m, MonadWriter MultipleErrors m)
173+ . (MonadError MultipleErrors m, MonadWriter MultipleErrors m)
174174 => Env
175175 -> ModuleName
176176 -> Maybe ModuleName
src/Language/PureScript/Make.hs+1−1
@@ -145,7 +145,7 @@ data RebuildPolicy
145145-- If timestamps have not changed, the externs file can be used to provide the module's types without
146146-- having to typecheck the module again.
147147--
148−make :: forall m. (Functor m, Applicative m, Monad m, MonadBaseControl IO m, MonadReader Options m, MonadError MultipleErrors m, MonadWriter MultipleErrors m)
148+make :: forall m. (Monad m, MonadBaseControl IO m, MonadReader Options m, MonadError MultipleErrors m, MonadWriter MultipleErrors m)
149149 => MakeActions m
150150 -> [Module]
151151 -> m Environment
src/Language/PureScript/Parser/Declarations.hs+1−1
@@ -261,7 +261,7 @@ parseModule = do
261261 return $ Module ss comments name decls exports
262262
263263-- | Parse a collection of modules in parallel
264−parseModulesFromFiles :: forall m k. (MonadError MultipleErrors m, Functor m) =>
264+parseModulesFromFiles :: forall m k. (MonadError MultipleErrors m) =>
265265 (k -> FilePath) -> [(k, String)] -> m [(k, Module)]
266266parseModulesFromFiles toFilePath input = do
267267 modules <- flip parU id $ map wrapError $ inParallel $ flip map input $ \(k, content) -> do
src/Language/PureScript/Parser/JS.hs+1−1
@@ -36,7 +36,7 @@ import qualified Text.Parsec as PS
3636
3737type ForeignJS = String
3838
39−parseForeignModulesFromFiles :: (Functor m, MonadError MultipleErrors m, MonadWriter MultipleErrors m)
39+parseForeignModulesFromFiles :: (MonadError MultipleErrors m, MonadWriter MultipleErrors m)
4040 => [(FilePath, ForeignJS)]
4141 -> m (M.Map ModuleName FilePath)
4242parseForeignModulesFromFiles files = do
src/Language/PureScript/Sugar.hs+1−1
@@ -63,7 +63,7 @@ import Language.PureScript.Sugar.TypeDeclarations as S
6363--
6464-- * Group mutually recursive value and data declarations into binding groups.
6565--
66−desugar :: (Applicative m, MonadSupply m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) => [ExternsFile] -> [Module] -> m [Module]
66+desugar :: (MonadSupply m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) => [ExternsFile] -> [Module] -> m [Module]
6767desugar externs =
6868 map removeSignedLiterals
6969 >>> traverse desugarObjectConstructors
src/Language/PureScript/Sugar/BindingGroups.hs+3−3
@@ -35,7 +35,7 @@ import Language.PureScript.Types
3535-- Replace all sets of mutually-recursive declarations in a module with binding groups
3636--
3737createBindingGroupsModule
38− :: (Functor m, Applicative m, MonadError MultipleErrors m)
38+ :: (MonadError MultipleErrors m)
3939 => [Module]
4040 -> m [Module]
4141createBindingGroupsModule =
@@ -52,7 +52,7 @@ collapseBindingGroupsModule =
5252
5353createBindingGroups
5454 :: forall m
55− . (Functor m, Applicative m, MonadError MultipleErrors m)
55+ . (MonadError MultipleErrors m)
5656 => ModuleName
5757 -> [Declaration]
5858 -> m [Declaration]
@@ -171,7 +171,7 @@ getTypeName _ = internalError "Expected DataDeclaration"
171171--
172172toBindingGroup
173173 :: forall m
174− . (Functor m, MonadError MultipleErrors m)
174+ . (MonadError MultipleErrors m)
175175 => ModuleName
176176 -> SCC Declaration
177177 -> m Declaration
src/Language/PureScript/Sugar/CaseDeclarations.hs+6−6
@@ -36,7 +36,7 @@ isLeft (Right _) = False
3636-- |
3737-- Replace all top-level binders in a module with case expressions.
3838--
39−desugarCasesModule :: (Functor m, Applicative m, MonadSupply m, MonadError MultipleErrors m) => [Module] -> m [Module]
39+desugarCasesModule :: (MonadSupply m, MonadError MultipleErrors m) => [Module] -> m [Module]
4040desugarCasesModule ms = forM ms $ \(Module ss coms name ds exps) ->
4141 rethrow (addHint (ErrorInModule name)) $
4242 Module ss coms name <$> (desugarCases <=< desugarAbs <=< validateCases $ ds) <*> pure exps
@@ -44,7 +44,7 @@ desugarCasesModule ms = forM ms $ \(Module ss coms name ds exps) ->
4444-- |
4545-- Validates that case head and binder lengths match.
4646--
47−validateCases :: forall m. (Functor m, Applicative m, MonadSupply m, MonadError MultipleErrors m) => [Declaration] -> m [Declaration]
47+validateCases :: forall m. (MonadSupply m, MonadError MultipleErrors m) => [Declaration] -> m [Declaration]
4848validateCases = flip parU f
4949 where
5050 (f, _, _) = everywhereOnValuesM return validate return
@@ -69,7 +69,7 @@ validateCases = flip parU f
6969 positionedBinder (PositionedBinder p _ _) = Just p
7070 positionedBinder _ = Nothing
7171
72−desugarAbs :: forall m. (Functor m, Applicative m, MonadSupply m, MonadError MultipleErrors m) => [Declaration] -> m [Declaration]
72+desugarAbs :: forall m. (MonadSupply m, MonadError MultipleErrors m) => [Declaration] -> m [Declaration]
7373desugarAbs = flip parU f
7474 where
7575 (f, _, _) = everywhereOnValuesM return replace return
@@ -83,7 +83,7 @@ desugarAbs = flip parU f
8383-- |
8484-- Replace all top-level binders with case expressions.
8585--
86−desugarCases :: forall m. (Functor m, Applicative m, MonadSupply m, MonadError MultipleErrors m) => [Declaration] -> m [Declaration]
86+desugarCases :: forall m. (MonadSupply m, MonadError MultipleErrors m) => [Declaration] -> m [Declaration]
8787desugarCases = desugarRest <=< fmap join . flip parU toDecls . groupBy inSameGroup
8888 where
8989 desugarRest :: [Declaration] -> m [Declaration]
@@ -109,7 +109,7 @@ inSameGroup (PositionedDeclaration _ _ d1) d2 = inSameGroup d1 d2
109109inSameGroup d1 (PositionedDeclaration _ _ d2) = inSameGroup d1 d2
110110inSameGroup _ _ = False
111111
112−toDecls :: forall m. (Functor m, Applicative m, Monad m, MonadSupply m, MonadError MultipleErrors m) => [Declaration] -> m [Declaration]
112+toDecls :: forall m. (MonadSupply m, MonadError MultipleErrors m) => [Declaration] -> m [Declaration]
113113toDecls [ValueDeclaration ident nameKind bs (Right val)] | all isVarBinder bs = do
114114 args <- mapM fromVarBinder bs
115115 let body = foldr (Abs . Left) val args
@@ -147,7 +147,7 @@ toTuple (ValueDeclaration _ _ bs result) = (bs, result)
147147toTuple (PositionedDeclaration _ _ d) = toTuple d
148148toTuple _ = internalError "Not a value declaration"
149149
150−makeCaseDeclaration :: forall m. (Functor m, Applicative m, MonadSupply m, MonadError MultipleErrors m) => Ident -> [([Binder], Either [(Guard, Expr)] Expr)] -> m Declaration
150+makeCaseDeclaration :: forall m. (MonadSupply m, MonadError MultipleErrors m) => Ident -> [([Binder], Either [(Guard, Expr)] Expr)] -> m Declaration
151151makeCaseDeclaration ident alternatives = do
152152 let namedArgs = map findName . fst <$> alternatives
153153 argNames = foldl1 resolveNames namedArgs
src/Language/PureScript/Sugar/DoNotation.hs+2−2
@@ -26,10 +26,10 @@ import Control.Monad.Supply.Class
2626-- Replace all @DoNotationBind@ and @DoNotationValue@ constructors with applications of the Prelude.bind function,
2727-- and all @DoNotationLet@ constructors with let expressions.
2828--
29−desugarDoModule :: forall m. (Applicative m, MonadSupply m, MonadError MultipleErrors m) => Module -> m Module
29+desugarDoModule :: forall m. (MonadSupply m, MonadError MultipleErrors m) => Module -> m Module
3030desugarDoModule (Module ss coms mn ds exts) = Module ss coms mn <$> parU ds desugarDo <*> pure exts
3131
32−desugarDo :: forall m. (Applicative m, MonadSupply m, MonadError MultipleErrors m) => Declaration -> m Declaration
32+desugarDo :: forall m. (MonadSupply m, MonadError MultipleErrors m) => Declaration -> m Declaration
3333desugarDo (PositionedDeclaration pos com d) = PositionedDeclaration pos com <$> rethrowWithPosition pos (desugarDo d)
3434desugarDo d =
3535 let (f, _, _) = everywhereOnValuesM return replace return
src/Language/PureScript/Sugar/Names.hs+4−4
@@ -44,13 +44,13 @@ import Language.PureScript.Linter.Imports
4444-- Replaces all local names with qualified names within a list of modules. The
4545-- modules should be topologically sorted beforehand.
4646--
47−desugarImports :: forall m. (Applicative m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) => [ExternsFile] -> [Module] -> m [Module]
47+desugarImports :: forall m. (MonadError MultipleErrors m, MonadWriter MultipleErrors m) => [ExternsFile] -> [Module] -> m [Module]
4848desugarImports externs modules =
4949 fmap snd (desugarImportsWithEnv externs modules)
5050
5151desugarImportsWithEnv
5252 :: forall m
53− . (Applicative m, MonadError MultipleErrors m, MonadWriter MultipleErrors m)
53+ . (MonadError MultipleErrors m, MonadWriter MultipleErrors m)
5454 => [ExternsFile]
5555 -> [Module]
5656 -> m (Env, [Module])
@@ -141,7 +141,7 @@ elaborateExports exps (Module ss coms mn decls refs) =
141141--
142142renameInModule
143143 :: forall m
144− . (Applicative m, MonadError MultipleErrors m, MonadWriter MultipleErrors m, MonadState UsedImports m)
144+ . (MonadError MultipleErrors m, MonadWriter MultipleErrors m, MonadState UsedImports m)
145145 => Env
146146 -> Imports
147147 -> Module
@@ -334,7 +334,7 @@ renameInModule env imports (Module ss coms mn decls exps) =
334334--
335335updateExportRefs
336336 :: forall m
337− . (Applicative m, MonadError MultipleErrors m, MonadWriter MultipleErrors m)
337+ . (MonadError MultipleErrors m, MonadWriter MultipleErrors m)
338338 => Module
339339 -> m Module
340340updateExportRefs (Module ss coms mn decls exps) =
src/Language/PureScript/Sugar/Names/Exports.hs+3−3
@@ -31,7 +31,7 @@ import Language.PureScript.Sugar.Names.Env
3131-- |
3232-- Finds all exportable members of a module, disregarding any explicit exports.
3333--
34−findExportable :: forall m. (Applicative m, MonadError MultipleErrors m) => Module -> m Exports
34+findExportable :: forall m. (MonadError MultipleErrors m) => Module -> m Exports
3535findExportable (Module _ _ mn ds _) =
3636 rethrow (addHint (ErrorInModule mn)) $ foldM updateExports nullExports ds
3737 where
@@ -56,7 +56,7 @@ findExportable (Module _ _ mn ds _) =
5656-- Resolves the exports for a module, filtering out members that have not been
5757-- exported and elaborating re-exports of other modules.
5858--
59−resolveExports :: forall m. (Applicative m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) => Env -> ModuleName -> Imports -> Exports -> [DeclarationRef] -> m Exports
59+resolveExports :: forall m. (MonadError MultipleErrors m, MonadWriter MultipleErrors m) => Env -> ModuleName -> Imports -> Exports -> [DeclarationRef] -> m Exports
6060resolveExports env mn imps exps refs =
6161 rethrow (addHint (ErrorInModule mn)) $ do
6262 filtered <- filterModule mn exps refs
@@ -199,7 +199,7 @@ resolveExports env mn imps exps refs =
199199--
200200filterModule
201201 :: forall m
202− . (Applicative m, MonadError MultipleErrors m)
202+ . (MonadError MultipleErrors m)
203203 => ModuleName
204204 -> Exports
205205 -> [DeclarationRef]
src/Language/PureScript/Sugar/Names/Imports.hs+4−4
@@ -37,7 +37,7 @@ import Language.PureScript.Sugar.Names.Env
3737--
3838findImports
3939 :: forall m
40− . (Applicative m, MonadError MultipleErrors m, MonadWriter MultipleErrors m)
40+ . (MonadError MultipleErrors m, MonadWriter MultipleErrors m)
4141 => [Declaration]
4242 -> m (M.Map ModuleName [(Maybe SourceSpan, ImportDeclarationType, Maybe ModuleName)])
4343findImports = foldM (go Nothing) M.empty
@@ -56,7 +56,7 @@ type ImportDef = (Maybe SourceSpan, ImportDeclarationType, Maybe ModuleName)
5656--
5757resolveImports
5858 :: forall m
59− . (Applicative m, MonadError MultipleErrors m, MonadWriter MultipleErrors m)
59+ . (MonadError MultipleErrors m, MonadWriter MultipleErrors m)
6060 => Env
6161 -> Module
6262 -> m (Module, Imports)
@@ -160,7 +160,7 @@ resolveImports env (Module ss coms currentModule decls exps) =
160160-- | Constructs a set of imports for a single module import.
161161resolveModuleImport
162162 :: forall m
163− . (Applicative m, MonadError MultipleErrors m, MonadWriter MultipleErrors m)
163+ . (MonadError MultipleErrors m, MonadWriter MultipleErrors m)
164164 => Env
165165 -> Imports
166166 -> (ModuleName, [(Maybe SourceSpan, Maybe ImportDeclarationType, Maybe ModuleName)])
@@ -187,7 +187,7 @@ resolveModuleImport env ie (mn, imps) = foldM go ie imps
187187--
188188resolveImport
189189 :: forall m
190− . (Applicative m, MonadError MultipleErrors m, MonadWriter MultipleErrors m)
190+ . (MonadError MultipleErrors m, MonadWriter MultipleErrors m)
191191 => ModuleName
192192 -> Exports
193193 -> Imports
src/Language/PureScript/Sugar/ObjectWildcards.hs+1−1
@@ -21,7 +21,7 @@ import Language.PureScript.Names
2121
2222desugarObjectConstructors
2323 :: forall m
24− . (Applicative m, MonadSupply m, MonadError MultipleErrors m)
24+ . (MonadSupply m, MonadError MultipleErrors m)
2525 => Module
2626 -> m Module
2727desugarObjectConstructors (Module ss coms mn ds exts) = Module ss coms mn <$> mapM desugarDecl ds <*> pure exts
src/Language/PureScript/Sugar/Operators.hs+3−3
@@ -57,7 +57,7 @@ type AliasName = Either (Qualified Ident) (Qualified (ProperName 'ConstructorNam
5757--
5858rebracket
5959 :: forall m
60− . (Applicative m, MonadError MultipleErrors m)
60+ . (MonadError MultipleErrors m)
6161 => [ExternsFile]
6262 -> [Module]
6363 -> m [Module]
@@ -116,7 +116,7 @@ removeSignedLiterals (Module ss coms mn ds exts) = Module ss coms mn (map f' ds)
116116 go other = other
117117
118118rebracketModule
119− :: (Applicative m, MonadError MultipleErrors m)
119+ :: (MonadError MultipleErrors m)
120120 => [[(Qualified Ident, Associativity)]]
121121 -> Module
122122 -> m Module
@@ -178,7 +178,7 @@ customOperatorTable fixities =
178178
179179desugarOperatorSections
180180 :: forall m
181− . (Applicative m, MonadSupply m, MonadError MultipleErrors m)
181+ . (MonadSupply m, MonadError MultipleErrors m)
182182 => Module
183183 -> m Module
184184desugarOperatorSections (Module ss coms mn ds exts) =
src/Language/PureScript/Sugar/TypeClasses.hs+4−4
@@ -45,7 +45,7 @@ type Desugar = StateT MemberMap
4545-- instance dictionary expressions.
4646--
4747desugarTypeClasses
48− :: (Functor m, Applicative m, MonadSupply m, MonadError MultipleErrors m)
48+ :: (MonadSupply m, MonadError MultipleErrors m)
4949 => [ExternsFile]
5050 -> [Module]
5151 -> m [Module]
@@ -62,7 +62,7 @@ desugarTypeClasses externs = flip evalStateT initialState . traverse desugarModu
6262 fromExternsDecl _ _ = Nothing
6363
6464desugarModule
65− :: (Functor m, Applicative m, MonadSupply m, MonadError MultipleErrors m)
65+ :: (MonadSupply m, MonadError MultipleErrors m)
6666 => Module
6767 -> Desugar m Module
6868desugarModule (Module ss coms name decls (Just exps)) = do
@@ -171,7 +171,7 @@ desugarModule _ = internalError "Exports should have been elaborated in name des
171171-- };
172172-}
173173desugarDecl
174− :: (Functor m, Applicative m, MonadSupply m, MonadError MultipleErrors m)
174+ :: (MonadSupply m, MonadError MultipleErrors m)
175175 => ModuleName
176176 -> [DeclarationRef]
177177 -> Declaration
@@ -259,7 +259,7 @@ unit = TypeApp tyObject REmpty
259259
260260typeInstanceDictionaryDeclaration
261261 :: forall m
262− . (Functor m, Applicative m, MonadSupply m, MonadError MultipleErrors m)
262+ . (MonadSupply m, MonadError MultipleErrors m)
263263 => Ident
264264 -> ModuleName
265265 -> [Constraint]
src/Language/PureScript/Sugar/TypeClasses/Deriving.hs+6−6
@@ -32,7 +32,7 @@ import qualified Language.PureScript.Constants as C
3232
3333-- | Elaborates deriving instance declarations by code generation.
3434deriveInstances
35− :: (Functor m, Applicative m, MonadError MultipleErrors m, MonadSupply m)
35+ :: (MonadError MultipleErrors m, MonadSupply m)
3636 => Module
3737 -> m Module
3838deriveInstances (Module ss coms mn ds exts) = Module ss coms mn <$> mapM (deriveInstance mn ds) ds <*> pure exts
@@ -40,7 +40,7 @@ deriveInstances (Module ss coms mn ds exts) = Module ss coms mn <$> mapM (derive
4040-- | Takes a declaration, and if the declaration is a deriving TypeInstanceDeclaration,
4141-- elaborates that into an instance declaration via code generation.
4242deriveInstance
43− :: (Functor m, MonadError MultipleErrors m, MonadSupply m)
43+ :: (MonadError MultipleErrors m, MonadSupply m)
4444 => ModuleName
4545 -> [Declaration]
4646 -> Declaration
@@ -82,7 +82,7 @@ typesProxy :: ModuleName
8282typesProxy = ModuleName [ ProperName "Type", ProperName "Proxy" ]
8383
8484deriveGeneric
85− :: forall m. (Functor m, MonadError MultipleErrors m, MonadSupply m)
85+ :: forall m. (MonadError MultipleErrors m, MonadSupply m)
8686 => ModuleName
8787 -> [Declaration]
8888 -> ProperName 'TypeName
@@ -246,7 +246,7 @@ deriveGeneric mn ds tyConNm dargs = do
246246 mkGenVar = mkVarMn (Just (ModuleName [ProperName "Data", ProperName C.generic]))
247247
248248deriveEq ::
249− forall m. (Functor m, MonadError MultipleErrors m, MonadSupply m)
249+ forall m. (MonadError MultipleErrors m, MonadSupply m)
250250 => ModuleName
251251 -> [Declaration]
252252 -> ProperName 'TypeName
@@ -298,7 +298,7 @@ deriveEq mn ds tyConNm = do
298298 toEqTest l r _ = preludeEq l r
299299
300300deriveOrd ::
301− forall m. (Functor m, MonadError MultipleErrors m, MonadSupply m)
301+ forall m. (MonadError MultipleErrors m, MonadSupply m)
302302 => ModuleName
303303 -> [Declaration]
304304 -> ProperName 'TypeName
@@ -377,7 +377,7 @@ deriveOrd mn ds tyConNm = do
377377 toOrdering l r _ = preludeCompare l r
378378
379379findTypeDecl
380− :: (Functor m, MonadError MultipleErrors m)
380+ :: (MonadError MultipleErrors m)
381381 => ProperName 'TypeName
382382 -> [Declaration]
383383 -> m Declaration
src/Language/PureScript/Sugar/TypeDeclarations.hs+1−1
@@ -36,7 +36,7 @@ import Language.PureScript.Traversals
3636-- |
3737-- Replace all top level type declarations in a module with type annotations
3838--
39−desugarTypeDeclarationsModule :: forall m. (Functor m, Applicative m, MonadError MultipleErrors m) => [Module] -> m [Module]
39+desugarTypeDeclarationsModule :: forall m. (MonadError MultipleErrors m) => [Module] -> m [Module]
4040desugarTypeDeclarationsModule ms = forM ms $ \(Module ss coms name ds exps) ->
4141 rethrow (addHint (ErrorInModule name)) $
4242 Module ss coms name <$> desugarTypeDeclarations ds <*> pure exps
src/Language/PureScript/TypeChecker.hs+12−12
@@ -40,7 +40,7 @@ import Language.PureScript.TypeClassDictionaries
4040import Language.PureScript.Types
4141
4242addDataType
43− :: (Functor m, Applicative m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m)
43+ :: (MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m)
4444 => ModuleName
4545 -> DataDeclType
4646 -> ProperName 'TypeName
@@ -56,7 +56,7 @@ addDataType moduleName dtype name args dctors ctorKind = do
5656 addDataConstructor moduleName dtype name (map fst args) dctor tys
5757
5858addDataConstructor
59− :: (Functor m, Applicative m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m)
59+ :: (MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m)
6060 => ModuleName
6161 -> DataDeclType
6262 -> ProperName 'TypeName
@@ -74,7 +74,7 @@ addDataConstructor moduleName dtype name args dctor tys = do
7474 putEnv $ env { dataConstructors = M.insert (Qualified (Just moduleName) dctor) (dtype, name, polyType, fields) (dataConstructors env) }
7575
7676addTypeSynonym
77− :: (Functor m, Applicative m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m)
77+ :: (MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m)
7878 => ModuleName
7979 -> ProperName 'TypeName
8080 -> [(String, Maybe Kind)]
@@ -88,7 +88,7 @@ addTypeSynonym moduleName name args ty kind = do
8888 , typeSynonyms = M.insert (Qualified (Just moduleName) name) (args, ty) (typeSynonyms env) }
8989
9090valueIsNotDefined
91− :: (Functor m, Applicative m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m)
91+ :: (MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m)
9292 => ModuleName
9393 -> Ident
9494 -> m ()
@@ -99,7 +99,7 @@ valueIsNotDefined moduleName name = do
9999 Nothing -> return ()
100100
101101addValue
102− :: (Functor m, Applicative m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m)
102+ :: (MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m)
103103 => ModuleName
104104 -> Ident
105105 -> Type
@@ -110,7 +110,7 @@ addValue moduleName name ty nameKind = do
110110 putEnv (env { names = M.insert (moduleName, name) (ty, nameKind, Defined) (names env) })
111111
112112addTypeClass
113− :: (Functor m, Applicative m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m)
113+ :: (MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m)
114114 => ModuleName
115115 -> ProperName 'ClassName
116116 -> [(String, Maybe Kind)]
@@ -126,7 +126,7 @@ addTypeClass moduleName pn args implies ds =
126126 toPair _ = internalError "Invalid declaration in TypeClassDeclaration"
127127
128128addTypeClassDictionaries
129− :: (Functor m, Applicative m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m)
129+ :: (MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m)
130130 => Maybe ModuleName
131131 -> M.Map (Qualified (ProperName 'ClassName)) (M.Map (Qualified Ident) TypeClassDictionaryInScope)
132132 -> m ()
@@ -135,7 +135,7 @@ addTypeClassDictionaries mn entries =
135135 where insertState st = M.insertWith (M.unionWith M.union) mn entries (typeClassDictionaries . checkEnv $ st)
136136
137137checkDuplicateTypeArguments
138− :: (Functor m, Applicative m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m)
138+ :: (MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m)
139139 => [String]
140140 -> m ()
141141checkDuplicateTypeArguments args = for_ firstDup $ \dup ->
@@ -145,7 +145,7 @@ checkDuplicateTypeArguments args = for_ firstDup $ \dup ->
145145 firstDup = listToMaybe $ args \\ nub args
146146
147147checkTypeClassInstance
148− :: (Functor m, Applicative m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m)
148+ :: (MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m)
149149 => ModuleName
150150 -> Type
151151 -> m ()
@@ -161,7 +161,7 @@ checkTypeClassInstance _ ty = throwError . errorMessage $ InvalidInstanceHead ty
161161-- Check that type synonyms are fully-applied in a type
162162--
163163checkTypeSynonyms
164− :: (Functor m, Applicative m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m)
164+ :: (MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m)
165165 => Type
166166 -> m ()
167167checkTypeSynonyms = void . replaceAllTypeSynonyms
@@ -181,7 +181,7 @@ checkTypeSynonyms = void . replaceAllTypeSynonyms
181181--
182182typeCheckAll
183183 :: forall m
184− . (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m)
184+ . (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m)
185185 => ModuleName
186186 -> [DeclarationRef]
187187 -> [Declaration]
@@ -343,7 +343,7 @@ typeCheckAll moduleName _ ds = traverse go ds <* traverse_ checkFixities ds
343343--
344344typeCheckModule
345345 :: forall m
346− . (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m)
346+ . (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m)
347347 => Module
348348 -> m Module
349349typeCheckModule (Module _ _ _ _ Nothing) = internalError "exports should have been elaborated"
src/Language/PureScript/TypeChecker/Entailment.hs+1−1
@@ -34,7 +34,7 @@ import qualified Language.PureScript.Constants as C
3434--
3535entails
3636 :: forall m
37− . (Functor m, Applicative m, MonadError MultipleErrors m, MonadWriter MultipleErrors m)
37+ . (MonadError MultipleErrors m, MonadWriter MultipleErrors m)
3838 => ModuleName
3939 -> M.Map (Maybe ModuleName) (M.Map (Qualified (ProperName 'ClassName)) (M.Map (Qualified Ident) TypeClassDictionaryInScope))
4040 -> Constraint
src/Language/PureScript/TypeChecker/Kinds.hs+11−11
@@ -43,7 +43,7 @@ freshKind = do
4343
4444-- | Update the substitution to solve a kind constraint
4545solveKind
46− :: (Functor m, Applicative m, MonadError MultipleErrors m, MonadState CheckState m)
46+ :: (MonadError MultipleErrors m, MonadState CheckState m)
4747 => Int
4848 -> Kind
4949 -> m ()
@@ -68,7 +68,7 @@ substituteKind sub = everywhereOnKinds go
6868
6969-- | Make sure that an unknown does not occur in a kind
7070occursCheck
71− :: (Functor m, Applicative m, MonadError MultipleErrors m)
71+ :: (MonadError MultipleErrors m)
7272 => Int
7373 -> Kind
7474 -> m ()
@@ -80,7 +80,7 @@ occursCheck u k = void $ everywhereOnKindsM go k
8080
8181-- | Unify two kinds
8282unifyKinds
83− :: (Functor m, Applicative m, MonadError MultipleErrors m, MonadState CheckState m)
83+ :: (MonadError MultipleErrors m, MonadState CheckState m)
8484 => Kind
8585 -> Kind
8686 -> m ()
@@ -101,14 +101,14 @@ unifyKinds k1 k2 = do
101101
102102-- | Infer the kind of a single type
103103kindOf
104− :: (Functor m, Applicative m, MonadError MultipleErrors m, MonadState CheckState m, MonadWriter MultipleErrors m)
104+ :: (MonadError MultipleErrors m, MonadState CheckState m, MonadWriter MultipleErrors m)
105105 => Type
106106 -> m Kind
107107kindOf ty = fst <$> kindOfWithScopedVars ty
108108
109109-- | Infer the kind of a single type, returning the kinds of any scoped type variables
110110kindOfWithScopedVars ::
111− (Functor m, Applicative m, MonadError MultipleErrors m, MonadState CheckState m, MonadWriter MultipleErrors m) =>
111+ (MonadError MultipleErrors m, MonadState CheckState m, MonadWriter MultipleErrors m) =>
112112 Type ->
113113 m (Kind, [(String, Kind)])
114114kindOfWithScopedVars ty =
@@ -121,7 +121,7 @@ kindOfWithScopedVars ty =
121121
122122-- | Infer the kind of a type constructor with a collection of arguments and a collection of associated data constructors
123123kindsOf
124− :: (Functor m, Applicative m, MonadError MultipleErrors m, MonadState CheckState m, MonadWriter MultipleErrors m)
124+ :: (MonadError MultipleErrors m, MonadState CheckState m, MonadWriter MultipleErrors m)
125125 => Bool
126126 -> ModuleName
127127 -> ProperName 'TypeName
@@ -139,7 +139,7 @@ kindsOf isData moduleName name args ts = fmap tidyUp . liftUnify $ do
139139 tidyUp (k, sub) = starIfUnknown $ substituteKind sub k
140140
141141freshKindVar
142− :: (Functor m, Applicative m, MonadError MultipleErrors m, MonadState CheckState m)
142+ :: (MonadError MultipleErrors m, MonadState CheckState m)
143143 => (String, Maybe Kind)
144144 -> Kind
145145 -> m (ProperName 'TypeName, Kind)
@@ -150,7 +150,7 @@ freshKindVar (arg, Just kind') kind = do
150150
151151-- | Simultaneously infer the kinds of several mutually recursive type constructors
152152kindsOfAll
153− :: (Functor m, Applicative m, MonadError MultipleErrors m, MonadState CheckState m, MonadWriter MultipleErrors m)
153+ :: (MonadError MultipleErrors m, MonadState CheckState m, MonadWriter MultipleErrors m)
154154 => ModuleName
155155 -> [(ProperName 'TypeName, [(String, Maybe Kind)], Type)]
156156 -> [(ProperName 'TypeName, [(String, Maybe Kind)], [Type])]
@@ -178,7 +178,7 @@ kindsOfAll moduleName syns tys = fmap tidyUp . liftUnify $ do
178178
179179-- | Solve the set of kind constraints associated with the data constructors for a type constructor
180180solveTypes
181− :: (Functor m, Applicative m, MonadError MultipleErrors m, MonadState CheckState m)
181+ :: (MonadError MultipleErrors m, MonadState CheckState m)
182182 => Bool
183183 -> [Type]
184184 -> [Kind]
@@ -202,14 +202,14 @@ starIfUnknown k = k
202202
203203-- | Infer a kind for a type
204204infer
205− :: (Functor m, Applicative m, MonadError MultipleErrors m, MonadState CheckState m)
205+ :: (MonadError MultipleErrors m, MonadState CheckState m)
206206 => Type
207207 -> m (Kind, [(String, Kind)])
208208infer ty = rethrow (addHint (ErrorCheckingKind ty)) $ infer' ty
209209
210210infer'
211211 :: forall m
212− . (Functor m, Applicative m, MonadError MultipleErrors m, MonadState CheckState m)
212+ . (MonadError MultipleErrors m, MonadState CheckState m)
213213 => Type
214214 -> m (Kind, [(String, Kind)])
215215infer' (ForAll ident ty _) = do
src/Language/PureScript/TypeChecker/Monad.hs+15−15
@@ -84,7 +84,7 @@ bindTypes newNames action = do
8484
8585-- | Temporarily bind a collection of names to types
8686withScopedTypeVars
87− :: (Functor m, Applicative m, MonadState CheckState m, MonadWriter MultipleErrors m)
87+ :: (MonadState CheckState m, MonadWriter MultipleErrors m)
8888 => ModuleName
8989 -> [(String, Kind)]
9090 -> m a
@@ -112,20 +112,20 @@ withTypeClassDictionaries entries action = do
112112
113113-- | Get the currently available map of type class dictionaries
114114getTypeClassDictionaries
115− :: (Functor m, MonadState CheckState m)
115+ :: (MonadState CheckState m)
116116 => m (M.Map (Maybe ModuleName) (M.Map (Qualified (ProperName 'ClassName)) (M.Map (Qualified Ident) TypeClassDictionaryInScope)))
117117getTypeClassDictionaries = typeClassDictionaries . checkEnv <$> get
118118
119119-- | Lookup type class dictionaries in a module.
120120lookupTypeClassDictionaries
121− :: (Functor m, MonadState CheckState m)
121+ :: (MonadState CheckState m)
122122 => Maybe ModuleName
123123 -> m (M.Map (Qualified (ProperName 'ClassName)) (M.Map (Qualified Ident) TypeClassDictionaryInScope))
124124lookupTypeClassDictionaries mn = fromMaybe M.empty . M.lookup mn . typeClassDictionaries . checkEnv <$> get
125125
126126-- | Temporarily bind a collection of names to local variables
127127bindLocalVariables
128− :: (Functor m, MonadState CheckState m)
128+ :: (MonadState CheckState m)
129129 => ModuleName
130130 -> [(Ident, Type, NameVisibility)]
131131 -> m a
@@ -135,7 +135,7 @@ bindLocalVariables moduleName bindings =
135135
136136-- | Temporarily bind a collection of names to local type variables
137137bindLocalTypeVariables
138− :: (Functor m, MonadState CheckState m)
138+ :: (MonadState CheckState m)
139139 => ModuleName
140140 -> [(ProperName 'TypeName, Kind)]
141141 -> m a
@@ -144,15 +144,15 @@ bindLocalTypeVariables moduleName bindings =
144144 bindTypes (M.fromList $ flip map bindings $ \(pn, kind) -> (Qualified (Just moduleName) pn, (kind, LocalTypeVariable)))
145145
146146-- | Update the visibility of all names to Defined
147−makeBindingGroupVisible :: (Functor m, MonadState CheckState m) => m ()
147+makeBindingGroupVisible :: (MonadState CheckState m) => m ()
148148makeBindingGroupVisible = modifyEnv $ \e -> e { names = M.map (\(ty, nk, _) -> (ty, nk, Defined)) (names e) }
149149
150150-- | Update the visibility of all names to Defined in the scope of the provided action
151−withBindingGroupVisible :: (Functor m, MonadState CheckState m) => m a -> m a
151+withBindingGroupVisible :: (MonadState CheckState m) => m a -> m a
152152withBindingGroupVisible action = preservingNames $ makeBindingGroupVisible >> action
153153
154154-- | Perform an action while preserving the names from the @Environment@.
155−preservingNames :: (Functor m, MonadState CheckState m) => m a -> m a
155+preservingNames :: (MonadState CheckState m) => m a -> m a
156156preservingNames action = do
157157 orig <- gets (names . checkEnv)
158158 a <- action
@@ -161,7 +161,7 @@ preservingNames action = do
161161
162162-- | Lookup the type of a value by name in the @Environment@
163163lookupVariable
164− :: (e ~ MultipleErrors, Functor m, MonadState CheckState m, MonadError e m)
164+ :: (e ~ MultipleErrors, MonadState CheckState m, MonadError e m)
165165 => ModuleName
166166 -> Qualified Ident
167167 -> m Type
@@ -173,7 +173,7 @@ lookupVariable currentModule (Qualified moduleName var) = do
173173
174174-- | Lookup the visibility of a value by name in the @Environment@
175175getVisibility
176− :: (e ~ MultipleErrors, Functor m, MonadState CheckState m, MonadError e m)
176+ :: (e ~ MultipleErrors, MonadState CheckState m, MonadError e m)
177177 => ModuleName
178178 -> Qualified Ident
179179 -> m NameVisibility
@@ -185,7 +185,7 @@ getVisibility currentModule (Qualified moduleName var) = do
185185
186186-- | Assert that a name is visible
187187checkVisibility
188− :: (e ~ MultipleErrors, Functor m, MonadState CheckState m, MonadError e m)
188+ :: (e ~ MultipleErrors, MonadState CheckState m, MonadError e m)
189189 => ModuleName
190190 -> Qualified Ident
191191 -> m ()
@@ -197,7 +197,7 @@ checkVisibility currentModule name@(Qualified _ var) = do
197197
198198-- | Lookup the kind of a type by name in the @Environment@
199199lookupTypeVariable
200− :: (e ~ MultipleErrors, Functor m, MonadState CheckState m, MonadError e m)
200+ :: (e ~ MultipleErrors, MonadState CheckState m, MonadError e m)
201201 => ModuleName
202202 -> Qualified (ProperName 'TypeName)
203203 -> m Kind
@@ -208,7 +208,7 @@ lookupTypeVariable currentModule (Qualified moduleName name) = do
208208 Just (k, _) -> return k
209209
210210-- | Get the current @Environment@
211−getEnv :: (Functor m, MonadState CheckState m) => m Environment
211+getEnv :: (MonadState CheckState m) => m Environment
212212getEnv = checkEnv <$> get
213213
214214-- | Update the @Environment@
@@ -234,14 +234,14 @@ guardWith e False = throwError e
234234
235235-- | Run a computation in the substitution monad, generating a return value and the final substitution.
236236liftUnify ::
237− (Functor m, MonadState CheckState m, MonadWriter MultipleErrors m, MonadError MultipleErrors m) =>
237+ (MonadState CheckState m, MonadWriter MultipleErrors m, MonadError MultipleErrors m) =>
238238 m a ->
239239 m (a, Substitution)
240240liftUnify = liftUnifyWarnings (const id)
241241
242242-- | Run a computation in the substitution monad, generating a return value, the final substitution and updating warnings values.
243243liftUnifyWarnings ::
244− (Functor m, MonadState CheckState m, MonadWriter MultipleErrors m, MonadError MultipleErrors m) =>
244+ (MonadState CheckState m, MonadWriter MultipleErrors m, MonadError MultipleErrors m) =>
245245 (Substitution -> ErrorMessage -> ErrorMessage) ->
246246 m a ->
247247 m (a, Substitution)
src/Language/PureScript/TypeChecker/Rows.hs+1−1
@@ -36,7 +36,7 @@ import Language.PureScript.TypeChecker.Monad
3636import Language.PureScript.Types
3737
3838-- | Ensure rows do not contain duplicate labels
39−checkDuplicateLabels :: forall m. (Functor m, Applicative m, MonadError MultipleErrors m, MonadState CheckState m) => Expr -> m ()
39+checkDuplicateLabels :: forall m. (MonadError MultipleErrors m, MonadState CheckState m) => Expr -> m ()
4040checkDuplicateLabels =
4141 let (_, f, _) = everywhereOnValuesM def go def
4242 in void . f
src/Language/PureScript/TypeChecker/Skolems.hs+1−1
@@ -53,7 +53,7 @@ newSkolemConstant = do
5353-- |
5454-- Introduce skolem scope at every occurence of a ForAll
5555--
56−introduceSkolemScope :: (Functor m, Applicative m, MonadState CheckState m) => Type -> m Type
56+introduceSkolemScope :: (MonadState CheckState m) => Type -> m Type
5757introduceSkolemScope = everywhereOnTypesM go
5858 where
5959 go (ForAll ident ty Nothing) = ForAll ident ty <$> (Just <$> newSkolemScope)
src/Language/PureScript/TypeChecker/Subsumption.hs+2−2
@@ -39,11 +39,11 @@ import Language.PureScript.TypeChecker.Unify
3939import Language.PureScript.Types
4040
4141-- | Check that one type subsumes another, rethrowing errors to provide a better error message
42−subsumes :: (Functor m, Applicative m, MonadError MultipleErrors m, MonadState CheckState m) => Maybe Expr -> Type -> Type -> m (Maybe Expr)
42+subsumes :: (MonadError MultipleErrors m, MonadState CheckState m) => Maybe Expr -> Type -> Type -> m (Maybe Expr)
4343subsumes val ty1 ty2 = rethrow (addHint (ErrorInSubsumption ty1 ty2)) $ subsumes' val ty1 ty2
4444
4545-- | Check tahat one type subsumes another
46−subsumes' :: (Functor m, Applicative m, MonadError MultipleErrors m, MonadState CheckState m) =>
46+subsumes' :: (MonadError MultipleErrors m, MonadState CheckState m) =>
4747 Maybe Expr ->
4848 Type ->
4949 Type ->
src/Language/PureScript/TypeChecker/Synonyms.hs+1−1
@@ -57,7 +57,7 @@ replaceAllTypeSynonyms' env = everywhereOnTypesTopDownM try
5757 go c args (TypeApp f arg) = go (c + 1) (arg : args) f
5858 go _ _ _ = return Nothing
5959
60−replaceAllTypeSynonyms :: (e ~ MultipleErrors, Functor m, Monad m, MonadState CheckState m, MonadError e m) => Type -> m Type
60+replaceAllTypeSynonyms :: (e ~ MultipleErrors, MonadState CheckState m, MonadError e m) => Type -> m Type
6161replaceAllTypeSynonyms d = do
6262 env <- getEnv
6363 either throwError return $ replaceAllTypeSynonyms' env d
src/Language/PureScript/TypeChecker/Types.hs+19−19
@@ -61,7 +61,7 @@ import Language.PureScript.Types
6161-- | Infer the types of multiple mutually-recursive values, and return elaborated values including
6262-- type class dictionaries and type annotations.
6363typesOf ::
64− (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
64+ (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
6565 ModuleName ->
6666 [(Ident, Expr)] ->
6767 m [(Ident, (Expr, Type))]
@@ -93,7 +93,7 @@ type TypeData = M.Map (ModuleName, Ident) (Type, NameKind, NameVisibility)
9393type UntypedData = [(Ident, Type)]
9494
9595typeDictionaryForBindingGroup ::
96− (Functor m, Applicative m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
96+ (MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
9797 ModuleName ->
9898 [(Ident, Expr)] ->
9999 m ([(Ident, Expr)], [(Ident, (Expr, Type, Bool))], TypeData, UntypedData)
@@ -118,7 +118,7 @@ typeDictionaryForBindingGroup moduleName vals = do
118118 return (untyped, typed, dict, untypedDict)
119119
120120checkTypedBindingGroupElement ::
121− (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
121+ (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
122122 ModuleName ->
123123 (Ident, (Expr, Type, Bool)) ->
124124 TypeData ->
@@ -137,7 +137,7 @@ checkTypedBindingGroupElement mn (ident, (val', ty, checkType)) dict = do
137137 return (ident, (val'', ty''))
138138
139139typeForBindingGroupElement ::
140− (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
140+ (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
141141 Bool ->
142142 (Ident, Expr) ->
143143 TypeData ->
@@ -168,7 +168,7 @@ overTypes f = let (_, f', _) = everywhereOnValues id g id in f'
168168
169169-- | Replace type class dictionary placeholders with inferred type class dictionaries
170170replaceTypeClassDictionaries ::
171− (Functor m, Applicative m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
171+ (MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
172172 ModuleName ->
173173 Expr ->
174174 m Expr
@@ -181,7 +181,7 @@ replaceTypeClassDictionaries mn =
181181
182182-- | Check the kind of a type, failing if it is not of kind *.
183183checkTypeKind ::
184− (Functor m, Applicative m, MonadState CheckState m, MonadError MultipleErrors m) =>
184+ (MonadState CheckState m, MonadError MultipleErrors m) =>
185185 Type ->
186186 Kind ->
187187 m ()
@@ -193,7 +193,7 @@ checkTypeKind ty kind = guardWith (errorMessage (ExpectedType ty kind)) $ kind =
193193-- This is necessary during type checking to avoid unifying a polymorphic type with a
194194-- unification variable.
195195instantiatePolyTypeWithUnknowns ::
196− (Functor m, Applicative m, MonadState CheckState m, MonadError MultipleErrors m) =>
196+ (MonadState CheckState m, MonadError MultipleErrors m) =>
197197 Expr ->
198198 Type ->
199199 m (Expr, Type)
@@ -207,14 +207,14 @@ instantiatePolyTypeWithUnknowns val ty = return (val, ty)
207207
208208-- | Infer a type for a value, rethrowing any error to provide a more useful error message
209209infer ::
210− (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
210+ (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
211211 Expr ->
212212 m Expr
213213infer val = rethrow (addHint (ErrorInferringType val)) $ infer' val
214214
215215-- | Infer a type for a value
216216infer' ::
217− (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
217+ (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
218218 Expr ->
219219 m Expr
220220infer' v@(Literal (NumericLiteral (Left _))) = return $ TypedValue True v tyInt
@@ -303,7 +303,7 @@ infer' (PositionedValue pos c val) = warnAndRethrowWithPosition pos $ do
303303infer' _ = internalError "Invalid argument to infer"
304304
305305inferLetBinding ::
306− (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
306+ (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
307307 [Declaration] ->
308308 [Declaration] ->
309309 Expr ->
@@ -341,7 +341,7 @@ inferLetBinding _ _ _ _ = internalError "Invalid argument to inferLetBinding"
341341
342342-- | Infer the types of variables brought into scope by a binder
343343inferBinder :: forall m.
344− (Functor m, Applicative m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
344+ (MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
345345 Type ->
346346 Binder ->
347347 m (M.Map Ident Type)
@@ -420,7 +420,7 @@ binderRequiresMonotype _ = True
420420
421421-- | Instantiate polytypes only when necessitated by a binder.
422422instantiateForBinders ::
423− (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
423+ (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
424424 [Expr] ->
425425 [CaseAlternative] ->
426426 m ([Expr], [Type])
@@ -437,7 +437,7 @@ instantiateForBinders vals cas = unzip <$> zipWithM (\val inst -> do
437437-- Check the types of the return values in a set of binders in a case statement
438438--
439439checkBinders ::
440− (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
440+ (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
441441 [Type] ->
442442 Type ->
443443 [CaseAlternative] ->
@@ -467,7 +467,7 @@ checkBinders nvals ret (CaseAlternative binders result : bs) = do
467467-- Check the type of a value, rethrowing errors to provide a better error message
468468--
469469check ::
470− (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
470+ (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
471471 Expr ->
472472 Type ->
473473 m Expr
@@ -478,7 +478,7 @@ check val ty = rethrow (addHint (ErrorCheckingType val ty)) $ check' val ty
478478--
479479check'
480480 :: forall m
481− . (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m)
481+ . (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m)
482482 => Expr
483483 -> Type
484484 -> m Expr
@@ -641,7 +641,7 @@ check' val ty = do
641641-- The @lax@ parameter controls whether or not every record member has to be provided. For object updates, this is not the case.
642642--
643643checkProperties ::
644− (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
644+ (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
645645 Expr ->
646646 [(String, Expr)] ->
647647 Type ->
@@ -673,7 +673,7 @@ checkProperties expr ps row lax = let (ts, r') = rowToList row in go ps ts r' wh
673673
674674-- | Check the type of a function application, rethrowing errors to provide a better error message
675675checkFunctionApplication ::
676− (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
676+ (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
677677 Expr ->
678678 Type ->
679679 Expr ->
@@ -685,7 +685,7 @@ checkFunctionApplication fn fnTy arg ret = rethrow (addHint (ErrorInApplication
685685
686686-- | Check the type of a function application
687687checkFunctionApplication' ::
688− (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
688+ (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
689689 Expr ->
690690 Type ->
691691 Expr ->
@@ -723,7 +723,7 @@ checkFunctionApplication' _ fnTy arg _ = throwError . errorMessage $ CannotApply
723723-- | Compute the meet of two types, i.e. the most general type which both types subsume.
724724-- TODO: is this really needed?
725725meet ::
726− (Functor m, Applicative m, MonadState CheckState m, MonadError MultipleErrors m) =>
726+ (MonadState CheckState m, MonadError MultipleErrors m) =>
727727 Expr ->
728728 Expr ->
729729 Type ->
src/Language/PureScript/TypeChecker/Unify.hs+5−5
@@ -56,7 +56,7 @@ freshType = do
5656 return $ TUnknown t
5757
5858-- | Update the substitution to solve a type constraint
59−solveType :: (Functor m, Applicative m, MonadError MultipleErrors m, MonadState CheckState m) => Int -> Type -> m ()
59+solveType :: (MonadError MultipleErrors m, MonadState CheckState m) => Int -> Type -> m ()
6060solveType u t = do
6161 occursCheck u t
6262 modify $ \cs -> cs { checkSubstitution =
@@ -77,7 +77,7 @@ substituteType sub = everywhereOnTypes go
7777 go other = other
7878
7979-- | Make sure that an unknown does not occur in a type
80−occursCheck :: (Functor m, Applicative m, MonadError MultipleErrors m) => Int -> Type -> m ()
80+occursCheck :: (MonadError MultipleErrors m) => Int -> Type -> m ()
8181occursCheck _ TUnknown{} = return ()
8282occursCheck u t = void $ everywhereOnTypesM go t
8383 where
@@ -93,7 +93,7 @@ unknownsInType t = everythingOnTypes (.) go t []
9393 go _ = id
9494
9595-- | Unify two types, updating the current substitution
96−unifyTypes :: (Functor m, Applicative m, MonadError MultipleErrors m, MonadState CheckState m) => Type -> Type -> m ()
96+unifyTypes :: (MonadError MultipleErrors m, MonadState CheckState m) => Type -> Type -> m ()
9797unifyTypes t1 t2 = do
9898 sub <- gets checkSubstitution
9999 rethrow (addHint (ErrorUnifyingTypes t1 t2)) $ unifyTypes' (substituteType sub t1) (substituteType sub t2)
@@ -139,7 +139,7 @@ unifyTypes t1 t2 = do
139139-- trailing row unification variable, if appropriate, otherwise leftover labels result in a unification
140140-- error.
141141--
142−unifyRows :: forall m. (Functor m, Applicative m, MonadError MultipleErrors m, MonadState CheckState m) => Type -> Type -> m ()
142+unifyRows :: forall m. (MonadError MultipleErrors m, MonadState CheckState m) => Type -> Type -> m ()
143143unifyRows r1 r2 =
144144 let
145145 (s1, r1') = rowToList r1
@@ -205,7 +205,7 @@ replaceVarWithUnknown ident ty = do
205205-- |
206206-- Replace type wildcards with unknowns
207207--
208−replaceTypeWildcards :: (Functor m, Applicative m, MonadWriter MultipleErrors m, MonadState CheckState m) => Type -> m Type
208+replaceTypeWildcards :: (MonadWriter MultipleErrors m, MonadState CheckState m) => Type -> m Type
209209replaceTypeWildcards = everywhereOnTypesM replace
210210 where
211211 replace TypeWildcard = do
src/Language/PureScript/Types.hs+2−2
@@ -248,7 +248,7 @@ everywhereOnTypesTopDown f = go . f
248248 go (PrettyPrintForAll args t) = PrettyPrintForAll args (go (f t))
249249 go other = f other
250250
251−everywhereOnTypesM :: (Functor m, Applicative m, Monad m) => (Type -> m Type) -> Type -> m Type
251+everywhereOnTypesM :: Monad m => (Type -> m Type) -> Type -> m Type
252252everywhereOnTypesM f = go
253253 where
254254 go (TypeApp t1 t2) = (TypeApp <$> go t1 <*> go t2) >>= f
@@ -261,7 +261,7 @@ everywhereOnTypesM f = go
261261 go (PrettyPrintForAll args t) = (PrettyPrintForAll args <$> go t) >>= f
262262 go other = f other
263263
264−everywhereOnTypesTopDownM :: (Functor m, Applicative m, Monad m) => (Type -> m Type) -> Type -> m Type
264+everywhereOnTypesTopDownM :: Monad m => (Type -> m Type) -> Type -> m Type
265265everywhereOnTypesTopDownM f = go <=< f
266266 where
267267 go (TypeApp t1 t2) = TypeApp <$> (f t1 >>= go) <*> (f t2 >>= go)