git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Merge master
commit5674d64724a856041266266b08a87332b80d77b1 authorPhil Freeman <paf31@cantab.net> dateSat 12 Mar 2016, 15:50 (11 years ago) parent1a453363293a7b
61 files changed+358−415
.travis.yml+1−14 INSTALL.md+4−8 psc-bundle/Main.hs+2−2 psc-ide-server/Main.hs+1−1 psc/Main.hs+1−1 purescript.cabal+10−11 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−10 src/Language/PureScript/Ide/Completion.hs+4−4 src/Language/PureScript/Ide/Error.hs+11−12 src/Language/PureScript/Ide/Externs.hs+1−1 src/Language/PureScript/Ide/Matcher.hs+6−6 src/Language/PureScript/Ide/Pursuit.hs+11−11 src/Language/PureScript/Ide/Reexports.hs+21−19 src/Language/PureScript/Ide/SourceFile.hs+40−40 src/Language/PureScript/Ide/State.hs+10−10 src/Language/PureScript/Ide/Types.hs+76−78 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+2−2 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 stack-lts-2.yaml−13 stack-lts-3.yaml−6
.travis.yml+1−14
@@ -2,26 +2,13 @@ language: c
22sudo: false
33matrix:
44 include:
5− - env: GHCVER=7.8.4 CABALVER=1.22 COVERAGE=true
6− compiler: ": #GHC 7.8.4 - tests"
7− # ^ HACK before https://github.com/travis-ci/travis-ci/issues/4393 is resolved
8− addons: {apt: {packages: [cabal-install-1.22,ghc-7.8.4,happy-1.19.5,alex-3.1.4], sources: [hvr-ghc]}}
9− - env: GHCVER=7.6.3 CABALVER=1.22
10− compiler: ": #GHC 7.6.3"
11− addons: {apt: {packages: [cabal-install-1.22,ghc-7.6.3,happy-1.19.5,alex-3.1.4], sources: [hvr-ghc]}}
12− - env: GHCVER=7.10.1 CABALVER=1.22 DEPLOY=yes
13− compiler: ": #GHC 7.10.1"
14− addons: {apt: {packages: [cabal-install-1.22,ghc-7.10.1,happy-1.19.5,alex-3.1.4], sources: [hvr-ghc]}}
15− - env: GHCVER=7.10.2 CABALVER=1.22 STACKAGE=lts-3.22 RUNSDISTTESTS=YES
16− compiler: ": #GHC 7.10.2 lts-3.22"
17− addons: {apt: {packages: [cabal-install-1.22,ghc-7.10.2,happy-1.19.5,alex-3.1.4], sources: [hvr-ghc]}}
185 - env: GHCVER=7.10.3 CABALVER=1.22 STACKAGE=lts-5.4 RUNSDISTTESTS=YES
196 compiler: ": #GHC 7.10.3 lts-5.4"
207 addons: {apt: {packages: [cabal-install-1.22,ghc-7.10.3,happy-1.19.5,alex-3.1.4], sources: [hvr-ghc]}}
218 - env: GHCVER=7.10.3 CABALVER=1.22 STACKAGE=nightly-2016-02-25
229 compiler: ": #GHC 7.10.3 nightly-2016-02-25"
2310 addons: {apt: {packages: [cabal-install-1.22,ghc-7.10.3,happy-1.19.5,alex-3.1.4], sources: [hvr-ghc]}}
24− - env: GHCVER=7.10.3 CABALVER=1.22
11+ - env: GHCVER=7.10.3 CABALVER=1.22 DEPLOY=yes
2512 compiler: ": #GHC 7.10.3"
2613 addons: {apt: {packages: [cabal-install-1.22,ghc-7.10.3,happy-1.19.5,alex-3.1.4], sources: [hvr-ghc]}}
2714before_install:
INSTALL.md+4−8
@@ -6,8 +6,8 @@ alternatively Stack Overflow.
66
77## Using prebuilt binaries
88
9−The prebuilt binaries are compiled with GHC 7.8.4, and therefore they should
10−run on any operating system supported by GHC 7.8.4, such as:
9+The prebuilt binaries are compiled with GHC 7.10.3, and therefore they should
10+run on any operating system supported by GHC 7.10.3, such as:
1111
1212* Windows 2000 or later,
1313* OS X 10.7 or later,
@@ -23,11 +23,11 @@ requirements.
2323
2424## Compiling from source
2525
26−GHC 7.6.1 or newer is required to compile from source. The easiest way is to
26+GHC 7.10.1 or newer is required to compile from source. The easiest way is to
2727use stack:
2828
2929```
30−$ stack install --resolver lts purescript
30+$ stack install --resolver=nightly purescript
3131```
3232
3333This will then copy the compiler and utilities into `~/.local/bin`.
@@ -39,10 +39,6 @@ If you don't have stack installed yet there are install instructions
3939If you don't have ghc installed yet, stack will prompt you to run `stack setup`
4040which will install ghc for you.
4141
42−The PureScript compiler has been known to run on OS X 10.6 when built with GHC
43−7.6.
44−
45−
4642## The "curses" library
4743
4844`psci` depends on the `curses` library (via the Haskell package `terminfo`). If
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)
purescript.cabal+10−11
@@ -17,7 +17,7 @@ author: Phil Freeman <paf31@cantab.net>,
1717 Harry Garrood <harry@garrood.me>,
1818 Christoph Hegemann <christoph.hegemann1337@gmail.com>
1919
20−tested-with: GHC==7.8.4, GHC==7.10.3, GHC==8.0.1
20+tested-with: GHC==7.10.3
2121
2222extra-source-files: examples/passing/*.purs
2323 , examples/failing/*.purs
@@ -36,8 +36,7 @@ extra-source-files: examples/passing/*.purs
3636 , tests/support/flattened/*.js
3737 , tests/support/psci/*.purs
3838 , stack.yaml
39− , stack-lts-2.yaml
40− , stack-lts-3.yaml
39+ , stack-lts-5.yaml
4140 , stack-nightly.yaml
4241 , README.md
4342 , INSTALL.md
@@ -49,7 +48,7 @@ source-repository head
4948 location: https://github.com/purescript/purescript.git
5049
5150library
52− build-depends: base >=4.6 && <5,
51+ build-depends: base >=4.8 && <5,
5352 base-compat >=0.6.0,
5453 lifted-base >= 0.2.3 && < 0.2.4,
5554 monad-control >= 1.0.0.0 && < 1.1,
@@ -229,7 +228,7 @@ library
229228executable psc
230229 build-depends: base >=4 && <5, base-compat >=0.6.0,
231230 containers -any, directory -any, filepath -any,
232− mtl -any, optparse-applicative >= 0.10.0, parsec -any, purescript -any,
231+ mtl -any, optparse-applicative >= 0.12.1, parsec -any, purescript -any,
233232 time -any, transformers -any, transformers-compat -any, Glob >= 0.7 && < 0.8,
234233 aeson >= 0.8 && < 0.12, bytestring -any, utf8-string >= 1 && < 2
235234 main-is: Main.hs
@@ -240,7 +239,7 @@ executable psc
240239
241240executable psci
242241 build-depends: base >=4 && <5, containers -any, directory -any, filepath -any,
243− mtl -any, optparse-applicative >= 0.10.0, parsec -any,
242+ mtl -any, optparse-applicative >= 0.12.1, parsec -any,
244243 haskeline >= 0.7.0.0, purescript -any, transformers -any,
245244 transformers-compat -any, process -any, time -any, Glob -any, base-compat >=0.6.0,
246245 boxes >= 0.1.4 && < 0.2.0
@@ -263,7 +262,7 @@ executable psci
263262
264263executable psc-docs
265264 build-depends: base >=4 && <5, purescript -any,
266− optparse-applicative >= 0.10.0, process -any, mtl -any,
265+ optparse-applicative >= 0.12.1, process -any, mtl -any,
267266 split -any, ansi-wl-pprint -any, directory -any,
268267 filepath -any, Glob -any, transformers -any,
269268 transformers-compat -any
@@ -285,7 +284,7 @@ executable psc-publish
285284 ghc-options: -Wall -O2
286285
287286executable psc-hierarchy
288− build-depends: base >=4 && <5, purescript -any, optparse-applicative >= 0.10.0,
287+ build-depends: base >=4 && <5, purescript -any, optparse-applicative >= 0.12.1,
289288 process -any, mtl -any, parsec -any, filepath -any, directory -any,
290289 Glob -any
291290 main-is: Main.hs
@@ -306,7 +305,7 @@ executable psc-bundle
306305 mtl -any,
307306 transformers -any,
308307 transformers-compat -any,
309− optparse-applicative >= 0.10.0,
308+ optparse-applicative >= 0.12.1,
310309 Glob -any
311310 ghc-options: -Wall -O2
312311 hs-source-dirs: psc-bundle
@@ -324,7 +323,7 @@ executable psc-ide-server
324323 , transformers -any
325324 , transformers-compat -any
326325 , network -any
327− , optparse-applicative >= 0.10.0
326+ , optparse-applicative >= 0.12.1
328327 , stm -any
329328 , text -any
330329 , base-compat >=0.6.0
@@ -338,7 +337,7 @@ executable psc-ide-client
338337 build-depends: base >=4 && <5
339338 , mtl -any
340339 , text -any
341− , optparse-applicative >= 0.10.0
340+ , optparse-applicative >= 0.12.1
342341 , network -any
343342 , base-compat >=0.6.0
344343 ghc-options: -Wall -O2
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−10
@@ -60,15 +60,6 @@ caseSplit q = do
6060 let appliedCtors = map (\(n, ts) -> (n, map applyTypeVars ts)) ctors
6161 pure appliedCtors
6262
63−{- ["EDType {
64− edTypeName = ProperName {runProperName = \"Either\"}
65− , edTypeKind = FunKind Star (FunKind Star Star)
66− , edTypeDeclarationKind =
67− DataType [(\"a\",Just Star),(\"b\",Just Star)]
68− [(ProperName {runProperName = \"Left\"},[TypeVar \"a\"])
69− ,(ProperName {runProperName = \"Right\"},[TypeVar \"b\"])]}"]
70−-}
71−
7263findTypeDeclaration :: (PscIde m, MonadLogger m, MonadError PscIdeError m) =>
7364 ProperName 'TypeName -> m ExternsDeclaration
7465findTypeDeclaration q = do
@@ -87,7 +78,7 @@ findTypeDeclaration' t ExternsFile{..} =
8778 EDType tn _ _ -> tn == t
8879 _ -> False) efDeclarations
8980
90−splitTypeConstructor :: (Applicative m, MonadError PscIdeError m) =>
81+splitTypeConstructor :: (MonadError PscIdeError m) =>
9182 Type -> m (ProperName 'TypeName, [Type])
9283splitTypeConstructor = go []
9384 where
src/Language/PureScript/Ide/Completion.hs+4−4
@@ -24,12 +24,12 @@ getExactMatches search filters modules =
2424
2525completionsFromModules :: [Module] -> [Completion]
2626completionsFromModules = foldMap completionFromModule
27− where
28− completionFromModule :: Module -> [Completion]
29− completionFromModule (moduleIdent, decls) = mapMaybe (completionFromDecl moduleIdent) decls
27+ where
28+ completionFromModule :: Module -> [Completion]
29+ completionFromModule (moduleIdent, decls) = mapMaybe (completionFromDecl moduleIdent) decls
3030
3131completionFromDecl :: ModuleIdent -> ExternDecl -> Maybe Completion
3232completionFromDecl mi (FunctionDecl name type') = Just (Completion (mi, name, type'))
3333completionFromDecl mi (DataDecl name kind) = Just (Completion (mi, name, kind))
34−completionFromDecl _ (ModuleDecl name _) = Just (Completion ("module", name, "module"))
34+completionFromDecl _ (ModuleDecl name _) = Just (Completion ("module", name, "module"))
3535completionFromDecl _ _ = Nothing
src/Language/PureScript/Ide/Error.hs+11−12
@@ -21,21 +21,20 @@ data PscIdeError
2121
2222instance ToJSON PscIdeError where
2323 toJSON err = object
24− [
25− "resultType" .= ("error" :: Text),
26− "result" .= textError err
27− ]
24+ [ "resultType" .= ("error" :: Text)
25+ , "result" .= textError err
26+ ]
2827
2928textError :: PscIdeError -> Text
30−textError (GeneralError msg) = pack msg
31−textError (NotFound ident) = "Symbol '" <> ident <> "' not found."
32−textError (ModuleNotFound ident) = "Module '" <> ident <> "' not found."
33−textError (ModuleFileNotFound ident) = "Extern file for module " <> ident <>" could not be found"
34−textError (ParseError parseError msg) = pack $ msg <> ": " <> show (escape parseError)
35− where
29+textError (GeneralError msg) = pack msg
30+textError (NotFound ident) = "Symbol '" <> ident <> "' not found."
31+textError (ModuleNotFound ident) = "Module '" <> ident <> "' not found."
32+textError (ModuleFileNotFound ident) = "Extern file for module " <> ident <>" could not be found"
33+textError (ParseError parseError msg) = pack $ msg <> ": " <> show (escape parseError)
34+ where
3635 -- escape newlines and other special chars so we can send the error over the socket as a single line
37− escape :: P.ParseError -> String
38− escape = show
36+ escape :: P.ParseError -> String
37+ escape = show
3938
4039-- | Specialized version of `first` from `Data.Bifunctors`
4140first :: (a -> b) -> Either a r -> Either b r
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/Matcher.hs+6−6
@@ -76,8 +76,8 @@ flexMatch pattern = mapMaybe (flexRate pattern)
7676
7777flexRate :: Text -> Completion -> Maybe ScoredCompletion
7878flexRate pattern c@(Completion (_,ident,_)) = do
79− score <- flexScore pattern ident
80− return (c, score)
79+ score <- flexScore pattern ident
80+ return (c, score)
8181
8282-- FlexMatching ala Sublime.
8383-- Borrowed from: http://cdewaka.com/2013/06/fuzzy-pattern-matching-in-haskell/
@@ -88,13 +88,13 @@ flexRate pattern c@(Completion (_,ident,_)) = do
8888flexScore :: Text -> DeclIdent -> Maybe Double
8989flexScore "" _ = Nothing
9090flexScore pat str =
91− case TE.encodeUtf8 str =~ TE.encodeUtf8 pat' :: (Int, Int) of
92− (-1,0) -> Nothing
93− (start,len) -> Just $ calcScore start (start + len)
91+ case TE.encodeUtf8 str =~ TE.encodeUtf8 pat' :: (Int, Int) of
92+ (-1,0) -> Nothing
93+ (start,len) -> Just $ calcScore start (start + len)
9494 where
9595 Just (first,pattern) = T.uncons pat
9696 -- This just interleaves the search string with .*
9797 -- abcd -> a.*b.*c.*d
9898 pat' = first `T.cons` T.concatMap (T.snoc ".*") pattern
9999 calcScore start end =
100− 100.0 / fromIntegral ((1 + start) * (end - start + 1))
100+ 100.0 / fromIntegral ((1 + start) * (end - start + 1))
src/Language/PureScript/Ide/Pursuit.hs+11−11
@@ -10,9 +10,9 @@ import qualified Control.Exception as E
1010import Data.Aeson
1111import Data.ByteString (ByteString)
1212import Data.ByteString.Lazy (fromStrict)
13−import Data.Foldable (toList)
13+import Data.Foldable (toList)
14+import Data.Maybe (mapMaybe)
1415import Data.Monoid ((<>))
15−import Data.Maybe (mapMaybe)
1616import Data.String
1717import Data.Text (Text)
1818import qualified Data.Text as T
@@ -33,12 +33,12 @@ queryPursuit q = do
3333 }
3434 m <- newManager tlsManagerSettings
3535 withHTTP req m $ \resp ->
36− P.fold (\x a -> x <> a) "" id $ responseBody resp
36+ P.fold (<>) "" id $ responseBody resp
3737
3838
3939handler :: HttpException -> IO [a]
40−handler StatusCodeException{} = return []
41−handler _ = return []
40+handler StatusCodeException{} = pure []
41+handler _ = pure []
4242
4343searchPursuitForDeclarations :: Text -> IO [PursuitResponse]
4444searchPursuitForDeclarations query =
@@ -54,12 +54,12 @@ searchPursuitForDeclarations query =
5454
5555findPackagesForModuleIdent :: Text -> IO [PursuitResponse]
5656findPackagesForModuleIdent query =
57− (do r <- queryPursuit query
58− let results' = decode (fromStrict r) :: Maybe Array
59− case results' of
60− Nothing -> pure []
61− Just results -> pure (mapMaybe isModuleResponse (map fromJSON (toList results)))) `E.catch`
62− handler
57+ (do r <- queryPursuit query
58+ let results' = decode (fromStrict r) :: Maybe Array
59+ case results' of
60+ Nothing -> pure []
61+ Just results -> pure (mapMaybe isModuleResponse (map fromJSON (toList results)))) `E.catch`
62+ handler
6363 where
6464 isModuleResponse (Success a@ModuleResponse{}) = Just a
6565 isModuleResponse _ = Nothing
src/Language/PureScript/Ide/Reexports.hs+21−19
@@ -15,10 +15,10 @@ import Language.PureScript.Ide.Types
1515
1616getReexports :: Module -> [ExternDecl]
1717getReexports (mn, decls)= concatMap getExport decls
18− where getExport d
19− | (Export mn') <- d
20− , mn /= mn' = replaceExportWithAliases decls mn'
21− | otherwise = []
18+ where getExport d
19+ | (Export mn') <- d
20+ , mn /= mn' = replaceExportWithAliases decls mn'
21+ | otherwise = []
2222
2323dependencyToExport :: ExternDecl -> ExternDecl
2424dependencyToExport (Dependency m _ _) = Export m
@@ -51,23 +51,25 @@ removeExportDecls = fmap (filter (not . isExport))
5151
5252replaceReexports :: Module -> Map ModuleIdent [ExternDecl] -> Module
5353replaceReexports m db = result
54− where reexports = getReexports m
55− result = foldl go (removeExportDecls m) reexports
54+ where
55+ reexports = getReexports m
56+ result = foldl go (removeExportDecls m) reexports
5657
57− go :: Module -> ExternDecl -> Module
58− go m' re@(Export name) = replaceReexport re m' (getModule name)
59− go _ _ = error "partiality! woohoo"
58+ go :: Module -> ExternDecl -> Module
59+ go m' re@(Export name) = replaceReexport re m' (getModule name)
60+ go _ _ = error "partiality! woohoo"
6061
61− getModule :: ModuleIdent -> Module
62− getModule name = clean res
63− where res = fromMaybe emptyModule $ (name , ) <$> Map.lookup name db
64− -- we have to do this because keeping self exports in will result in
65− -- infinite loops
66− clean (mn, decls) = (mn,) (filter (/= Export mn) decls)
62+ getModule :: ModuleIdent -> Module
63+ getModule name = clean res
64+ where
65+ res = fromMaybe emptyModule $ (name , ) <$> Map.lookup name db
66+ -- we have to do this because keeping self exports in will result in
67+ -- infinite loops
68+ clean (mn, decls) = (mn,) (filter (/= Export mn) decls)
6769
6870resolveReexports :: Map ModuleIdent [ExternDecl] -> Module -> Module
69−resolveReexports modules m = do
71+resolveReexports modules m =
7072 let replaced = replaceReexports m modules
71− if null . getReexports $ replaced
72− then replaced
73− else resolveReexports modules replaced
73+ in if null (getReexports replaced)
74+ then replaced
75+ else resolveReexports modules replaced
src/Language/PureScript/Ide/SourceFile.hs+40−40
@@ -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,24 +45,25 @@ 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
5352 let imports = getImports module'
5453 pure (mkModuleImport . unwrapPositionedImport <$> imports)
55− where mkModuleImport (D.ImportDeclaration mn importType' qualifier _) =
56− ModuleImport
57− (T.pack (N.runModuleName mn))
58− importType'
59− (T.pack . N.runModuleName <$> qualifier)
60− mkModuleImport _ = error "Shouldn't have gotten anything but Imports here"
61− unwrapPositionedImport (D.ImportDeclaration mn importType' qualifier b) =
62− D.ImportDeclaration mn (unwrapImportType importType') qualifier b
63− unwrapPositionedImport x = x
64− unwrapImportType (D.Explicit decls) = D.Explicit (map unwrapPositionedRef decls)
65− unwrapImportType (D.Hiding decls) = D.Hiding (map unwrapPositionedRef decls)
66− unwrapImportType D.Implicit = D.Implicit
54+ where
55+ mkModuleImport (D.ImportDeclaration mn importType' qualifier _) =
56+ ModuleImport
57+ (T.pack (N.runModuleName mn))
58+ importType'
59+ (T.pack . N.runModuleName <$> qualifier)
60+ mkModuleImport _ = error "Shouldn't have gotten anything but Imports here"
61+ unwrapPositionedImport (D.ImportDeclaration mn importType' qualifier b) =
62+ D.ImportDeclaration mn (unwrapImportType importType') qualifier b
63+ unwrapPositionedImport x = x
64+ unwrapImportType (D.Explicit decls) = D.Explicit (map unwrapPositionedRef decls)
65+ unwrapImportType (D.Hiding decls) = D.Hiding (map unwrapPositionedRef decls)
66+ unwrapImportType D.Implicit = D.Implicit
6767
6868getPositionedImports :: D.Module -> [D.Declaration]
6969getPositionedImports (D.Module _ _ _ declarations _) =
@@ -73,34 +73,34 @@ getPositionedImports (D.Module _ _ _ declarations _) =
7373 isImport _ = Nothing
7474
7575getDeclPosition :: D.Module -> String -> Maybe SP.SourceSpan
76−getDeclPosition m ident =
77− let decls = getDeclarations m
78− in getFirst (foldMap (match ident) decls)
79− where match q (D.PositionedDeclaration ss _ decl) = First (if go q decl
80− then Just ss
81− else Nothing)
82− match _ _ = First Nothing
76+getDeclPosition m ident = getFirst (foldMap (match ident) decls)
77+ where
78+ decls = getDeclarations m
79+ match q (D.PositionedDeclaration ss _ decl) = First (if go q decl
80+ then Just ss
81+ else Nothing)
82+ match _ _ = First Nothing
8383
84− go q (D.DataDeclaration _ name _ constructors) =
85− properEqual name q || any (\(x,_) -> properEqual x q) constructors
86− go q (D.DataBindingGroupDeclaration decls) = any (go q) decls
87− go q (D.TypeSynonymDeclaration name _ _) = properEqual name q
88− go q (D.TypeDeclaration ident' _) = identEqual ident' q
89− go q (D.ValueDeclaration ident' _ _ _) = identEqual ident' q
90− go q (D.ExternDeclaration ident' _) = identEqual ident' q
91− go q (D.ExternDataDeclaration name _) = properEqual name q
92− go q (D.TypeClassDeclaration name _ _ members) =
93− properEqual name q || any (go q . unwrapPositioned) members
94− go q (D.TypeInstanceDeclaration ident' _ _ _ _) =
95− identEqual ident' q
96− go _ _ = False
84+ go q (D.DataDeclaration _ name _ constructors) =
85+ properEqual name q || any (\(x,_) -> properEqual x q) constructors
86+ go q (D.DataBindingGroupDeclaration decls') = any (go q) decls'
87+ go q (D.TypeSynonymDeclaration name _ _) = properEqual name q
88+ go q (D.TypeDeclaration ident' _) = identEqual ident' q
89+ go q (D.ValueDeclaration ident' _ _ _) = identEqual ident' q
90+ go q (D.ExternDeclaration ident' _) = identEqual ident' q
91+ go q (D.ExternDataDeclaration name _) = properEqual name q
92+ go q (D.TypeClassDeclaration name _ _ members) =
93+ properEqual name q || any (go q . unwrapPositioned) members
94+ go q (D.TypeInstanceDeclaration ident' _ _ _ _) =
95+ identEqual ident' q
96+ go _ _ = False
9797
98− properEqual x q = N.runProperName x == q
99− identEqual x q = N.runIdent x == q
98+ properEqual x q = N.runProperName x == q
99+ identEqual x q = N.runIdent x == q
100100
101101goToDefinition :: String -> FilePath -> IO (Maybe SP.SourceSpan)
102102goToDefinition q fp = do
103103 m <- runExceptT (parseModuleFromFile fp)
104104 case m of
105− Right module' -> return $ getDeclPosition module' q
106− Left _ -> return Nothing
105+ Right module' -> pure (getDeclPosition module' q)
106+ Left _ -> pure Nothing
src/Language/PureScript/Ide/State.hs+10−10
@@ -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
@@ -73,8 +73,8 @@ insertModule externsFile = do
7373
7474insertModule' :: TVar PscIdeState -> ExternsFile -> STM ()
7575insertModule' st ef = do
76− modifyTVar (st) $ \x ->
76+ modifyTVar st $ \x ->
7777 x { externsFiles = M.insert (efModuleName ef) ef (externsFiles x)
78− , pscStateModules = let (mn, decls ) = convertExterns ef
79− in M.insert mn decls (pscStateModules x)
78+ , pscStateModules = let (mn, decls) = convertExterns ef
79+ in M.insert mn decls (pscStateModules x)
8080 }
src/Language/PureScript/Ide/Types.hs+76−78
@@ -33,21 +33,26 @@ type Type = Text
3333data Fixity = Infix | Infixl | Infixr deriving(Show, Eq, Ord)
3434
3535data ExternDecl
36− = FunctionDecl { functionName :: DeclIdent
37− , functionType :: Type
38− }
39− | FixityDeclaration Fixity
40− Int
41− DeclIdent
42− | Dependency { dependencyModule :: ModuleIdent
43− , dependencyNames :: [Text]
44− , dependencyAlias :: Maybe Text
45− }
46− | ModuleDecl ModuleIdent
47− [DeclIdent]
48− | DataDecl DeclIdent
49− Text
50− | Export ModuleIdent
36+ -- | A function/value declaration
37+ = FunctionDecl
38+ DeclIdent -- The functions name
39+ Type -- The functions type
40+ | FixityDeclaration Fixity Int DeclIdent
41+ -- | A Dependency onto another Module
42+ | Dependency
43+ ModuleIdent -- name of the dependency
44+ [Text] -- explicit imports
45+ (Maybe Text) -- An eventual qualifier
46+
47+ -- | A module declaration
48+ | ModuleDecl
49+ ModuleIdent -- The modules name
50+ [DeclIdent] -- The exported identifiers
51+ -- | A data/newtype declaration
52+ | DataDecl DeclIdent -- The type name
53+ Text -- The "type"
54+ -- | An exported module
55+ | Export ModuleIdent -- The exported Modules name
5156 deriving (Show,Eq,Ord)
5257
5358instance ToJSON ExternDecl where
@@ -63,22 +68,22 @@ instance ToJSON ExternDecl where
6368type Module = (ModuleIdent, [ExternDecl])
6469
6570data Configuration =
66− Configuration {
67− confOutputPath :: FilePath
71+ Configuration
72+ { confOutputPath :: FilePath
6873 , confDebug :: Bool
6974 }
7075
7176data PscIdeEnvironment =
72− PscIdeEnvironment {
73− envStateVar :: TVar PscIdeState
77+ PscIdeEnvironment
78+ { envStateVar :: TVar PscIdeState
7479 , envConfiguration :: Configuration
7580 }
7681
77−type PscIde m = (Applicative m, MonadIO m, MonadReader PscIdeEnvironment m)
82+type PscIde m = (MonadIO m, MonadReader PscIdeEnvironment m)
7883
7984data PscIdeState =
80− PscIdeState {
81− pscStateModules :: M.Map Text [ExternDecl]
85+ PscIdeState
86+ { pscStateModules :: M.Map Text [ExternDecl]
8287 , externsFiles :: M.Map ModuleName ExternsFile
8388 } deriving Show
8489
@@ -90,29 +95,32 @@ newtype Completion =
9095 deriving (Show,Eq)
9196
9297data ModuleImport =
93− ModuleImport {
94− importModuleName :: ModuleIdent
98+ ModuleImport
99+ { importModuleName :: ModuleIdent
95100 , importType :: D.ImportDeclarationType
96101 , importQualifier :: Maybe Text
97102 } deriving(Show)
98103
99104instance Eq ModuleImport where
100− mi1 == mi2 = importModuleName mi1 == importModuleName mi2
101− && importQualifier mi1 == importQualifier mi2
105+ mi1 == mi2 =
106+ importModuleName mi1 == importModuleName mi2
107+ && importQualifier mi1 == importQualifier mi2
102108
103109instance ToJSON ModuleImport where
104110 toJSON (ModuleImport mn D.Implicit qualifier) =
105− object $ ["module" .= mn
106− , "importType" .= ("implicit" :: Text)
107− ] ++ fmap (\x -> "qualifier" .= x) (maybeToList qualifier)
111+ object $ [ "module" .= mn
112+ , "importType" .= ("implicit" :: Text)
113+ ] ++ fmap (\x -> "qualifier" .= x) (maybeToList qualifier)
108114 toJSON (ModuleImport mn (D.Explicit refs) _) =
109− object ["module" .= mn
115+ object [ "module" .= mn
110116 , "importType" .= ("explicit" :: Text)
111− , "identifiers" .= (identifierFromDeclarationRef <$> refs)]
117+ , "identifiers" .= (identifierFromDeclarationRef <$> refs)
118+ ]
112119 toJSON (ModuleImport mn (D.Hiding refs) _) =
113− object ["module" .= mn
120+ object [ "module" .= mn
114121 , "importType" .= ("hiding" :: Text)
115− , "identifiers" .= (identifierFromDeclarationRef <$> refs)]
122+ , "identifiers" .= (identifierFromDeclarationRef <$> refs)
123+ ]
116124
117125identifierFromDeclarationRef :: D.DeclarationRef -> String
118126identifierFromDeclarationRef (D.TypeRef name _) = N.runProperName name
@@ -121,16 +129,16 @@ identifierFromDeclarationRef (D.TypeClassRef name) = N.runProperName name
121129identifierFromDeclarationRef _ = ""
122130
123131instance FromJSON Completion where
124− parseJSON (Object o) = do
125− m <- o .: "module"
126− d <- o .: "identifier"
127− t <- o .: "type"
128− return $ Completion (m, d, t)
129− parseJSON _ = mzero
132+ parseJSON (Object o) = do
133+ m <- o .: "module"
134+ d <- o .: "identifier"
135+ t <- o .: "type"
136+ pure (Completion (m, d, t))
137+ parseJSON _ = mzero
130138
131139instance ToJSON Completion where
132− toJSON (Completion (m,d,t)) =
133− object ["module" .= m, "identifier" .= d, "type" .= t]
140+ toJSON (Completion (m,d,t)) =
141+ object ["module" .= m, "identifier" .= d, "type" .= t]
134142
135143data Success =
136144 CompletionResult [Completion]
@@ -161,23 +169,22 @@ data PursuitSearchType = Package | Identifier
161169
162170instance FromJSON PursuitSearchType where
163171 parseJSON (String t) = case t of
164− "package" -> return Package
165− "completion" -> return Identifier
172+ "package" -> pure Package
173+ "completion" -> pure Identifier
166174 _ -> mzero
167175 parseJSON _ = mzero
168176
169177instance FromJSON PursuitQuery where
170− parseJSON o = fmap PursuitQuery (parseJSON o)
171−
172−data PursuitResponse
173− = ModuleResponse { moduleResponseName :: Text
174− , moduleResponsePackage :: Text}
175− | DeclarationResponse { declarationResponseType :: Text
176− , declarationResponseModule :: Text
177− , declarationResponseIdent :: Text
178− , declarationResponsePackage :: Text
179− }
180− deriving (Show,Eq)
178+ parseJSON o = PursuitQuery <$> (parseJSON o)
179+
180+data PursuitResponse =
181+ -- | A Pursuit Response for a module. Consists of the modules name and the
182+ -- package it belongs to
183+ ModuleResponse ModuleIdent Text
184+ -- | A Pursuit Response for a declaration. Consist of the declarations type,
185+ -- module, name and package
186+ | DeclarationResponse Type ModuleIdent DeclIdent Text
187+ deriving (Show,Eq)
181188
182189instance FromJSON PursuitResponse where
183190 parseJSON (Object o) = do
@@ -186,22 +193,12 @@ instance FromJSON PursuitResponse where
186193 (type' :: String) <- info .: "type"
187194 case type' of
188195 "module" -> do
189− name <- info .: "module"
190− return
191− ModuleResponse
192− { moduleResponseName = name
193− , moduleResponsePackage = package
194− }
196+ name <- info .: "module"
197+ pure (ModuleResponse name package)
195198 "declaration" -> do
196− moduleName <- info .: "module"
197− Right (ident, declType) <- typeParse <$> o .: "text"
198− return
199− DeclarationResponse
200− { declarationResponseType = declType
201− , declarationResponseModule = moduleName
202− , declarationResponseIdent = ident
203− , declarationResponsePackage = package
204− }
199+ moduleName <- info .: "module"
200+ Right (ident, declType) <- typeParse <$> o .: "text"
201+ pure (DeclarationResponse declType moduleName ident package)
205202 _ -> mzero
206203 parseJSON _ = mzero
207204
@@ -217,7 +214,7 @@ typeParse t = case parse parseType "" t of
217214 _ <- string "::"
218215 spaces
219216 type' <- many1 anyChar
220− return (unpack name, type')
217+ pure (unpack name, type')
221218
222219identifier :: Parser Text
223220identifier = do
@@ -227,14 +224,15 @@ identifier = do
227224 between (char '(') (char ')') (many1 (noneOf ", )")) <|>
228225 many1 (noneOf ", )")
229226 spaces
230− return (pack ident)
227+ pure (pack ident)
231228
232229instance ToJSON PursuitResponse where
233− toJSON ModuleResponse{..} =
234− object ["module" .= moduleResponseName, "package" .= moduleResponsePackage]
235− toJSON DeclarationResponse{..} =
230+ toJSON (ModuleResponse name package) =
231+ object ["module" .= name, "package" .= package]
232+ toJSON (DeclarationResponse module' ident type' package) =
236233 object
237− [ "module" .= declarationResponseModule
238− , "ident" .= declarationResponseIdent
239− , "type" .= declarationResponseType
240− , "package" .= declarationResponsePackage]
234+ [ "module" .= module'
235+ , "ident" .= ident
236+ , "type" .= type'
237+ , "package" .= package
238+ ]
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+2−2
@@ -41,7 +41,7 @@ combineContexts = M.unionWith (M.unionWith M.union)
4141
4242-- | Replace type class dictionary placeholders with inferred type class dictionaries
4343replaceTypeClassDictionaries
44− :: (Functor m, Applicative m, MonadError MultipleErrors m, MonadWriter MultipleErrors m, MonadSupply m)
44+ :: (MonadError MultipleErrors m, MonadWriter MultipleErrors m, MonadSupply m)
4545 => Bool
4646 -> ModuleName
4747 -> Expr
@@ -59,7 +59,7 @@ replaceTypeClassDictionaries shouldGeneralize mn =
5959--
6060entails
6161 :: forall m
62− . (Functor m, Applicative m, MonadError MultipleErrors m, MonadWriter MultipleErrors m, MonadSupply m)
62+ . (MonadError MultipleErrors m, MonadWriter MultipleErrors m, MonadSupply m)
6363 => Bool
6464 -> ModuleName
6565 -> Context
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
@@ -62,7 +62,7 @@ import Language.PureScript.Types
6262-- | Infer the types of multiple mutually-recursive values, and return elaborated values including
6363-- type class dictionaries and type annotations.
6464typesOf ::
65− (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
65+ (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
6666 ModuleName ->
6767 [(Ident, Expr)] ->
6868 m [(Ident, (Expr, Type))]
@@ -109,7 +109,7 @@ type TypeData = M.Map (ModuleName, Ident) (Type, NameKind, NameVisibility)
109109type UntypedData = [(Ident, Type)]
110110
111111typeDictionaryForBindingGroup ::
112− (Functor m, Applicative m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
112+ (MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
113113 ModuleName ->
114114 [(Ident, Expr)] ->
115115 m ([(Ident, Expr)], [(Ident, (Expr, Type, Bool))], TypeData, UntypedData)
@@ -134,7 +134,7 @@ typeDictionaryForBindingGroup moduleName vals = do
134134 return (untyped, typed, dict, untypedDict)
135135
136136checkTypedBindingGroupElement ::
137− (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
137+ (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
138138 ModuleName ->
139139 (Ident, (Expr, Type, Bool)) ->
140140 TypeData ->
@@ -153,7 +153,7 @@ checkTypedBindingGroupElement mn (ident, (val', ty, checkType)) dict = do
153153 return (ident, (val'', ty''))
154154
155155typeForBindingGroupElement ::
156− (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
156+ (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
157157 (Ident, Expr) ->
158158 TypeData ->
159159 UntypedData ->
@@ -179,10 +179,10 @@ overTypes f = let (_, f', _) = everywhereOnValues id g id in f'
179179 g (TypedValue checkTy val t) = TypedValue checkTy val (f t)
180180 g (TypeClassDictionary (nm, tys) sco) = TypeClassDictionary (nm, map f tys) sco
181181 g other = other
182−
182+
183183-- | Check the kind of a type, failing if it is not of kind *.
184184checkTypeKind ::
185− (Functor m, Applicative m, MonadState CheckState m, MonadError MultipleErrors m) =>
185+ (MonadState CheckState m, MonadError MultipleErrors m) =>
186186 Type ->
187187 Kind ->
188188 m ()
@@ -194,7 +194,7 @@ checkTypeKind ty kind = guardWith (errorMessage (ExpectedType ty kind)) $ kind =
194194-- This is necessary during type checking to avoid unifying a polymorphic type with a
195195-- unification variable.
196196instantiatePolyTypeWithUnknowns ::
197− (Functor m, Applicative m, MonadState CheckState m, MonadError MultipleErrors m) =>
197+ (MonadState CheckState m, MonadError MultipleErrors m) =>
198198 Expr ->
199199 Type ->
200200 m (Expr, Type)
@@ -208,14 +208,14 @@ instantiatePolyTypeWithUnknowns val ty = return (val, ty)
208208
209209-- | Infer a type for a value, rethrowing any error to provide a more useful error message
210210infer ::
211− (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
211+ (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
212212 Expr ->
213213 m Expr
214214infer val = rethrow (addHint (ErrorInferringType val)) $ infer' val
215215
216216-- | Infer a type for a value
217217infer' ::
218− (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
218+ (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
219219 Expr ->
220220 m Expr
221221infer' v@(Literal (NumericLiteral (Left _))) = return $ TypedValue True v tyInt
@@ -304,7 +304,7 @@ infer' (PositionedValue pos c val) = warnAndRethrowWithPosition pos $ do
304304infer' _ = internalError "Invalid argument to infer"
305305
306306inferLetBinding ::
307− (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
307+ (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
308308 [Declaration] ->
309309 [Declaration] ->
310310 Expr ->
@@ -342,7 +342,7 @@ inferLetBinding _ _ _ _ = internalError "Invalid argument to inferLetBinding"
342342
343343-- | Infer the types of variables brought into scope by a binder
344344inferBinder :: forall m.
345− (Functor m, Applicative m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
345+ (MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
346346 Type ->
347347 Binder ->
348348 m (M.Map Ident Type)
@@ -421,7 +421,7 @@ binderRequiresMonotype _ = True
421421
422422-- | Instantiate polytypes only when necessitated by a binder.
423423instantiateForBinders ::
424− (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
424+ (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
425425 [Expr] ->
426426 [CaseAlternative] ->
427427 m ([Expr], [Type])
@@ -438,7 +438,7 @@ instantiateForBinders vals cas = unzip <$> zipWithM (\val inst -> do
438438-- Check the types of the return values in a set of binders in a case statement
439439--
440440checkBinders ::
441− (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
441+ (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
442442 [Type] ->
443443 Type ->
444444 [CaseAlternative] ->
@@ -468,7 +468,7 @@ checkBinders nvals ret (CaseAlternative binders result : bs) = do
468468-- Check the type of a value, rethrowing errors to provide a better error message
469469--
470470check ::
471− (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
471+ (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
472472 Expr ->
473473 Type ->
474474 m Expr
@@ -479,7 +479,7 @@ check val ty = rethrow (addHint (ErrorCheckingType val ty)) $ check' val ty
479479--
480480check'
481481 :: forall m
482− . (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m)
482+ . (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m)
483483 => Expr
484484 -> Type
485485 -> m Expr
@@ -642,7 +642,7 @@ check' val ty = do
642642-- The @lax@ parameter controls whether or not every record member has to be provided. For object updates, this is not the case.
643643--
644644checkProperties ::
645− (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
645+ (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
646646 Expr ->
647647 [(String, Expr)] ->
648648 Type ->
@@ -674,7 +674,7 @@ checkProperties expr ps row lax = let (ts, r') = rowToList row in go ps ts r' wh
674674
675675-- | Check the type of a function application, rethrowing errors to provide a better error message
676676checkFunctionApplication ::
677− (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
677+ (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
678678 Expr ->
679679 Type ->
680680 Expr ->
@@ -686,7 +686,7 @@ checkFunctionApplication fn fnTy arg ret = rethrow (addHint (ErrorInApplication
686686
687687-- | Check the type of a function application
688688checkFunctionApplication' ::
689− (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
689+ (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
690690 Expr ->
691691 Type ->
692692 Expr ->
@@ -724,7 +724,7 @@ checkFunctionApplication' _ fnTy arg _ = throwError . errorMessage $ CannotApply
724724-- | Compute the meet of two types, i.e. the most general type which both types subsume.
725725-- TODO: is this really needed?
726726meet ::
727− (Functor m, Applicative m, MonadState CheckState m, MonadError MultipleErrors m) =>
727+ (MonadState CheckState m, MonadError MultipleErrors m) =>
728728 Expr ->
729729 Expr ->
730730 Type ->
src/Language/PureScript/TypeChecker/Unify.hs+5−5
@@ -57,7 +57,7 @@ freshType = do
5757 return $ TUnknown t
5858
5959-- | Update the substitution to solve a type constraint
60−solveType :: (Functor m, Applicative m, MonadError MultipleErrors m, MonadState CheckState m) => Int -> Type -> m ()
60+solveType :: (MonadError MultipleErrors m, MonadState CheckState m) => Int -> Type -> m ()
6161solveType u t = do
6262 occursCheck u t
6363 modify $ \cs -> cs { checkSubstitution =
@@ -78,7 +78,7 @@ substituteType sub = everywhereOnTypes go
7878 go other = other
7979
8080-- | Make sure that an unknown does not occur in a type
81−occursCheck :: (Functor m, Applicative m, MonadError MultipleErrors m) => Int -> Type -> m ()
81+occursCheck :: (MonadError MultipleErrors m) => Int -> Type -> m ()
8282occursCheck _ TUnknown{} = return ()
8383occursCheck u t = void $ everywhereOnTypesM go t
8484 where
@@ -94,7 +94,7 @@ unknownsInType t = everythingOnTypes (.) go t []
9494 go _ = id
9595
9696-- | Unify two types, updating the current substitution
97−unifyTypes :: (Functor m, Applicative m, MonadError MultipleErrors m, MonadState CheckState m) => Type -> Type -> m ()
97+unifyTypes :: (MonadError MultipleErrors m, MonadState CheckState m) => Type -> Type -> m ()
9898unifyTypes t1 t2 = do
9999 sub <- gets checkSubstitution
100100 rethrow (addHint (ErrorUnifyingTypes t1 t2)) $ unifyTypes' (substituteType sub t1) (substituteType sub t2)
@@ -140,7 +140,7 @@ unifyTypes t1 t2 = do
140140-- trailing row unification variable, if appropriate, otherwise leftover labels result in a unification
141141-- error.
142142--
143−unifyRows :: forall m. (Functor m, Applicative m, MonadError MultipleErrors m, MonadState CheckState m) => Type -> Type -> m ()
143+unifyRows :: forall m. (MonadError MultipleErrors m, MonadState CheckState m) => Type -> Type -> m ()
144144unifyRows r1 r2 =
145145 let
146146 (s1, r1') = rowToList r1
@@ -206,7 +206,7 @@ replaceVarWithUnknown ident ty = do
206206-- |
207207-- Replace type wildcards with unknowns
208208--
209−replaceTypeWildcards :: (Functor m, Applicative m, MonadWriter MultipleErrors m, MonadState CheckState m) => Type -> m Type
209+replaceTypeWildcards :: (MonadWriter MultipleErrors m, MonadState CheckState m) => Type -> m Type
210210replaceTypeWildcards = everywhereOnTypesM replace
211211 where
212212 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)
stack-lts-2.yamldeleted−13
@@ -1,13 +0,0 @@
1−resolver: lts-2.22
2−packages:
3−- '.'
4−extra-deps:
5−- aeson-better-errors-0.8.0
6−- bower-json-0.7.0.0
7−- boxes-0.1.4
8−- pattern-arrows-0.0.2
9−- sourcemap-0.1.6
10−- fsnotify-0.2.1
11−- hfsevents-0.1.6
12−- pipes-http-1.0.2
13−flags: {}
stack-lts-3.yamldeleted−6
@@ -1,6 +0,0 @@
1−resolver: lts-3.22
2−packages:
3−- '.'
4−extra-deps:
5−- sourcemap-0.1.6
6−flags: {}