git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Merge master
commit3c1ed14cdffc8c6fff12da48c8cf460e158cf15b authorPhil Freeman <paf31@cantab.net> dateThu 5 Nov 2015, 09:43 (11 years ago) parent103cbf809f4c2d
63 files changed+486−462
CONTRIBUTING.md+1−1 LICENSE+125 examples/passing/FieldPuns.purs+8 license-generator/generate−47 license-generator/generate.hs+40 license-generator/tmp/.gitkeep psci/Completion.hs+3−8 psci/PSCi.hs+7−8 psci/Parser.hs+2−7 psci/tests/Main.hs+3−4 purescript.cabal+4−3 src/Control/Monad/Logger.hs+3−5 src/Control/Monad/Supply.hs+3−4 src/Language/PureScript/AST/Declarations.hs+3−5 src/Language/PureScript/AST/SourcePos.hs+3−5 src/Language/PureScript/AST/Traversals.hs+58−67 src/Language/PureScript/Bundle.hs+6−7 src/Language/PureScript/CodeGen/JS.hs+3−4 src/Language/PureScript/CodeGen/JS/AST.hs+3−7 src/Language/PureScript/CodeGen/JS/Optimizer.hs+3−4 src/Language/PureScript/CodeGen/JS/Optimizer/Inliner.hs+3−5 src/Language/PureScript/Docs/ParseAndDesugar.hs+6−7 src/Language/PureScript/Docs/RenderedCode/Render.hs+3−6 src/Language/PureScript/Docs/RenderedCode/Types.hs+3−6 src/Language/PureScript/Docs/Types.hs+3−4 src/Language/PureScript/Errors.hs+3−9 src/Language/PureScript/Externs.hs+3−4 src/Language/PureScript/Kinds.hs+3−5 src/Language/PureScript/Linter.hs+3−4 src/Language/PureScript/Linter/Exhaustive.hs+3−4 src/Language/PureScript/Linter/Imports.hs+3−4 src/Language/PureScript/Make.hs+9−12 src/Language/PureScript/Parser/Declarations.hs+7−5 src/Language/PureScript/Parser/JS.hs+3−5 src/Language/PureScript/Parser/Kinds.hs+3−5 src/Language/PureScript/Pretty/JS.hs+6−8 src/Language/PureScript/Pretty/Values.hs−2 src/Language/PureScript/Publish.hs+6−8 src/Language/PureScript/Publish/ErrorsWarnings.hs+3−7 src/Language/PureScript/Renamer.hs+13−14 src/Language/PureScript/Sugar.hs+7−8 src/Language/PureScript/Sugar/BindingGroups.hs+3−5 src/Language/PureScript/Sugar/CaseDeclarations.hs+3−4 src/Language/PureScript/Sugar/DoNotation.hs+3−4 src/Language/PureScript/Sugar/Names.hs+7−9 src/Language/PureScript/Sugar/Names/Exports.hs+5−5 src/Language/PureScript/Sugar/Names/Imports.hs+8−8 src/Language/PureScript/Sugar/ObjectWildcards.hs+3−4 src/Language/PureScript/Sugar/Operators.hs+5−6 src/Language/PureScript/Sugar/TypeClasses.hs+5−6 src/Language/PureScript/Sugar/TypeClasses/Deriving.hs+4−5 src/Language/PureScript/Sugar/TypeDeclarations.hs+3−4 src/Language/PureScript/Traversals.hs+2−5 src/Language/PureScript/TypeChecker.hs+14−16 src/Language/PureScript/TypeChecker/Entailment.hs+5−9 src/Language/PureScript/TypeChecker/Kinds.hs+5−5 src/Language/PureScript/TypeChecker/Monad.hs+11−7 src/Language/PureScript/TypeChecker/Skolems.hs+3−4 src/Language/PureScript/TypeChecker/Synonyms.hs+3−4 src/Language/PureScript/TypeChecker/Types.hs+14−15 src/Language/PureScript/Types.hs+3−4 tests/Main.hs+3−7 tests/common/TestsSetup.hs+3−8
CONTRIBUTING.md+1−1
@@ -30,7 +30,7 @@ updated.
3030You can automate this (if you have bash):
3131
3232- get a copy of [cabal-dependency-licenses][]
33−- run at the command line: `./license/generate > LICENSE`
33+- run at the command line: `runhaskell license-generator/generate.hs > LICENSE`
3434
3535[cabal-dependency-licenses]: https://github.com/jaspervdj/cabal-dependency-licenses
3636
LICENSE+125
@@ -31,6 +31,7 @@ PureScript uses the following Haskell library packages. Their license files foll
3131 array
3232 attoparsec
3333 base
34+ base-compat
3435 binary
3536 blaze-builder
3637 bower-json
@@ -50,6 +51,7 @@ PureScript uses the following Haskell library packages. Their license files foll
5051 monad-control
5152 mtl
5253 nats
54+ old-locale
5355 optparse-applicative
5456 parallel
5557 parsec
@@ -64,6 +66,7 @@ PureScript uses the following Haskell library packages. Their license files foll
6466 split
6567 stm
6668 syb
69+ tagged
6770 template-haskell
6871 terminfo
6972 text
@@ -454,6 +457,28 @@ base LICENSE file:
454457
455458 -----------------------------------------------------------------------------
456459
460+base-compat LICENSE file:
461+
462+ Copyright (c) 2012-2015 Simon Hengel <sol@typeful.net> and Ryan Scott <ryan.gl.scott@ku.edu>
463+
464+ Permission is hereby granted, free of charge, to any person obtaining a copy
465+ of this software and associated documentation files (the "Software"), to deal
466+ in the Software without restriction, including without limitation the rights
467+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
468+ copies of the Software, and to permit persons to whom the Software is
469+ furnished to do so, subject to the following conditions:
470+
471+ The above copyright notice and this permission notice shall be included in
472+ all copies or substantial portions of the Software.
473+
474+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
475+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
476+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
477+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
478+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
479+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
480+ THE SOFTWARE.
481+
457482binary LICENSE file:
458483
459484 Copyright (c) Lennart Kolmodin
@@ -1136,6 +1161,72 @@ nats LICENSE file:
11361161 ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
11371162 POSSIBILITY OF SUCH DAMAGE.
11381163
1164+old-locale LICENSE file:
1165+
1166+ This library (libraries/base) is derived from code from two
1167+ sources:
1168+
1169+ * Code from the GHC project which is largely (c) The University of
1170+ Glasgow, and distributable under a BSD-style license (see below),
1171+
1172+ * Code from the Haskell 98 Report which is (c) Simon Peyton Jones
1173+ and freely redistributable (but see the full license for
1174+ restrictions).
1175+
1176+ The full text of these licenses is reproduced below. Both of the
1177+ licenses are BSD-style or compatible.
1178+
1179+ -----------------------------------------------------------------------------
1180+
1181+ The Glasgow Haskell Compiler License
1182+
1183+ Copyright 2004, The University Court of the University of Glasgow.
1184+ All rights reserved.
1185+
1186+ Redistribution and use in source and binary forms, with or without
1187+ modification, are permitted provided that the following conditions are met:
1188+
1189+ - Redistributions of source code must retain the above copyright notice,
1190+ this list of conditions and the following disclaimer.
1191+
1192+ - Redistributions in binary form must reproduce the above copyright notice,
1193+ this list of conditions and the following disclaimer in the documentation
1194+ and/or other materials provided with the distribution.
1195+
1196+ - Neither name of the University nor the names of its contributors may be
1197+ used to endorse or promote products derived from this software without
1198+ specific prior written permission.
1199+
1200+ THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF
1201+ GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
1202+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
1203+ FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
1204+ UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE
1205+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
1206+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
1207+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
1208+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
1209+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
1210+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
1211+ DAMAGE.
1212+
1213+ -----------------------------------------------------------------------------
1214+
1215+ Code derived from the document "Report on the Programming Language
1216+ Haskell 98", is distributed under the following license:
1217+
1218+ Copyright (c) 2002 Simon Peyton Jones
1219+
1220+ The authors intend this Report to belong to the entire Haskell
1221+ community, and so we grant permission to copy and distribute it for
1222+ any purpose, provided that it is reproduced in its entirety,
1223+ including this Notice. Modified versions of this Report may also be
1224+ copied and distributed for any purpose, provided that the modified
1225+ version is clearly presented as such, and that it does not claim to
1226+ be a definition of the Haskell 98 Language.
1227+
1228+ -----------------------------------------------------------------------------
1229+
11391230optparse-applicative LICENSE file:
11401231
11411232 Copyright (c) 2012, Paolo Capriotti
@@ -1648,6 +1739,39 @@ syb LICENSE file:
16481739
16491740 -----------------------------------------------------------------------------
16501741
1742+tagged LICENSE file:
1743+
1744+ Copyright (c) 2009-2015 Edward Kmett
1745+ All rights reserved.
1746+
1747+ Redistribution and use in source and binary forms, with or without
1748+ modification, are permitted provided that the following conditions are
1749+ met:
1750+
1751+ * Redistributions of source code must retain the above copyright
1752+ notice, this list of conditions and the following disclaimer.
1753+
1754+ * Redistributions in binary form must reproduce the above
1755+ copyright notice, this list of conditions and the following
1756+ disclaimer in the documentation and/or other materials provided
1757+ with the distribution.
1758+
1759+ * Neither the name of Edward Kmett nor the names of other
1760+ contributors may be used to endorse or promote products derived
1761+ from this software without specific prior written permission.
1762+
1763+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
1764+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
1765+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
1766+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
1767+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
1768+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
1769+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
1770+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
1771+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
1772+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
1773+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
1774+
16511775template-haskell LICENSE file:
16521776
16531777
@@ -2008,3 +2132,4 @@ void LICENSE file:
20082132 STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
20092133 ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
20102134 POSSIBILITY OF SUCH DAMAGE.
2135+
examples/passing/FieldPuns.pursnew file+8
@@ -0,0 +1,8 @@
1+module Main where
2+
3+import Prelude
4+import Control.Monad.Eff.Console
5+
6+greet { greeting, name } = log $ greeting <> ", " <> name <> "."
7+
8+main = greet { greeting: "Hello", name: "World" }
license-generator/generatedeleted−47
@@ -1,47 +0,0 @@
1−#!/bin/bash
2−# Generates the LICENSE file and prints it to standard output.
3−# Example use:
4−#
5−# ./license/generate > LICENSE
6−#
7−
8−set -e # exit on error
9−set -u # exit on undefined variable
10−set -o pipefail # propagate nonzero exit codes through pipelines
11−
12−export LC_CTYPE=C
13−export LANG=C
14−
15−if ! which cabal-dependency-licenses >/dev/null; then
16− echo "$0: the program 'cabal-dependency-licenses' is required." >&2
17− echo "$0: see Hackage: https://hackage.haskell.org/package/cabal-dependency-licenses" >&2
18− exit 1
19−fi
20−
21−echo_header() {
22− cat license-generator/header.txt
23−}
24−
25−echo_deps_names() {
26− cabal-dependency-licenses \
27− | grep '^- ' | sed 's/^..//' | gsort -h
28−}
29−
30−echo_deps_licenses() {
31− while read dep; do
32− echo "fetching LICENSE for: ${dep}" >&2
33− echo "${dep} LICENSE file:"
34− echo ""
35− curl --silent "https://hackage.haskell.org/package/${dep}/src/LICENSE" \
36− | sed 's/^/ /g' # indent by 2 characters
37− echo ""
38− done
39−}
40−
41−echo_deps_names > license-generator/tmp/deps.txt
42−
43−echo_header
44−echo ""
45−sed <license-generator/tmp/deps.txt 's/^/ /'
46−echo ""
47−echo_deps_licenses <license-generator/tmp/deps.txt
license-generator/generate.hsnew file+40
@@ -0,0 +1,40 @@
1+module Main (main) where
2+
3+import Control.Monad (forM_)
4+import Data.Char (isSpace)
5+import Data.List
6+import System.Process
7+import System.IO (hPutStrLn, stderr)
8+
9+echoHeader :: IO ()
10+echoHeader =
11+ readFile "license-generator/header.txt" >>= putStr
12+
13+depsNames :: IO [String]
14+depsNames = do
15+ i <- readProcess "cabal-dependency-licenses" [] ""
16+ return $ sort $ map (drop 2) $ filter startsWithDash $ lines i
17+ where
18+ startsWithDash ('-' : _) = True
19+ startsWithDash _ = False
20+
21+depsLicense :: String -> IO ()
22+depsLicense dep = do
23+ let licenseFile = if dep == "Glob" then "LICENSE.txt" else "LICENSE"
24+ hPutStrLn stderr dep
25+ license <- readProcess "curl" ["--silent", "https://hackage.haskell.org/package/" ++ dep ++ "/src/" ++ licenseFile] ""
26+ putStrLn $ dep ++ " LICENSE file:"
27+ putStrLn ""
28+ putStrLn $ f license
29+ where
30+ f = unlines . map trimEnd . map (" " ++) . lines
31+ trimEnd = reverse . dropWhile isSpace . reverse
32+
33+main :: IO ()
34+main = do
35+ deps <-depsNames
36+ echoHeader
37+ putStrLn ""
38+ forM_ deps $ \d -> putStr " " >> putStrLn d
39+ putStrLn ""
40+ forM_ deps depsLicense
license-generator/tmp/.gitkeepdeleted

No changes to the content.

psci/Completion.hs+3−8
@@ -1,19 +1,14 @@
1−{-# LANGUAGE CPP #-}
2−
31module Completion where
42
3+import Prelude ()
4+import Prelude.Compat
5+
56import Data.Maybe (mapMaybe)
67import Data.List (nub, nubBy, sortBy, isPrefixOf, stripPrefix)
78import Data.Char (isUpper)
89import Data.Function (on)
9−#if __GLASGOW_HASKELL__ < 710
10−import Data.Traversable (traverse)
11−#endif
1210
1311import Control.Arrow (second)
14−#if __GLASGOW_HASKELL__ < 710
15−import Control.Applicative ((<$>), (<*>))
16−#endif
1712import Control.Monad.Trans.Reader (asks, runReaderT, ReaderT)
1813import Control.Monad.Trans.State.Strict
1914
psci/PSCi.hs+7−8
@@ -17,15 +17,14 @@
1717{-# LANGUAGE GeneralizedNewtypeDeriving #-}
1818{-# LANGUAGE RecordWildCards #-}
1919{-# LANGUAGE TupleSections #-}
20−{-# LANGUAGE CPP #-}
2120
2221module PSCi where
2322
23+import Prelude ()
24+import Prelude.Compat
25+
2426import Data.Foldable (traverse_)
2527import Data.List (intercalate, nub, sort)
26−#if __GLASGOW_HASKELL__ < 710
27−import Data.Traversable (traverse)
28−#endif
2928import Data.Tuple (swap)
3029import Data.Version (showVersion)
3130import qualified Data.Map as M
@@ -509,7 +508,7 @@ loadUserConfig = onFirstFileMatching readCommands pathGetters
509508 if exists
510509 then do
511510 ls <- lines <$> readFile configFile
512− case mapM parseCommand ls of
511+ case traverse parseCommand ls of
513512 Left err -> print err >> exitFailure
514513 Right cs -> return $ Just cs
515514 else
@@ -526,8 +525,8 @@ consoleIsDefined = any ((== P.ModuleName (map P.ProperName [ "Control", "Monad",
526525loop :: PSCiOptions -> IO ()
527526loop PSCiOptions{..} = do
528527 config <- loadUserConfig
529− inputFiles <- concat <$> mapM glob psciInputFile
530− foreignFiles <- concat <$> mapM glob psciForeignInputFiles
528+ inputFiles <- concat <$> traverse glob psciInputFile
529+ foreignFiles <- concat <$> traverse glob psciForeignInputFiles
531530 modulesOrFirstError <- loadAllModules inputFiles
532531 case modulesOrFirstError of
533532 Left errs -> putStrLn (P.prettyPrintMultipleErrors False errs) >> exitFailure
@@ -542,7 +541,7 @@ loop PSCiOptions{..} = do
542541 Right foreigns ->
543542 flip evalStateT (PSCiState inputFiles [] modules foreigns [] psciInputNodeFlags) . runInputT (setComplete completion settings) $ do
544543 outputStrLn prologueMessage
545− traverse_ (mapM_ (runPSCI . handleCommand)) config
544+ traverse_ (traverse_ (runPSCI . handleCommand)) config
546545 modules' <- lift $ gets psciLoadedModules
547546 unless (consoleIsDefined (map snd modules')) . outputStrLn $ unlines
548547 [ "PSCi requires the purescript-console module to be installed."
psci/Parser.hs+2−7
@@ -13,21 +13,16 @@
1313--
1414-----------------------------------------------------------------------------
1515
16−{-# LANGUAGE CPP #-}
17−
1816module Parser
1917 ( parseCommand
2018 ) where
2119
22−import Prelude hiding (lex)
20+import Prelude ()
21+import Prelude.Compat hiding (lex)
2322
2423import Data.Char (isSpace)
2524import Data.List (intercalate)
2625
27−#if __GLASGOW_HASKELL__ < 710
28−import Control.Applicative hiding (many)
29−#endif
30−
3126import Text.Parsec hiding ((<|>))
3227
3328import qualified Language.PureScript as P
psci/tests/Main.hs+3−4
@@ -1,14 +1,13 @@
11{-# LANGUAGE RecordWildCards #-}
22{-# LANGUAGE TupleSections #-}
3−{-# LANGUAGE CPP #-}
43
54module Main where
65
6+import Prelude ()
7+import Prelude.Compat
8+
79import Control.Monad.Trans.State.Strict (runStateT)
810import Control.Monad (when, forM)
9−#if __GLASGOW_HASKELL__ < 710
10−import Control.Applicative
11−#endif
1211import Control.Monad.Writer.Strict (runWriterT)
1312import Control.Monad.Trans.Except (runExceptT)
1413
purescript.cabal+4−3
@@ -40,6 +40,7 @@ source-repository head
4040
4141library
4242 build-depends: base >=4.6 && <5,
43+ base-compat >=0.6.0,
4344 lifted-base >= 0.2.3 && < 0.2.4,
4445 monad-control >= 1.0.0.0 && < 1.1,
4546 transformers-base >= 0.4.0 && < 0.5,
@@ -196,7 +197,7 @@ executable psci
196197 build-depends: base >=4 && <5, containers -any, directory -any, filepath -any,
197198 mtl -any, optparse-applicative >= 0.10.0, parsec -any,
198199 haskeline >= 0.7.0.0, purescript -any, transformers -any,
199− transformers-compat -any, process -any, time -any, Glob -any
200+ transformers-compat -any, process -any, time -any, Glob -any, base-compat >=0.6.0
200201
201202 main-is: Main.hs
202203 buildable: True
@@ -259,7 +260,7 @@ test-suite tests
259260 build-depends: base >=4 && <5, containers -any, directory -any,
260261 filepath -any, mtl -any, parsec -any, purescript -any,
261262 transformers -any, process -any, transformers-compat -any, time -any,
262− Glob -any
263+ Glob -any, base-compat >=0.6.0
263264 type: exitcode-stdio-1.0
264265 main-is: Main.hs
265266 other-modules: TestsSetup
@@ -271,7 +272,7 @@ test-suite psci-tests
271272 mtl -any, optparse-applicative >= 0.10.0, parsec -any,
272273 haskeline >= 0.7.0.0, purescript -any, transformers -any,
273274 transformers-compat -any, process -any, HUnit -any, time -any,
274− Glob -any
275+ Glob -any, base-compat >=0.6.0
275276 type: exitcode-stdio-1.0
276277 main-is: Main.hs
277278 other-modules: TestsSetup
src/Control/Monad/Logger.hs+3−5
@@ -12,19 +12,17 @@
1212--
1313-----------------------------------------------------------------------------
1414
15−{-# LANGUAGE CPP #-}
1615{-# LANGUAGE FlexibleInstances #-}
1716{-# LANGUAGE MultiParamTypeClasses #-}
1817{-# LANGUAGE TypeFamilies #-}
1918
2019module Control.Monad.Logger where
2120
21+import Prelude ()
22+import Prelude.Compat
23+
2224import Data.IORef
2325
24−#if __GLASGOW_HASKELL__ < 710
25−import Data.Monoid
26−import Control.Applicative
27−#endif
2826import Control.Monad (ap)
2927import Control.Monad.IO.Class
3028import Control.Monad.Writer.Class
src/Control/Monad/Supply.hs+3−4
@@ -14,15 +14,14 @@
1414-----------------------------------------------------------------------------
1515
1616{-# LANGUAGE GeneralizedNewtypeDeriving #-}
17−{-# LANGUAGE CPP #-}
1817
1918module Control.Monad.Supply where
2019
20+import Prelude ()
21+import Prelude.Compat
22+
2123import Data.Functor.Identity
2224
23−#if __GLASGOW_HASKELL__ < 710
24−import Control.Applicative
25−#endif
2625import Control.Monad.State
2726import Control.Monad.Error.Class (MonadError(..))
2827import Control.Monad.Reader
src/Language/PureScript/AST/Declarations.hs+3−5
@@ -15,10 +15,12 @@
1515{-# LANGUAGE DeriveDataTypeable #-}
1616{-# LANGUAGE ScopedTypeVariables #-}
1717{-# LANGUAGE TemplateHaskell #-}
18−{-# LANGUAGE CPP #-}
1918
2019module Language.PureScript.AST.Declarations where
2120
21+import Prelude ()
22+import Prelude.Compat
23+
2224import Data.Aeson.TH
2325
2426import qualified Data.Data as D
@@ -26,10 +28,6 @@ import qualified Data.Map as M
2628
2729import Control.Monad.Identity
2830
29−#if __GLASGOW_HASKELL__ < 710
30−import Control.Applicative
31−#endif
32−
3331import Language.PureScript.AST.Binders
3432import Language.PureScript.AST.Operators
3533import Language.PureScript.AST.SourcePos
src/Language/PureScript/AST/SourcePos.hs+3−5
@@ -12,7 +12,6 @@
1212--
1313-----------------------------------------------------------------------------
1414
15−{-# LANGUAGE CPP #-}
1615{-# LANGUAGE DeriveDataTypeable #-}
1716{-# LANGUAGE ScopedTypeVariables #-}
1817{-# LANGUAGE RecordWildCards #-}
@@ -20,14 +19,13 @@
2019
2120module Language.PureScript.AST.SourcePos where
2221
22+import Prelude ()
23+import Prelude.Compat
24+
2325import qualified Data.Data as D
2426import Data.Aeson ((.=), (.:))
2527import qualified Data.Aeson as A
2628
27−#if __GLASGOW_HASKELL__ < 710
28−import Control.Applicative
29−#endif
30−
3129-- |
3230-- Source position information
3331--
src/Language/PureScript/AST/Traversals.hs+58−67
@@ -12,21 +12,12 @@
1212--
1313-----------------------------------------------------------------------------
1414
15−{-# LANGUAGE CPP #-}
16−
1715module Language.PureScript.AST.Traversals where
1816
19−#if __GLASGOW_HASKELL__ < 710
20−import Data.Monoid (Monoid(..), mconcat)
21−#endif
22−import Data.Maybe (mapMaybe)
23−#if __GLASGOW_HASKELL__ < 710
24−import Data.Traversable (traverse)
25−#endif
17+import Prelude ()
18+import Prelude.Compat
2619
27−#if __GLASGOW_HASKELL__ < 710
28−import Control.Applicative
29−#endif
20+import Data.Maybe (mapMaybe)
3021import Control.Monad
3122import Control.Arrow ((***), (+++), second)
3223
@@ -101,10 +92,10 @@ everywhereOnValuesTopDownM :: (Functor m, Applicative m, Monad m) =>
10192 (Declaration -> m Declaration, Expr -> m Expr, Binder -> m Binder)
10293everywhereOnValuesTopDownM f g h = (f' <=< f, g' <=< g, h' <=< h)
10394 where
104− f' (DataBindingGroupDeclaration ds) = DataBindingGroupDeclaration <$> mapM (f' <=< f) ds
105− f' (ValueDeclaration name nameKind bs val) = ValueDeclaration name nameKind <$> mapM (h' <=< h) bs <*> eitherM (mapM (pairM (g' <=< g) (g' <=< g))) (g' <=< g) val
106− f' (BindingGroupDeclaration ds) = BindingGroupDeclaration <$> mapM (\(name, nameKind, val) -> (,,) name nameKind <$> (g val >>= g')) ds
107− f' (TypeClassDeclaration name args implies ds) = TypeClassDeclaration name args implies <$> mapM (f' <=< f) ds
95+ f' (DataBindingGroupDeclaration ds) = DataBindingGroupDeclaration <$> traverse (f' <=< f) ds
96+ f' (ValueDeclaration name nameKind bs val) = ValueDeclaration name nameKind <$> traverse (h' <=< h) bs <*> eitherM (traverse (pairM (g' <=< g) (g' <=< g))) (g' <=< g) val
97+ f' (BindingGroupDeclaration ds) = BindingGroupDeclaration <$> traverse (\(name, nameKind, val) -> (,,) name nameKind <$> (g val >>= g')) ds
98+ f' (TypeClassDeclaration name args implies ds) = TypeClassDeclaration name args implies <$> traverse (f' <=< f) ds
10899 f' (TypeInstanceDeclaration name cs className args ds) = TypeInstanceDeclaration name cs className args <$> traverseTypeInstanceBody (traverse (f' <=< f)) ds
109100 f' (PositionedDeclaration pos com d) = PositionedDeclaration pos com <$> (f d >>= f')
110101 f' other = f other
@@ -114,37 +105,37 @@ everywhereOnValuesTopDownM f g h = (f' <=< f, g' <=< g, h' <=< h)
114105 g' (Parens v) = Parens <$> (g v >>= g')
115106 g' (OperatorSection op (Left v)) = OperatorSection <$> (g op >>= g') <*> (Left <$> (g v >>= g'))
116107 g' (OperatorSection op (Right v)) = OperatorSection <$> (g op >>= g') <*> (Right <$> (g v >>= g'))
117− g' (ArrayLiteral vs) = ArrayLiteral <$> mapM (g' <=< g) vs
118− g' (ObjectLiteral vs) = ObjectLiteral <$> mapM (sndM (g' <=< g)) vs
119− g' (ObjectConstructor vs) = ObjectConstructor <$> mapM (sndM $ maybeM (g' <=< g)) vs
108+ g' (ArrayLiteral vs) = ArrayLiteral <$> traverse (g' <=< g) vs
109+ g' (ObjectLiteral vs) = ObjectLiteral <$> traverse (sndM (g' <=< g)) vs
110+ g' (ObjectConstructor vs) = ObjectConstructor <$> traverse (sndM $ maybeM (g' <=< g)) vs
120111 g' (TypeClassDictionaryConstructorApp name v) = TypeClassDictionaryConstructorApp name <$> (g v >>= g')
121112 g' (Accessor prop v) = Accessor prop <$> (g v >>= g')
122− g' (ObjectUpdate obj vs) = ObjectUpdate <$> (g obj >>= g') <*> mapM (sndM (g' <=< g)) vs
123− g' (ObjectUpdater obj vs) = ObjectUpdater <$> (maybeM g obj >>= maybeM g') <*> mapM (sndM $ maybeM (g' <=< g)) vs
113+ g' (ObjectUpdate obj vs) = ObjectUpdate <$> (g obj >>= g') <*> traverse (sndM (g' <=< g)) vs
114+ g' (ObjectUpdater obj vs) = ObjectUpdater <$> (maybeM g obj >>= maybeM g') <*> traverse (sndM $ maybeM (g' <=< g)) vs
124115 g' (Abs name v) = Abs name <$> (g v >>= g')
125116 g' (App v1 v2) = App <$> (g v1 >>= g') <*> (g v2 >>= g')
126117 g' (IfThenElse v1 v2 v3) = IfThenElse <$> (g v1 >>= g') <*> (g v2 >>= g') <*> (g v3 >>= g')
127− g' (Case vs alts) = Case <$> mapM (g' <=< g) vs <*> mapM handleCaseAlternative alts
118+ g' (Case vs alts) = Case <$> traverse (g' <=< g) vs <*> traverse handleCaseAlternative alts
128119 g' (TypedValue check v ty) = TypedValue check <$> (g v >>= g') <*> pure ty
129− g' (Let ds v) = Let <$> mapM (f' <=< f) ds <*> (g v >>= g')
130− g' (Do es) = Do <$> mapM handleDoNotationElement es
120+ g' (Let ds v) = Let <$> traverse (f' <=< f) ds <*> (g v >>= g')
121+ g' (Do es) = Do <$> traverse handleDoNotationElement es
131122 g' (PositionedValue pos com v) = PositionedValue pos com <$> (g v >>= g')
132123 g' other = g other
133124
134− h' (ConstructorBinder ctor bs) = ConstructorBinder ctor <$> mapM (h' <=< h) bs
135− h' (ObjectBinder bs) = ObjectBinder <$> mapM (sndM (h' <=< h)) bs
136− h' (ArrayBinder bs) = ArrayBinder <$> mapM (h' <=< h) bs
125+ h' (ConstructorBinder ctor bs) = ConstructorBinder ctor <$> traverse (h' <=< h) bs
126+ h' (ObjectBinder bs) = ObjectBinder <$> traverse (sndM (h' <=< h)) bs
127+ h' (ArrayBinder bs) = ArrayBinder <$> traverse (h' <=< h) bs
137128 h' (NamedBinder name b) = NamedBinder name <$> (h b >>= h')
138129 h' (PositionedBinder pos com b) = PositionedBinder pos com <$> (h b >>= h')
139130 h' (TypedBinder t b) = TypedBinder t <$> (h b >>= h')
140131 h' other = h other
141132
142− handleCaseAlternative (CaseAlternative bs val) = CaseAlternative <$> mapM (h' <=< h) bs
143− <*> eitherM (mapM (pairM (g' <=< g) (g' <=< g))) (g' <=< g) val
133+ handleCaseAlternative (CaseAlternative bs val) = CaseAlternative <$> traverse (h' <=< h) bs
134+ <*> eitherM (traverse (pairM (g' <=< g) (g' <=< g))) (g' <=< g) val
144135
145136 handleDoNotationElement (DoNotationValue v) = DoNotationValue <$> (g' <=< g) v
146137 handleDoNotationElement (DoNotationBind b v) = DoNotationBind <$> (h' <=< h) b <*> (g' <=< g) v
147− handleDoNotationElement (DoNotationLet ds) = DoNotationLet <$> mapM (f' <=< f) ds
138+ handleDoNotationElement (DoNotationLet ds) = DoNotationLet <$> traverse (f' <=< f) ds
148139 handleDoNotationElement (PositionedDoNotationElement pos com e) = PositionedDoNotationElement pos com <$> handleDoNotationElement e
149140
150141everywhereOnValuesM :: (Functor m, Applicative m, Monad m) =>
@@ -154,11 +145,11 @@ everywhereOnValuesM :: (Functor m, Applicative m, Monad m) =>
154145 (Declaration -> m Declaration, Expr -> m Expr, Binder -> m Binder)
155146everywhereOnValuesM f g h = (f', g', h')
156147 where
157− f' (DataBindingGroupDeclaration ds) = (DataBindingGroupDeclaration <$> mapM f' ds) >>= f
158− f' (ValueDeclaration name nameKind bs val) = (ValueDeclaration name nameKind <$> mapM h' bs <*> eitherM (mapM (pairM g' g')) g' val) >>= f
159− f' (BindingGroupDeclaration ds) = (BindingGroupDeclaration <$> mapM (\(name, nameKind, val) -> (,,) name nameKind <$> g' val) ds) >>= f
160− f' (TypeClassDeclaration name args implies ds) = (TypeClassDeclaration name args implies <$> mapM f' ds) >>= f
161− f' (TypeInstanceDeclaration name cs className args ds) = (TypeInstanceDeclaration name cs className args <$> traverseTypeInstanceBody (mapM f') ds) >>= f
148+ f' (DataBindingGroupDeclaration ds) = (DataBindingGroupDeclaration <$> traverse f' ds) >>= f
149+ f' (ValueDeclaration name nameKind bs val) = (ValueDeclaration name nameKind <$> traverse h' bs <*> eitherM (traverse (pairM g' g')) g' val) >>= f
150+ f' (BindingGroupDeclaration ds) = (BindingGroupDeclaration <$> traverse (\(name, nameKind, val) -> (,,) name nameKind <$> g' val) ds) >>= f
151+ f' (TypeClassDeclaration name args implies ds) = (TypeClassDeclaration name args implies <$> traverse f' ds) >>= f
152+ f' (TypeInstanceDeclaration name cs className args ds) = (TypeInstanceDeclaration name cs className args <$> traverseTypeInstanceBody (traverse f') ds) >>= f
162153 f' (PositionedDeclaration pos com d) = (PositionedDeclaration pos com <$> f' d) >>= f
163154 f' other = f other
164155
@@ -167,37 +158,37 @@ everywhereOnValuesM f g h = (f', g', h')
167158 g' (Parens v) = (Parens <$> g' v) >>= g
168159 g' (OperatorSection op (Left v)) = (OperatorSection <$> g' op <*> (Left <$> g' v)) >>= g
169160 g' (OperatorSection op (Right v)) = (OperatorSection <$> g' op <*> (Right <$> g' v)) >>= g
170− g' (ArrayLiteral vs) = (ArrayLiteral <$> mapM g' vs) >>= g
171− g' (ObjectLiteral vs) = (ObjectLiteral <$> mapM (sndM g') vs) >>= g
172− g' (ObjectConstructor vs) = (ObjectConstructor <$> mapM (sndM $ maybeM g') vs) >>= g
161+ g' (ArrayLiteral vs) = (ArrayLiteral <$> traverse g' vs) >>= g
162+ g' (ObjectLiteral vs) = (ObjectLiteral <$> traverse (sndM g') vs) >>= g
163+ g' (ObjectConstructor vs) = (ObjectConstructor <$> traverse (sndM $ maybeM g') vs) >>= g
173164 g' (TypeClassDictionaryConstructorApp name v) = (TypeClassDictionaryConstructorApp name <$> g' v) >>= g
174165 g' (Accessor prop v) = (Accessor prop <$> g' v) >>= g
175− g' (ObjectUpdate obj vs) = (ObjectUpdate <$> g' obj <*> mapM (sndM g') vs) >>= g
176− g' (ObjectUpdater obj vs) = (ObjectUpdater <$> maybeM g' obj <*> mapM (sndM $ maybeM g') vs) >>= g
166+ g' (ObjectUpdate obj vs) = (ObjectUpdate <$> g' obj <*> traverse (sndM g') vs) >>= g
167+ g' (ObjectUpdater obj vs) = (ObjectUpdater <$> maybeM g' obj <*> traverse (sndM $ maybeM g') vs) >>= g
177168 g' (Abs name v) = (Abs name <$> g' v) >>= g
178169 g' (App v1 v2) = (App <$> g' v1 <*> g' v2) >>= g
179170 g' (IfThenElse v1 v2 v3) = (IfThenElse <$> g' v1 <*> g' v2 <*> g' v3) >>= g
180− g' (Case vs alts) = (Case <$> mapM g' vs <*> mapM handleCaseAlternative alts) >>= g
171+ g' (Case vs alts) = (Case <$> traverse g' vs <*> traverse handleCaseAlternative alts) >>= g
181172 g' (TypedValue check v ty) = (TypedValue check <$> g' v <*> pure ty) >>= g
182− g' (Let ds v) = (Let <$> mapM f' ds <*> g' v) >>= g
183− g' (Do es) = (Do <$> mapM handleDoNotationElement es) >>= g
173+ g' (Let ds v) = (Let <$> traverse f' ds <*> g' v) >>= g
174+ g' (Do es) = (Do <$> traverse handleDoNotationElement es) >>= g
184175 g' (PositionedValue pos com v) = (PositionedValue pos com <$> g' v) >>= g
185176 g' other = g other
186177
187− h' (ConstructorBinder ctor bs) = (ConstructorBinder ctor <$> mapM h' bs) >>= h
188− h' (ObjectBinder bs) = (ObjectBinder <$> mapM (sndM h') bs) >>= h
189− h' (ArrayBinder bs) = (ArrayBinder <$> mapM h' bs) >>= h
178+ h' (ConstructorBinder ctor bs) = (ConstructorBinder ctor <$> traverse h' bs) >>= h
179+ h' (ObjectBinder bs) = (ObjectBinder <$> traverse (sndM h') bs) >>= h
180+ h' (ArrayBinder bs) = (ArrayBinder <$> traverse h' bs) >>= h
190181 h' (NamedBinder name b) = (NamedBinder name <$> h' b) >>= h
191182 h' (PositionedBinder pos com b) = (PositionedBinder pos com <$> h' b) >>= h
192183 h' (TypedBinder t b) = (TypedBinder t <$> h' b) >>= h
193184 h' other = h other
194185
195− handleCaseAlternative (CaseAlternative bs val) = CaseAlternative <$> mapM h' bs
196− <*> eitherM (mapM (pairM g' g')) g' val
186+ handleCaseAlternative (CaseAlternative bs val) = CaseAlternative <$> traverse h' bs
187+ <*> eitherM (traverse (pairM g' g')) g' val
197188
198189 handleDoNotationElement (DoNotationValue v) = DoNotationValue <$> g' v
199190 handleDoNotationElement (DoNotationBind b v) = DoNotationBind <$> h' b <*> g' v
200− handleDoNotationElement (DoNotationLet ds) = DoNotationLet <$> mapM f' ds
191+ handleDoNotationElement (DoNotationLet ds) = DoNotationLet <$> traverse f' ds
201192 handleDoNotationElement (PositionedDoNotationElement pos com e) = PositionedDoNotationElement pos com <$> handleDoNotationElement e
202193
203194everythingOnValues :: (r -> r -> r) ->
@@ -345,11 +336,11 @@ everywhereWithContextOnValuesM s0 f g h i j = (f'' s0, g'' s0, h'' s0, i'' s0, j
345336 where
346337 f'' s = uncurry f' <=< f s
347338
348− f' s (DataBindingGroupDeclaration ds) = DataBindingGroupDeclaration <$> mapM (f'' s) ds
349− f' s (ValueDeclaration name nameKind bs val) = ValueDeclaration name nameKind <$> mapM (h'' s) bs <*> eitherM (mapM (pairM (g'' s) (g'' s))) (g'' s) val
350− f' s (BindingGroupDeclaration ds) = BindingGroupDeclaration <$> mapM (thirdM (g'' s)) ds
351− f' s (TypeClassDeclaration name args implies ds) = TypeClassDeclaration name args implies <$> mapM (f'' s) ds
352− f' s (TypeInstanceDeclaration name cs className args ds) = TypeInstanceDeclaration name cs className args <$> traverseTypeInstanceBody (mapM (f'' s)) ds
339+ f' s (DataBindingGroupDeclaration ds) = DataBindingGroupDeclaration <$> traverse (f'' s) ds
340+ f' s (ValueDeclaration name nameKind bs val) = ValueDeclaration name nameKind <$> traverse (h'' s) bs <*> eitherM (traverse (pairM (g'' s) (g'' s))) (g'' s) val
341+ f' s (BindingGroupDeclaration ds) = BindingGroupDeclaration <$> traverse (thirdM (g'' s)) ds
342+ f' s (TypeClassDeclaration name args implies ds) = TypeClassDeclaration name args implies <$> traverse (f'' s) ds
343+ f' s (TypeInstanceDeclaration name cs className args ds) = TypeInstanceDeclaration name cs className args <$> traverseTypeInstanceBody (traverse (f'' s)) ds
353344 f' s (PositionedDeclaration pos com d1) = PositionedDeclaration pos com <$> f'' s d1
354345 f' _ other = return other
355346
@@ -360,28 +351,28 @@ everywhereWithContextOnValuesM s0 f g h i j = (f'' s0, g'' s0, h'' s0, i'' s0, j
360351 g' s (Parens v) = Parens <$> g'' s v
361352 g' s (OperatorSection op (Left v)) = OperatorSection <$> g'' s op <*> (Left <$> g'' s v)
362353 g' s (OperatorSection op (Right v)) = OperatorSection <$> g'' s op <*> (Right <$> g'' s v)
363− g' s (ArrayLiteral vs) = ArrayLiteral <$> mapM (g'' s) vs
364− g' s (ObjectLiteral vs) = ObjectLiteral <$> mapM (sndM (g'' s)) vs
365− g' s (ObjectConstructor vs) = ObjectConstructor <$> mapM (sndM $ maybeM (g'' s)) vs
354+ g' s (ArrayLiteral vs) = ArrayLiteral <$> traverse (g'' s) vs
355+ g' s (ObjectLiteral vs) = ObjectLiteral <$> traverse (sndM (g'' s)) vs
356+ g' s (ObjectConstructor vs) = ObjectConstructor <$> traverse (sndM $ maybeM (g'' s)) vs
366357 g' s (TypeClassDictionaryConstructorApp name v) = TypeClassDictionaryConstructorApp name <$> g'' s v
367358 g' s (Accessor prop v) = Accessor prop <$> g'' s v
368− g' s (ObjectUpdate obj vs) = ObjectUpdate <$> g'' s obj <*> mapM (sndM (g'' s)) vs
369− g' s (ObjectUpdater obj vs) = ObjectUpdater <$> maybeM (g'' s) obj <*> mapM (sndM $ maybeM (g'' s)) vs
359+ g' s (ObjectUpdate obj vs) = ObjectUpdate <$> g'' s obj <*> traverse (sndM (g'' s)) vs
360+ g' s (ObjectUpdater obj vs) = ObjectUpdater <$> maybeM (g'' s) obj <*> traverse (sndM $ maybeM (g'' s)) vs
370361 g' s (Abs name v) = Abs name <$> g'' s v
371362 g' s (App v1 v2) = App <$> g'' s v1 <*> g'' s v2
372363 g' s (IfThenElse v1 v2 v3) = IfThenElse <$> g'' s v1 <*> g'' s v2 <*> g'' s v3
373− g' s (Case vs alts) = Case <$> mapM (g'' s) vs <*> mapM (i'' s) alts
364+ g' s (Case vs alts) = Case <$> traverse (g'' s) vs <*> traverse (i'' s) alts
374365 g' s (TypedValue check v ty) = TypedValue check <$> g'' s v <*> pure ty
375− g' s (Let ds v) = Let <$> mapM (f'' s) ds <*> g'' s v
376− g' s (Do es) = Do <$> mapM (j'' s) es
366+ g' s (Let ds v) = Let <$> traverse (f'' s) ds <*> g'' s v
367+ g' s (Do es) = Do <$> traverse (j'' s) es
377368 g' s (PositionedValue pos com v) = PositionedValue pos com <$> g'' s v
378369 g' _ other = return other
379370
380371 h'' s = uncurry h' <=< h s
381372
382− h' s (ConstructorBinder ctor bs) = ConstructorBinder ctor <$> mapM (h'' s) bs
383− h' s (ObjectBinder bs) = ObjectBinder <$> mapM (sndM (h'' s)) bs
384− h' s (ArrayBinder bs) = ArrayBinder <$> mapM (h'' s) bs
373+ h' s (ConstructorBinder ctor bs) = ConstructorBinder ctor <$> traverse (h'' s) bs
374+ h' s (ObjectBinder bs) = ObjectBinder <$> traverse (sndM (h'' s)) bs
375+ h' s (ArrayBinder bs) = ArrayBinder <$> traverse (h'' s) bs
385376 h' s (NamedBinder name b) = NamedBinder name <$> h'' s b
386377 h' s (PositionedBinder pos com b) = PositionedBinder pos com <$> h'' s b
387378 h' s (TypedBinder t b) = TypedBinder t <$> h'' s b
@@ -389,13 +380,13 @@ everywhereWithContextOnValuesM s0 f g h i j = (f'' s0, g'' s0, h'' s0, i'' s0, j
389380
390381 i'' s = uncurry i' <=< i s
391382
392− i' s (CaseAlternative bs val) = CaseAlternative <$> mapM (h'' s) bs <*> eitherM (mapM (pairM (g'' s) (g'' s))) (g'' s) val
383+ i' s (CaseAlternative bs val) = CaseAlternative <$> traverse (h'' s) bs <*> eitherM (traverse (pairM (g'' s) (g'' s))) (g'' s) val
393384
394385 j'' s = uncurry j' <=< j s
395386
396387 j' s (DoNotationValue v) = DoNotationValue <$> g'' s v
397388 j' s (DoNotationBind b v) = DoNotationBind <$> h'' s b <*> g'' s v
398− j' s (DoNotationLet ds) = DoNotationLet <$> mapM (f'' s) ds
389+ j' s (DoNotationLet ds) = DoNotationLet <$> traverse (f'' s) ds
399390 j' s (PositionedDoNotationElement pos com e1) = PositionedDoNotationElement pos com <$> j'' s e1
400391
401392accumTypes :: (Monoid r) => (Type -> r) -> (Declaration -> r, Expr -> r, Binder -> r, CaseAlternative -> r, DoNotationElement -> r)
src/Language/PureScript/Bundle.hs+6−7
@@ -20,7 +20,6 @@
2020{-# LANGUAGE ScopedTypeVariables #-}
2121{-# LANGUAGE TupleSections #-}
2222{-# LANGUAGE RecordWildCards #-}
23−{-# LANGUAGE CPP #-}
2423
2524module Language.PureScript.Bundle (
2625 bundle
@@ -31,6 +30,9 @@ module Language.PureScript.Bundle (
3130 , printErrorMessage
3231) where
3332
33+import Prelude ()
34+import Prelude.Compat
35+
3436import Data.List (nub)
3537import Data.Maybe (mapMaybe, catMaybes)
3638import Data.Generics (everything, everywhere, mkQ, mkT)
@@ -39,9 +41,6 @@ import Data.Version (showVersion)
3941
4042import qualified Data.Set as S
4143
42−#if __GLASGOW_HASKELL__ < 710
43−import Control.Applicative
44−#endif
4544import Control.Monad
4645import Control.Monad.Error.Class
4746import Language.JavaScript.Parser
@@ -212,7 +211,7 @@ withDeps (Module modulePath es) = Module modulePath (map expandDeps es)
212211-- Other constructor.
213212toModule :: forall m. (Applicative m, MonadError ErrorMessage m) => S.Set String -> ModuleIdentifier -> JSNode -> m Module
214213toModule mids mid top
215− | JSSourceElementsTop ns <- node top = Module mid <$> mapM toModuleElement ns
214+ | JSSourceElementsTop ns <- node top = Module mid <$> traverse toModuleElement ns
216215 | otherwise = err InvalidTopLevel
217216 where
218217 err = throwError . ErrorInModule mid
@@ -262,7 +261,7 @@ toModule mids mid top
262261 , JSOperator eq <- node op
263262 , JSLiteral "=" <- node eq
264263 , JSObjectLiteral _ props _ <- node obj
265− = ExportsList <$> mapM toExport (filter (not . isSeparator) (map node props))
264+ = ExportsList <$> traverse toExport (filter (not . isSeparator) (map node props))
266265 where
267266 toExport :: Node -> m (ExportType, String, JSNode, [Key])
268267 toExport (JSPropertyNameandValue name _ [val] ) =
@@ -544,7 +543,7 @@ bundle inputStrs entryPoints mainModule namespace = do
544543
545544 let mids = S.fromList (map (moduleName . fst) input)
546545
547− modules <- mapM (fmap withDeps . uncurry (toModule mids)) input
546+ modules <- traverse (fmap withDeps . uncurry (toModule mids)) input
548547
549548 let compiled = compile modules entryPoints
550549 sorted = sortModules (filter (not . isModuleEmpty) compiled)
src/Language/PureScript/CodeGen/JS.hs+3−4
@@ -17,7 +17,6 @@
1717{-# LANGUAGE ViewPatterns #-}
1818{-# LANGUAGE FlexibleContexts #-}
1919{-# LANGUAGE ScopedTypeVariables #-}
20−{-# LANGUAGE CPP #-}
2120
2221module Language.PureScript.CodeGen.JS
2322 ( module AST
@@ -26,13 +25,13 @@ module Language.PureScript.CodeGen.JS
2625 , mainCall
2726 ) where
2827
28+import Prelude ()
29+import Prelude.Compat
30+
2931import Data.List ((\\), delete, intersect)
3032import Data.Maybe (isNothing)
3133import qualified Data.Traversable as T (traverse)
3234
33−#if __GLASGOW_HASKELL__ < 710
34−import Control.Applicative
35−#endif
3635import Control.Arrow ((&&&))
3736import Control.Monad (replicateM, forM)
3837import Control.Monad.Reader (MonadReader, asks)
src/Language/PureScript/CodeGen/JS/AST.hs+3−7
@@ -14,18 +14,14 @@
1414-----------------------------------------------------------------------------
1515
1616{-# LANGUAGE DeriveDataTypeable #-}
17−{-# LANGUAGE CPP #-}
1817
1918module Language.PureScript.CodeGen.JS.AST where
2019
21−#if __GLASGOW_HASKELL__ < 710
22−import Control.Applicative (Applicative, (<$>), (<*>))
23−#endif
20+import Prelude ()
21+import Prelude.Compat
22+
2423import Control.Monad.Identity
2524import Data.Data
26−#if __GLASGOW_HASKELL__ < 710
27−import Data.Traversable (traverse)
28−#endif
2925
3026import Language.PureScript.Comments
3127import Language.PureScript.Traversals
src/Language/PureScript/CodeGen/JS/Optimizer.hs+3−4
@@ -32,15 +32,14 @@
3232-----------------------------------------------------------------------------
3333
3434{-# LANGUAGE FlexibleContexts #-}
35−{-# LANGUAGE CPP #-}
3635
3736module Language.PureScript.CodeGen.JS.Optimizer (
3837 optimize
3938) where
4039
41−#if __GLASGOW_HASKELL__ < 710
42−import Control.Applicative (Applicative)
43−#endif
40+import Prelude ()
41+import Prelude.Compat
42+
4443import Control.Monad.Reader (MonadReader, ask, asks)
4544import Control.Monad.Supply.Class (MonadSupply)
4645
src/Language/PureScript/CodeGen/JS/Optimizer/Inliner.hs+3−5
@@ -13,8 +13,6 @@
1313--
1414-----------------------------------------------------------------------------
1515
16−{-# LANGUAGE CPP #-}
17−
1816module Language.PureScript.CodeGen.JS.Optimizer.Inliner (
1917 inlineVariables,
2018 inlineValues,
@@ -26,9 +24,9 @@ module Language.PureScript.CodeGen.JS.Optimizer.Inliner (
2624 evaluateIifes
2725) where
2826
29−#if __GLASGOW_HASKELL__ < 710
30−import Control.Applicative (Applicative)
31−#endif
27+import Prelude ()
28+import Prelude.Compat
29+
3230import Control.Monad.Supply.Class (MonadSupply, freshName)
3331import Data.Maybe (fromMaybe)
3432
src/Language/PureScript/Docs/ParseAndDesugar.hs+6−7
@@ -1,17 +1,16 @@
11{-# LANGUAGE TupleSections #-}
2−{-# LANGUAGE CPP #-}
32
43module Language.PureScript.Docs.ParseAndDesugar
54 ( parseAndDesugar
65 , ParseDesugarError(..)
76 ) where
87
8+import Prelude ()
9+import Prelude.Compat
10+
911import qualified Data.Map as M
1012import Control.Arrow (first)
1113import Control.Monad
12−#if __GLASGOW_HASKELL__ < 710
13−import Control.Applicative
14−#endif
1514
1615import Control.Monad.Trans.Except
1716import Control.Monad.Writer.Strict (runWriterT)
@@ -53,8 +52,8 @@ parseAndDesugar ::
5352 -> ([Bookmark] -> [P.Module] -> IO a)
5453 -> IO (Either ParseDesugarError a)
5554parseAndDesugar inputFiles depsFiles callback = do
56− inputFiles' <- mapM (parseAs Local) inputFiles
57− depsFiles' <- mapM (\(pkgName, f) -> parseAs (FromDep pkgName) f) depsFiles
55+ inputFiles' <- traverse (parseAs Local) inputFiles
56+ depsFiles' <- traverse (\(pkgName, f) -> parseAs (FromDep pkgName) f) depsFiles
5857
5958 runExceptT $ do
6059 ms <- parseFiles (inputFiles' ++ depsFiles')
@@ -122,7 +121,7 @@ desugar :: [P.Module] -> Either P.MultipleErrors [P.Module]
122121desugar = P.evalSupplyT 0 . desugar'
123122 where
124123 desugar' :: [P.Module] -> P.SupplyT (Either P.MultipleErrors) [P.Module]
125− desugar' = mapM P.desugarDoModule >=> P.desugarCasesModule >=> ignoreWarnings . P.desugarImports []
124+ desugar' = traverse P.desugarDoModule >=> P.desugarCasesModule >=> ignoreWarnings . P.desugarImports []
126125 ignoreWarnings m = liftM fst (runWriterT m)
127126
128127parseFile :: FilePath -> IO (FilePath, String)
src/Language/PureScript/Docs/RenderedCode/Render.hs+3−6
@@ -1,5 +1,3 @@
1−{-# LANGUAGE CPP #-}
2−
31-- | Functions for producing RenderedCode values from PureScript Type values.
42
53module Language.PureScript.Docs.RenderedCode.Render (
@@ -11,12 +9,11 @@ module Language.PureScript.Docs.RenderedCode.Render (
119 defaultRenderTypeOptions,
1210 renderTypeWithOptions
1311) where
12+
13+import Prelude ()
14+import Prelude.Compat
1415
15−#if __GLASGOW_HASKELL__ < 710
16−import Data.Monoid ((<>), mconcat, mempty)
17−#else
1816import Data.Monoid ((<>))
19−#endif
2017import Data.Maybe (fromMaybe)
2118
2219import Control.Arrow ((<+>))
src/Language/PureScript/Docs/RenderedCode/Types.hs+3−6
@@ -1,6 +1,5 @@
11{-# LANGUAGE GeneralizedNewtypeDeriving #-}
22{-# LANGUAGE OverloadedStrings #-}
3−{-# LANGUAGE CPP #-}
43
54-- | Data types and functions for representing a simplified form of PureScript
65-- code, intended for use in e.g. HTML documentation.
@@ -31,11 +30,9 @@ module Language.PureScript.Docs.RenderedCode.Types
3130 , keywordWhere
3231 ) where
3332
34−#if __GLASGOW_HASKELL__ < 710
35−import Control.Applicative ((<$>), (<*>), (*>), pure)
36−import Data.Foldable
37−import Data.Monoid
38−#endif
33+import Prelude ()
34+import Prelude.Compat
35+
3936import qualified Data.Aeson as A
4037import Data.Aeson.BetterErrors
4138import Control.Monad.Error.Class (MonadError(..))
src/Language/PureScript/Docs/Types.hs+3−4
@@ -2,7 +2,6 @@
22{-# LANGUAGE OverloadedStrings #-}
33{-# LANGUAGE TupleSections #-}
44{-# LANGUAGE RankNTypes #-}
5−{-# LANGUAGE CPP #-}
65
76module Language.PureScript.Docs.Types
87 ( module Language.PureScript.Docs.Types
@@ -10,10 +9,10 @@ module Language.PureScript.Docs.Types
109 )
1110 where
1211
12+import Prelude ()
13+import Prelude.Compat
14+
1315import Control.Arrow (first, (***))
14−#if __GLASGOW_HASKELL__ < 710
15−import Control.Applicative ((<$>), (<$), (<*>), pure)
16−#endif
1716import Control.Monad (when)
1817import Data.Maybe (mapMaybe)
1918import Data.Version
src/Language/PureScript/Errors.hs+3−9
@@ -15,28 +15,22 @@
1515{-# LANGUAGE GeneralizedNewtypeDeriving #-}
1616{-# LANGUAGE FlexibleContexts #-}
1717{-# LANGUAGE MultiParamTypeClasses #-}
18−{-# LANGUAGE CPP #-}
1918
2019module Language.PureScript.Errors where
2120
21+import Prelude ()
22+import Prelude.Compat
23+
2224import Data.Either (lefts, rights)
2325import Data.List (intercalate, transpose, nub, nubBy)
2426import Data.Function (on)
25−#if __GLASGOW_HASKELL__ < 710
26−import Data.Foldable (fold, foldMap)
27−import Data.Traversable (traverse)
28−#else
2927import Data.Foldable (fold)
30−#endif
3128
3229import qualified Data.Map as M
3330
3431import Control.Monad
3532import Control.Monad.Writer
3633import Control.Monad.Error.Class (MonadError(..))
37−#if __GLASGOW_HASKELL__ < 710
38−import Control.Applicative ((<$>), (<*>), Applicative, pure)
39−#endif
4034import Control.Monad.Trans.State.Lazy
4135import Control.Arrow(first)
4236
src/Language/PureScript/Externs.hs+3−4
@@ -13,7 +13,6 @@
1313--
1414-----------------------------------------------------------------------------
1515
16−{-# LANGUAGE CPP #-}
1716{-# LANGUAGE RecordWildCards #-}
1817{-# LANGUAGE PatternGuards #-}
1918{-# LANGUAGE TemplateHaskell #-}
@@ -27,13 +26,13 @@ module Language.PureScript.Externs
2726 , applyExternsFileToEnvironment
2827 ) where
2928
29+import Prelude ()
30+import Prelude.Compat
31+
3032import Data.List (find, foldl')
3133import Data.Maybe (mapMaybe, maybeToList, fromMaybe)
3234import Data.Foldable (fold)
3335import Data.Version (showVersion)
34−#if __GLASGOW_HASKELL__ < 710
35−import Data.Monoid
36−#endif
3736import Data.Aeson.TH
3837
3938import qualified Data.Map as M
src/Language/PureScript/Kinds.hs+3−5
@@ -14,17 +14,15 @@
1414
1515{-# LANGUAGE DeriveDataTypeable #-}
1616{-# LANGUAGE TemplateHaskell #-}
17−{-# LANGUAGE CPP #-}
1817
1918module Language.PureScript.Kinds where
2019
20+import Prelude ()
21+import Prelude.Compat
22+
2123import Data.Data
2224import qualified Data.Aeson.TH as A
2325
24−#if __GLASGOW_HASKELL__ < 710
25−import Control.Applicative
26−#endif
27−
2826-- |
2927-- The data type of kinds
3028--
src/Language/PureScript/Linter.hs+3−4
@@ -15,19 +15,18 @@
1515{-# LANGUAGE GeneralizedNewtypeDeriving #-}
1616{-# LANGUAGE FlexibleContexts #-}
1717{-# LANGUAGE ScopedTypeVariables #-}
18−{-# LANGUAGE CPP #-}
1918
2019module Language.PureScript.Linter (lint, module L) where
2120
21+import Prelude ()
22+import Prelude.Compat
23+
2224import Data.List (mapAccumL, nub, (\\))
2325import Data.Maybe (mapMaybe)
2426import Data.Monoid
2527
2628import qualified Data.Set as S
2729
28−#if __GLASGOW_HASKELL__ < 710
29−import Control.Applicative
30−#endif
3130import Control.Monad.Writer.Class
3231
3332import Language.PureScript.Crash
src/Language/PureScript/Linter/Exhaustive.hs+3−4
@@ -18,20 +18,19 @@
1818
1919{-# LANGUAGE FlexibleContexts #-}
2020{-# LANGUAGE ScopedTypeVariables #-}
21−{-# LANGUAGE CPP #-}
2221
2322module Language.PureScript.Linter.Exhaustive
2423 ( checkExhaustive
2524 , checkExhaustiveModule
2625 ) where
2726
27+import Prelude ()
28+import Prelude.Compat
29+
2830import qualified Data.Map as M
2931import Data.Maybe (fromMaybe)
3032import Data.List (foldl', sortBy, nub)
3133import Data.Function (on)
32−#if __GLASGOW_HASKELL__ < 710
33−import Data.Traversable (sequenceA)
34−#endif
3534
3635import Control.Monad (unless)
3736import Control.Applicative
src/Language/PureScript/Linter/Imports.hs+3−4
@@ -1,18 +1,17 @@
11{-# LANGUAGE ScopedTypeVariables #-}
22{-# LANGUAGE FlexibleContexts #-}
3−{-# LANGUAGE CPP #-}
43
54module Language.PureScript.Linter.Imports (findUnusedImports, Name(..), UsedImports()) where
65
6+import Prelude ()
7+import Prelude.Compat
8+
79import qualified Data.Map as M
810import Data.Maybe (mapMaybe)
911import Data.List ((\\), find)
1012import Control.Monad.Error.Class (MonadError(..))
1113import Control.Monad.Writer.Class
1214import Control.Monad(unless,when)
13−#if __GLASGOW_HASKELL__ < 710
14−import Control.Applicative
15−#endif
1615import Data.Foldable (forM_)
1716
1817import Language.PureScript.AST.Declarations
src/Language/PureScript/Make.hs+9−12
@@ -21,7 +21,6 @@
2121{-# LANGUAGE ScopedTypeVariables #-}
2222{-# LANGUAGE MultiParamTypeClasses #-}
2323{-# LANGUAGE TypeFamilies #-}
24−{-# LANGUAGE CPP #-}
2524
2625module Language.PureScript.Make
2726 (
@@ -38,14 +37,16 @@ module Language.PureScript.Make
3837 , buildMakeActions
3938 ) where
4039
41−#if __GLASGOW_HASKELL__ < 710
42−import Control.Applicative
43−#endif
44−import Control.Monad
40+import Prelude ()
41+import Prelude.Compat
42+
43+import Control.Monad hiding (sequence)
4544import Control.Monad.Error.Class (MonadError(..))
4645import Control.Monad.Writer.Class (MonadWriter(..))
46+import Control.Monad.Trans.Class (MonadTrans(..))
4747import Control.Monad.Trans.Except
48−import Control.Monad.Reader
48+import Control.Monad.IO.Class
49+import Control.Monad.Reader (MonadReader(..), ReaderT(..))
4950import Control.Monad.Logger
5051import Control.Monad.Supply
5152import Control.Monad.Base (MonadBase(..))
@@ -58,10 +59,6 @@ import Data.Maybe (fromMaybe, catMaybes)
5859import Data.Time.Clock
5960import Data.String (fromString)
6061import Data.Foldable (for_)
61−#if __GLASGOW_HASKELL__ < 710
62−import Data.Monoid (mempty, mconcat)
63−import Data.Traversable (traverse)
64−#endif
6562import Data.Traversable (for)
6663import Data.Version (showVersion)
6764import Data.Aeson (encode, decode)
@@ -207,12 +204,12 @@ make MakeActions{..} ms = do
207204 -- We need to wait for dependencies to be built, before checking if the current
208205 -- module should be rebuilt, so the first thing to do is to wait on the
209206 -- MVars for the module's dependencies.
210− mexterns <- fmap unzip . sequence <$> mapM (readMVar . fst . fromMaybe (internalError "make: no barrier") . flip lookup barriers) deps
207+ mexterns <- fmap unzip . sequence <$> traverse (readMVar . fst . fromMaybe (internalError "make: no barrier") . flip lookup barriers) deps
211208
212209 case mexterns of
213210 Just (_, externs) -> do
214211 outputTimestamp <- getOutputTimestamp moduleName
215− dependencyTimestamp <- maximumMaybe <$> mapM (fmap shouldExist . getOutputTimestamp) deps
212+ dependencyTimestamp <- maximumMaybe <$> traverse (fmap shouldExist . getOutputTimestamp) deps
216213 inputTimestamp <- getInputTimestamp moduleName
217214
218215 let shouldRebuild = case (inputTimestamp, dependencyTimestamp, outputTimestamp) of
src/Language/PureScript/Parser/Declarations.hs+7−5
@@ -517,11 +517,13 @@ parseNullBinder :: TokenParser Binder
517517parseNullBinder = underscore *> return NullBinder
518518
519519parseIdentifierAndBinder :: TokenParser (String, Binder)
520−parseIdentifierAndBinder = do
521− name <- lname <|> stringLiteral
522− C.indented *> (equals <|> colon)
523− binder <- C.indented *> parseBinder
524− return (name, binder)
520+parseIdentifierAndBinder =
521+ do name <- lname
522+ b <- P.option (VarBinder (Ident name)) rest
523+ return (name, b)
524+ <|> (,) <$> stringLiteral <*> rest
525+ where
526+ rest = C.indented *> (equals <|> colon) *> C.indented *> parseBinder
525527
526528-- |
527529-- Parse a binder
src/Language/PureScript/Parser/JS.hs+3−5
@@ -13,16 +13,15 @@
1313-----------------------------------------------------------------------------
1414
1515{-# LANGUAGE FlexibleContexts #-}
16−{-# LANGUAGE CPP #-}
1716
1817module Language.PureScript.Parser.JS
1918 ( ForeignJS()
2019 , parseForeignModulesFromFiles
2120 ) where
2221
23−#if __GLASGOW_HASKELL__ < 710
24−import Control.Applicative ((*>), (<*))
25−#endif
22+import Prelude ()
23+import Prelude.Compat hiding (lex)
24+
2625import Control.Monad (forM_, when, msum)
2726import Control.Monad.Error.Class (MonadError(..))
2827import Control.Monad.Writer.Class (MonadWriter(..))
@@ -32,7 +31,6 @@ import Language.PureScript.Errors
3231import Language.PureScript.Names
3332import Language.PureScript.Parser.Common
3433import Language.PureScript.Parser.Lexer
35−import Prelude hiding (lex)
3634import qualified Data.Map as M
3735import qualified Text.Parsec as PS
3836
src/Language/PureScript/Parser/Kinds.hs+3−5
@@ -13,18 +13,16 @@
1313--
1414-----------------------------------------------------------------------------
1515
16−{-# LANGUAGE CPP #-}
17−
1816module Language.PureScript.Parser.Kinds (
1917 parseKind
2018) where
2119
20+import Prelude ()
21+import Prelude.Compat
22+
2223import Language.PureScript.Kinds
2324import Language.PureScript.Parser.Common
2425import Language.PureScript.Parser.Lexer
25−#if __GLASGOW_HASKELL__ < 710
26−import Control.Applicative
27−#endif
2826import qualified Text.Parsec as P
2927import qualified Text.Parsec.Expr as P
3028
src/Language/PureScript/Pretty/JS.hs+6−8
@@ -13,20 +13,18 @@
1313--
1414-----------------------------------------------------------------------------
1515
16−{-# LANGUAGE CPP #-}
17−
1816module Language.PureScript.Pretty.JS (
1917 prettyPrintJS
2018) where
2119
22−import Data.List
20+import Prelude ()
21+import Prelude.Compat
22+
23+import Data.List hiding (concat, concatMap)
2324import Data.Maybe (fromMaybe)
2425
25−#if __GLASGOW_HASKELL__ < 710
26−import Control.Applicative
27−#endif
2826import Control.Arrow ((<+>))
29−import Control.Monad.State
27+import Control.Monad.State hiding (sequence)
3028import Control.PatternArrows
3129import qualified Control.Arrow as A
3230
@@ -199,7 +197,7 @@ app :: Pattern PrinterState JS (String, JS)
199197app = mkPattern' match
200198 where
201199 match (JSApp val args) = do
202− jss <- mapM prettyPrintJS' args
200+ jss <- traverse prettyPrintJS' args
203201 return (intercalate ", " jss, val)
204202 match _ = mzero
205203
src/Language/PureScript/Pretty/Values.hs−2
@@ -13,8 +13,6 @@
1313--
1414-----------------------------------------------------------------------------
1515
16−{-# LANGUAGE CPP #-}
17−
1816module Language.PureScript.Pretty.Values (
1917 prettyPrintValue,
2018 prettyPrintBinder,
src/Language/PureScript/Publish.hs+6−8
@@ -2,7 +2,6 @@
22{-# LANGUAGE RecordWildCards #-}
33{-# LANGUAGE TupleSections #-}
44{-# LANGUAGE GeneralizedNewtypeDeriving #-}
5−{-# LANGUAGE CPP #-}
65
76module Language.PureScript.Publish
87 ( preparePackage
@@ -19,7 +18,8 @@ module Language.PureScript.Publish
1918 , getResolvedDependencies
2019 ) where
2120
22−import Prelude hiding (userError)
21+import Prelude ()
22+import Prelude.Compat hiding (userError)
2323
2424import Data.Maybe
2525import Data.Char (isSpace)
@@ -28,15 +28,13 @@ import Data.List.Split (splitOn)
2828import Data.List.NonEmpty (NonEmpty(..))
2929import Data.Version
3030import Data.Function (on)
31+import Data.Foldable (traverse_)
3132import Safe (headMay)
3233import Data.Aeson.BetterErrors
3334import qualified Data.Text as T
3435import qualified Data.Text.Lazy as TL
3536import qualified Data.Text.Lazy.Encoding as TL
3637
37−#if __GLASGOW_HASKELL__ < 710
38−import Control.Applicative
39−#endif
4038import Control.Category ((>>>))
4139import Control.Arrow ((***))
4240import Control.Exception (catch, try)
@@ -304,7 +302,7 @@ asDependencyStatus = do
304302
305303warnUndeclared :: [PackageName] -> [PackageName] -> PrepareM ()
306304warnUndeclared declared actual =
307− mapM_ (warn . UndeclaredDependency) (actual \\ declared)
305+ traverse_ (warn . UndeclaredDependency) (actual \\ declared)
308306
309307handleDeps ::
310308 [(PackageName, DependencyStatus)] -> PrepareM [(PackageName, Version)]
@@ -314,8 +312,8 @@ handleDeps deps = do
314312 (x:xs) ->
315313 userError (MissingDependencies (x :| xs))
316314 [] -> do
317− mapM_ (warn . NoResolvedVersion) noVersion
318− withVersions <- catMaybes <$> mapM tryExtractVersion' installed
315+ traverse_ (warn . NoResolvedVersion) noVersion
316+ withVersions <- catMaybes <$> traverse tryExtractVersion' installed
319317 filterM (liftIO . isPureScript . bowerDir . fst) withVersions
320318
321319 where
src/Language/PureScript/Publish/ErrorsWarnings.hs+3−7
@@ -1,6 +1,5 @@
11{-# LANGUAGE OverloadedStrings #-}
22{-# LANGUAGE RecordWildCards #-}
3−{-# LANGUAGE CPP #-}
43
54module Language.PureScript.Publish.ErrorsWarnings
65 ( PackageError(..)
@@ -16,16 +15,13 @@ module Language.PureScript.Publish.ErrorsWarnings
1615 , renderWarnings
1716 ) where
1817
19−#if __GLASGOW_HASKELL__ < 710
20−import Control.Applicative ((<$>))
21−#endif
18+import Prelude ()
19+import Prelude.Compat
20+
2221import Data.Aeson.BetterErrors
2322import Data.Version
2423import Data.Maybe
2524import Data.Monoid
26−#if __GLASGOW_HASKELL__ < 710
27−import Data.Foldable (foldMap)
28−#endif
2925import Data.List (intersperse, intercalate)
3026import Data.List.NonEmpty (NonEmpty(..))
3127import qualified Data.List.NonEmpty as NonEmpty
src/Language/PureScript/Renamer.hs+13−14
@@ -16,13 +16,12 @@
1616
1717{-# LANGUAGE FlexibleContexts #-}
1818{-# LANGUAGE ScopedTypeVariables #-}
19−{-# LANGUAGE CPP #-}
2019
2120module Language.PureScript.Renamer (renameInModules) where
2221
23−#if __GLASGOW_HASKELL__ < 710
24−import Control.Applicative
25−#endif
22+import Prelude ()
23+import Prelude.Compat
24+
2625import Control.Monad.State
2726
2827import Data.List (find)
@@ -135,8 +134,8 @@ renameInDecl isTopLevel (NonRec name val) = do
135134 name' <- if isTopLevel then return name else updateScope name
136135 NonRec name' <$> renameInValue val
137136renameInDecl isTopLevel (Rec ds) = do
138− ds' <- mapM updateNames ds
139− Rec <$> mapM updateValues ds'
137+ ds' <- traverse updateNames ds
138+ Rec <$> traverse updateValues ds'
140139 where
141140 updateNames :: (Ident, Expr Ann) -> Rename (Ident, Expr Ann)
142141 updateNames (name, val) = do
@@ -155,7 +154,7 @@ renameInValue c@(Constructor{}) = return c
155154renameInValue (Accessor ann prop v) =
156155 Accessor ann prop <$> renameInValue v
157156renameInValue (ObjectUpdate ann obj vs) =
158− ObjectUpdate ann <$> renameInValue obj <*> mapM (\(name, v) -> (,) name <$> renameInValue v) vs
157+ ObjectUpdate ann <$> renameInValue obj <*> traverse (\(name, v) -> (,) name <$> renameInValue v) vs
159158renameInValue e@(Abs (_, _, _, Just IsTypeClassConstructor) _ _) = return e
160159renameInValue (Abs ann name v) =
161160 newScope $ Abs ann <$> updateScope name <*> renameInValue v
@@ -165,16 +164,16 @@ renameInValue (Var ann (Qualified Nothing name)) =
165164 Var ann . Qualified Nothing <$> lookupIdent name
166165renameInValue v@(Var{}) = return v
167166renameInValue (Case ann vs alts) =
168− newScope $ Case ann <$> mapM renameInValue vs <*> mapM renameInCaseAlternative alts
167+ newScope $ Case ann <$> traverse renameInValue vs <*> traverse renameInCaseAlternative alts
169168renameInValue (Let ann ds v) =
170− newScope $ Let ann <$> mapM (renameInDecl False) ds <*> renameInValue v
169+ newScope $ Let ann <$> traverse (renameInDecl False) ds <*> renameInValue v
171170
172171-- |
173172-- Renames within literals.
174173--
175174renameInLiteral :: (a -> Rename a) -> Literal a -> Rename (Literal a)
176−renameInLiteral rename (ArrayLiteral bs) = ArrayLiteral <$> mapM rename bs
177−renameInLiteral rename (ObjectLiteral bs) = ObjectLiteral <$> mapM (sndM rename) bs
175+renameInLiteral rename (ArrayLiteral bs) = ArrayLiteral <$> traverse rename bs
176+renameInLiteral rename (ObjectLiteral bs) = ObjectLiteral <$> traverse (sndM rename) bs
178177renameInLiteral _ l = return l
179178
180179-- |
@@ -182,8 +181,8 @@ renameInLiteral _ l = return l
182181--
183182renameInCaseAlternative :: CaseAlternative Ann -> Rename (CaseAlternative Ann)
184183renameInCaseAlternative (CaseAlternative bs v) = newScope $
185− CaseAlternative <$> mapM renameInBinder bs
186− <*> eitherM (mapM (pairM renameInValue renameInValue)) renameInValue v
184+ CaseAlternative <$> traverse renameInBinder bs
185+ <*> eitherM (traverse (pairM renameInValue renameInValue)) renameInValue v
187186
188187-- |
189188-- Renames within binders.
@@ -195,6 +194,6 @@ renameInBinder (LiteralBinder ann b) =
195194renameInBinder (VarBinder ann name) =
196195 VarBinder ann <$> updateScope name
197196renameInBinder (ConstructorBinder ann tctor dctor bs) =
198− ConstructorBinder ann tctor dctor <$> mapM renameInBinder bs
197+ ConstructorBinder ann tctor dctor <$> traverse renameInBinder bs
199198renameInBinder (NamedBinder ann name b) =
200199 NamedBinder ann <$> updateScope name <*> renameInBinder b
src/Language/PureScript/Sugar.hs+7−8
@@ -14,15 +14,14 @@
1414-----------------------------------------------------------------------------
1515
1616{-# LANGUAGE FlexibleContexts #-}
17−{-# LANGUAGE CPP #-}
1817
1918module Language.PureScript.Sugar (desugar, module S) where
2019
20+import Prelude ()
21+import Prelude.Compat
22+
2123import Control.Monad
2224import Control.Category ((>>>))
23−#if __GLASGOW_HASKELL__ < 710
24−import Control.Applicative
25−#endif
2625import Control.Monad.Error.Class (MonadError())
2726import Control.Monad.Writer.Class (MonadWriter())
2827import Control.Monad.Supply.Class
@@ -67,13 +66,13 @@ import Language.PureScript.Sugar.TypeDeclarations as S
6766desugar :: (Applicative m, MonadSupply m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) => [ExternsFile] -> [Module] -> m [Module]
6867desugar externs =
6968 map removeSignedLiterals
70− >>> mapM desugarObjectConstructors
71− >=> mapM desugarOperatorSections
72− >=> mapM desugarDoModule
69+ >>> traverse desugarObjectConstructors
70+ >=> traverse desugarOperatorSections
71+ >=> traverse desugarDoModule
7372 >=> desugarCasesModule
7473 >=> desugarTypeDeclarationsModule
7574 >=> desugarImports externs
7675 >=> rebracket externs
77− >=> mapM deriveInstances
76+ >=> traverse deriveInstances
7877 >=> desugarTypeClasses externs
7978 >=> createBindingGroupsModule
src/Language/PureScript/Sugar/BindingGroups.hs+3−5
@@ -15,7 +15,6 @@
1515-----------------------------------------------------------------------------
1616
1717{-# LANGUAGE FlexibleContexts #-}
18−{-# LANGUAGE CPP #-}
1918{-# LANGUAGE ScopedTypeVariables #-}
2019
2120module Language.PureScript.Sugar.BindingGroups (
@@ -25,13 +24,12 @@ module Language.PureScript.Sugar.BindingGroups (
2524 collapseBindingGroupsModule
2625) where
2726
27+import Prelude ()
28+import Prelude.Compat
29+
2830import Data.Graph
2931import Data.List (nub, intersect)
3032import Data.Maybe (isJust, mapMaybe)
31−#if __GLASGOW_HASKELL__ < 710
32−import Data.Foldable (foldMap)
33−import Control.Applicative
34−#endif
3533import Control.Monad ((<=<))
3634import Control.Monad.Error.Class (MonadError(..))
3735
src/Language/PureScript/Sugar/CaseDeclarations.hs+3−4
@@ -16,20 +16,19 @@
1616
1717{-# LANGUAGE FlexibleContexts #-}
1818{-# LANGUAGE ScopedTypeVariables #-}
19−{-# LANGUAGE CPP #-}
2019
2120module Language.PureScript.Sugar.CaseDeclarations (
2221 desugarCases,
2322 desugarCasesModule
2423) where
2524
25+import Prelude ()
26+import Prelude.Compat
27+
2628import Language.PureScript.Crash
2729import Data.Maybe (catMaybes)
2830import Data.List (nub, groupBy)
2931
30−#if __GLASGOW_HASKELL__ < 710
31−import Control.Applicative
32−#endif
3332import Control.Monad ((<=<), forM, replicateM, join, unless)
3433import Control.Monad.Error.Class (MonadError(..))
3534import Control.Monad.Supply.Class
src/Language/PureScript/Sugar/DoNotation.hs+3−4
@@ -16,12 +16,14 @@
1616
1717{-# LANGUAGE FlexibleContexts #-}
1818{-# LANGUAGE ScopedTypeVariables #-}
19−{-# LANGUAGE CPP #-}
2019
2120module Language.PureScript.Sugar.DoNotation (
2221 desugarDoModule
2322) where
2423
24+import Prelude ()
25+import Prelude.Compat
26+
2527import Language.PureScript.Crash
2628import Language.PureScript.Names
2729import Language.PureScript.AST
@@ -29,9 +31,6 @@ import Language.PureScript.Errors
2931
3032import qualified Language.PureScript.Constants as C
3133
32−#if __GLASGOW_HASKELL__ < 710
33−import Control.Applicative
34−#endif
3534import Control.Monad.Error.Class (MonadError(..))
3635import Control.Monad.Supply.Class
3736
src/Language/PureScript/Sugar/Names.hs+7−9
@@ -11,20 +11,18 @@
1111--
1212-----------------------------------------------------------------------------
1313
14−{-# LANGUAGE CPP #-}
1514{-# LANGUAGE FlexibleContexts #-}
1615{-# LANGUAGE RecordWildCards #-}
1716{-# LANGUAGE ScopedTypeVariables #-}
1817
1918module Language.PureScript.Sugar.Names (desugarImports) where
2019
20+import Prelude ()
21+import Prelude.Compat
22+
2123import Data.List (find, nub)
2224import Data.Maybe (fromMaybe, mapMaybe)
2325
24−#if __GLASGOW_HASKELL__ < 710
25−import Data.Monoid (mempty)
26−import Control.Applicative (Applicative(..), (<$>), (<*>))
27−#endif
2826import Control.Monad
2927import Control.Monad.Error.Class (MonadError(..))
3028import Control.Monad.Writer (MonadWriter(..), censor)
@@ -52,7 +50,7 @@ desugarImports :: forall m. (Applicative m, MonadError MultipleErrors m, MonadWr
5250desugarImports externs modules = do
5351 env <- silence $ foldM externsEnv primEnv externs
5452 env' <- foldM updateEnv env modules
55− mapM (renameInModule' env') modules
53+ traverse (renameInModule' env') modules
5654 where
5755 silence :: m a -> m a
5856 silence = censor (const mempty)
@@ -161,13 +159,13 @@ renameInModule env imports (Module ss coms mn decls exps) =
161159 updateDecl (_, bound) d@(PositionedDeclaration pos _ _) =
162160 return ((Just pos, bound), d)
163161 updateDecl (pos, bound) (DataDeclaration dtype name args dctors) =
164− (,) (pos, bound) <$> (DataDeclaration dtype name args <$> mapM (sndM (mapM (updateTypesEverywhere pos))) dctors)
162+ (,) (pos, bound) <$> (DataDeclaration dtype name args <$> traverse (sndM (traverse (updateTypesEverywhere pos))) dctors)
165163 updateDecl (pos, bound) (TypeSynonymDeclaration name ps ty) =
166164 (,) (pos, bound) <$> (TypeSynonymDeclaration name ps <$> updateTypesEverywhere pos ty)
167165 updateDecl (pos, bound) (TypeClassDeclaration className args implies ds) =
168166 (,) (pos, bound) <$> (TypeClassDeclaration className args <$> updateConstraints pos implies <*> pure ds)
169167 updateDecl (pos, bound) (TypeInstanceDeclaration name cs cn ts ds) =
170− (,) (pos, bound) <$> (TypeInstanceDeclaration name <$> updateConstraints pos cs <*> updateClassName cn pos <*> mapM (updateTypesEverywhere pos) ts <*> pure ds)
168+ (,) (pos, bound) <$> (TypeInstanceDeclaration name <$> updateConstraints pos cs <*> updateClassName cn pos <*> traverse (updateTypesEverywhere pos) ts <*> pure ds)
171169 updateDecl (pos, bound) (TypeDeclaration name ty) =
172170 (,) (pos, bound) <$> (TypeDeclaration name <$> updateTypesEverywhere pos ty)
173171 updateDecl (pos, bound) (ExternDeclaration name ty) =
@@ -225,7 +223,7 @@ renameInModule env imports (Module ss coms mn decls exps) =
225223 updateType t = return t
226224
227225 updateConstraints :: Maybe SourceSpan -> [Constraint] -> m [Constraint]
228− updateConstraints pos = mapM (\(name, ts) -> (,) <$> updateClassName name pos <*> mapM (updateTypesEverywhere pos) ts)
226+ updateConstraints pos = traverse (\(name, ts) -> (,) <$> updateClassName name pos <*> traverse (updateTypesEverywhere pos) ts)
229227
230228 updateTypeName :: Qualified ProperName -> Maybe SourceSpan -> m (Qualified ProperName)
231229 updateTypeName = update UnknownType (importedTypes imports) (resolveType . exportedTypes) IsProperName
src/Language/PureScript/Sugar/Names/Exports.hs+5−5
@@ -11,7 +11,6 @@
1111--
1212-----------------------------------------------------------------------------
1313
14−{-# LANGUAGE CPP #-}
1514{-# LANGUAGE FlexibleContexts #-}
1615{-# LANGUAGE RankNTypes #-}
1716{-# LANGUAGE ScopedTypeVariables #-}
@@ -22,12 +21,13 @@ module Language.PureScript.Sugar.Names.Exports
2221 , resolveExports
2322 ) where
2423
24+import Prelude ()
25+import Prelude.Compat
26+
2527import Data.List (find, intersect)
2628import Data.Maybe (fromMaybe, mapMaybe)
29+import Data.Foldable (traverse_)
2730
28−#if __GLASGOW_HASKELL__ < 710
29−import Control.Applicative (Applicative(..), (<$>))
30−#endif
3131import Control.Monad
3232import Control.Monad.Error.Class (MonadError(..))
3333
@@ -197,7 +197,7 @@ filterModule mn exps refs = do
197197 Nothing -> throwError . errorMessage . UnknownExportType $ name
198198 Just ((_, dcons), _) -> do
199199 let expDcons' = fromMaybe dcons expDcons
200− mapM_ (checkDcon name dcons) expDcons'
200+ traverse_ (checkDcon name dcons) expDcons'
201201 return $ ((name, expDcons'), mn) : result
202202 filterTypes _ result _ = return result
203203
src/Language/PureScript/Sugar/Names/Imports.hs+8−8
@@ -11,7 +11,6 @@
1111--
1212-----------------------------------------------------------------------------
1313
14−{-# LANGUAGE CPP #-}
1514{-# LANGUAGE FlexibleContexts #-}
1615{-# LANGUAGE ScopedTypeVariables #-}
1716{-# LANGUAGE TupleSections #-}
@@ -22,13 +21,14 @@ module Language.PureScript.Sugar.Names.Imports
2221 , findImports
2322 ) where
2423
24+import Prelude ()
25+import Prelude.Compat
26+
2527import Data.List (find)
2628import Data.Maybe (fromMaybe, isNothing)
29+import Data.Foldable (traverse_)
2730
2831import Control.Arrow (first)
29−#if __GLASGOW_HASKELL__ < 710
30−import Control.Applicative (Applicative(..), (<$>))
31−#endif
3232import Control.Monad
3333import Control.Monad.Error.Class (MonadError(..))
3434import Control.Monad.Writer (MonadWriter(..), censor)
@@ -57,7 +57,7 @@ findImports = foldM (go Nothing) M.empty
5757
5858 -- Ensure that classes don't appear in an `import X hiding (...)`
5959 checkImportRefType :: ImportDeclarationType -> m ()
60− checkImportRefType (Hiding refs) = mapM_ checkImportRef refs
60+ checkImportRefType (Hiding refs) = traverse_ checkImportRef refs
6161 checkImportRefType _ = return ()
6262 checkImportRef :: DeclarationRef -> m ()
6363 checkImportRef (ModuleRef name) = throwError . errorMessage $ ImportHidingModule name
@@ -105,7 +105,7 @@ resolveImport currentModule importModule exps imps impQual =
105105
106106 -- Check that a 'DeclarationRef' refers to an importable symbol
107107 checkRefs :: [DeclarationRef] -> m ()
108− checkRefs = mapM_ check
108+ checkRefs = traverse_ check
109109 where
110110 check (PositionedDeclarationRef pos _ r) =
111111 rethrowWithPosition pos $ check r
@@ -114,7 +114,7 @@ resolveImport currentModule importModule exps imps impQual =
114114 check (TypeRef name dctors) = do
115115 checkImportExists UnknownImportType ((fst . fst) `map` exportedTypes exps) name
116116 let allDctors = fst `map` allExportedDataConstructors name
117− maybe (return ()) (mapM_ $ checkDctorExists name allDctors) dctors
117+ maybe (return ()) (traverse_ $ checkDctorExists name allDctors) dctors
118118 check (TypeClassRef name) =
119119 checkImportExists UnknownImportTypeClass (fst `map` exportedTypeClasses exps) name
120120 --check (ModuleRef name) =
@@ -168,7 +168,7 @@ resolveImport currentModule importModule exps imps impQual =
168168 exportedDctors = allExportedDataConstructors name
169169 dctorNames :: [ProperName]
170170 dctorNames = fst `map` exportedDctors
171− maybe (return ()) (mapM_ $ checkDctorExists name dctorNames) dctors
171+ maybe (return ()) (traverse_ $ checkDctorExists name dctorNames) dctors
172172 when (null dctorNames && isNothing dctors) . tell . errorMessage $ MisleadingEmptyTypeImport importModule name
173173 dctors' <- foldM (\m -> updateImports m runProperName exportedDctors) (importedDataConstructors imp) (fromMaybe dctorNames dctors)
174174 return $ imp { importedTypes = types', importedDataConstructors = dctors' }
src/Language/PureScript/Sugar/ObjectWildcards.hs+3−4
@@ -14,15 +14,14 @@
1414
1515{-# LANGUAGE FlexibleContexts #-}
1616{-# LANGUAGE ScopedTypeVariables #-}
17−{-# LANGUAGE CPP #-}
1817
1918module Language.PureScript.Sugar.ObjectWildcards (
2019 desugarObjectConstructors
2120) where
2221
23−#if __GLASGOW_HASKELL__ < 710
24−import Control.Applicative
25−#endif
22+import Prelude ()
23+import Prelude.Compat
24+
2625import Control.Arrow (second)
2726import Control.Monad.Error.Class (MonadError(..))
2827import Control.Monad.Supply.Class
src/Language/PureScript/Sugar/Operators.hs+5−6
@@ -21,7 +21,6 @@
2121{-# LANGUAGE FlexibleContexts #-}
2222{-# LANGUAGE ScopedTypeVariables #-}
2323{-# LANGUAGE RecordWildCards #-}
24−{-# LANGUAGE CPP #-}
2524
2625module Language.PureScript.Sugar.Operators (
2726 rebracket,
@@ -29,15 +28,15 @@ module Language.PureScript.Sugar.Operators (
2928 desugarOperatorSections
3029) where
3130
31+import Prelude ()
32+import Prelude.Compat
33+
3234import Language.PureScript.Crash
3335import Language.PureScript.AST
3436import Language.PureScript.Errors
3537import Language.PureScript.Names
3638import Language.PureScript.Externs
3739
38−#if __GLASGOW_HASKELL__ < 710
39−import Control.Applicative
40−#endif
4140import Control.Monad.State
4241import Control.Monad.Error.Class (MonadError(..))
4342import Control.Monad.Supply.Class
@@ -60,7 +59,7 @@ rebracket externs ms = do
6059 let fixities = concatMap externsFixities externs ++ concatMap collectFixities ms
6160 ensureNoDuplicates $ map (\(i, pos, _) -> (i, pos)) fixities
6261 let opTable = customOperatorTable $ map (\(i, _, f) -> (i, f)) fixities
63− mapM (rebracketModule opTable) ms
62+ traverse (rebracketModule opTable) ms
6463
6564removeSignedLiterals :: Module -> Module
6665removeSignedLiterals (Module ss coms mn ds exts) = Module ss coms mn (map f' ds) exts
@@ -164,7 +163,7 @@ matchOp op = do
164163 guard $ ident == op
165164
166165desugarOperatorSections :: forall m. (Applicative m, MonadSupply m, MonadError MultipleErrors m) => Module -> m Module
167−desugarOperatorSections (Module ss coms mn ds exts) = Module ss coms mn <$> mapM goDecl ds <*> pure exts
166+desugarOperatorSections (Module ss coms mn ds exts) = Module ss coms mn <$> traverse goDecl ds <*> pure exts
168167 where
169168
170169 goDecl :: Declaration -> m Declaration
src/Language/PureScript/Sugar/TypeClasses.hs+5−6
@@ -16,7 +16,6 @@
1616
1717{-# LANGUAGE FlexibleContexts #-}
1818{-# LANGUAGE RecordWildCards #-}
19−{-# LANGUAGE CPP #-}
2019
2120module Language.PureScript.Sugar.TypeClasses
2221 ( desugarTypeClasses
@@ -24,6 +23,9 @@ module Language.PureScript.Sugar.TypeClasses
2423 , superClassDictionaryNames
2524 ) where
2625
26+import Prelude ()
27+import Prelude.Compat
28+
2729import Language.PureScript.Crash
2830import Language.PureScript.AST hiding (isExported)
2931import Language.PureScript.Environment
@@ -37,9 +39,6 @@ import Language.PureScript.Types
3739
3840import qualified Language.PureScript.Constants as C
3941
40−#if __GLASGOW_HASKELL__ < 710
41−import Control.Applicative
42−#endif
4342import Control.Arrow (first, second)
4443import Control.Monad.Error.Class (MonadError(..))
4544import Control.Monad.State
@@ -57,7 +56,7 @@ type Desugar = StateT MemberMap
5756-- instance dictionary expressions.
5857--
5958desugarTypeClasses :: (Functor m, Applicative m, MonadSupply m, MonadError MultipleErrors m) => [ExternsFile] -> [Module] -> m [Module]
60−desugarTypeClasses externs = flip evalStateT initialState . mapM desugarModule
59+desugarTypeClasses externs = flip evalStateT initialState . traverse desugarModule
6160 where
6261 initialState :: MemberMap
6362 initialState = M.fromList (externs >>= \ExternsFile{..} -> mapMaybe (fromExternsDecl efModuleName) efDeclarations)
@@ -262,7 +261,7 @@ typeInstanceDictionaryDeclaration name mn deps className tys decls =
262261 let memberTypes = map (second (replaceAllTypeVars (zip (map fst args) tys))) instanceTys
263262
264263 -- Create values for the type instance members
265− members <- zip (map typeClassMemberName decls) <$> mapM (memberToValue memberTypes) decls
264+ members <- zip (map typeClassMemberName decls) <$> traverse (memberToValue memberTypes) decls
266265
267266 -- Create the type of the dictionary
268267 -- The type is an object type, but depending on type instance dependencies, may be constrained.
src/Language/PureScript/Sugar/TypeClasses/Deriving.hs+4−5
@@ -19,19 +19,18 @@
1919{-# LANGUAGE PatternGuards #-}
2020{-# LANGUAGE RankNTypes #-}
2121{-# LANGUAGE ScopedTypeVariables #-}
22−{-# LANGUAGE CPP #-}
2322
2423module Language.PureScript.Sugar.TypeClasses.Deriving (
2524 deriveInstances
2625) where
2726
28−import Data.List
27+import Prelude ()
28+import Prelude.Compat
29+
30+import Data.List (foldl', find, sortBy)
2931import Data.Maybe (fromMaybe)
3032import Data.Ord (comparing)
3133
32−#if __GLASGOW_HASKELL__ < 710
33−import Control.Applicative
34−#endif
3534import Control.Monad (replicateM)
3635import Control.Monad.Supply.Class (MonadSupply, freshName)
3736import Control.Monad.Error.Class (MonadError(..))
src/Language/PureScript/Sugar/TypeDeclarations.hs+3−4
@@ -16,15 +16,14 @@
1616
1717{-# LANGUAGE FlexibleContexts #-}
1818{-# LANGUAGE ScopedTypeVariables #-}
19−{-# LANGUAGE CPP #-}
2019
2120module Language.PureScript.Sugar.TypeDeclarations (
2221 desugarTypeDeclarationsModule
2322) where
2423
25−#if __GLASGOW_HASKELL__ < 710
26−import Control.Applicative
27−#endif
24+import Prelude ()
25+import Prelude.Compat
26+
2827import Control.Monad (forM)
2928import Control.Monad.Error.Class (MonadError(..))
3029
src/Language/PureScript/Traversals.hs+2−5
@@ -12,13 +12,10 @@
1212--
1313-----------------------------------------------------------------------------
1414
15−{-# LANGUAGE CPP #-}
16−
1715module Language.PureScript.Traversals where
1816
19−#if __GLASGOW_HASKELL__ < 710
20−import Control.Applicative
21−#endif
17+import Prelude ()
18+import Prelude.Compat
2219
2320fstM :: (Functor f) => (a -> f c) -> (a, b) -> f (c, b)
2421fstM f (a, b) = flip (,) b <$> f a
src/Language/PureScript/TypeChecker.hs+14−16
@@ -16,13 +16,15 @@
1616{-# LANGUAGE ScopedTypeVariables #-}
1717{-# LANGUAGE FlexibleInstances #-}
1818{-# LANGUAGE FlexibleContexts #-}
19−{-# LANGUAGE CPP #-}
2019
2120module Language.PureScript.TypeChecker (
2221 module T,
2322 typeCheckModule
2423) where
2524
25+import Prelude ()
26+import Prelude.Compat
27+
2628import Language.PureScript.TypeChecker.Monad as T
2729import Language.PureScript.TypeChecker.Kinds as T
2830import Language.PureScript.TypeChecker.Types as T
@@ -30,15 +32,11 @@ import Language.PureScript.TypeChecker.Synonyms as T
3032
3133import Data.Maybe
3234import Data.List (nub, (\\), sort, group)
33−import Data.Foldable (for_)
34−import Data.Traversable (for)
35+import Data.Foldable (for_, traverse_)
3536
3637import qualified Data.Map as M
3738
38−#if __GLASGOW_HASKELL__ < 710
39−import Control.Applicative
40−#endif
41−import Control.Monad (when, unless, void)
39+import Control.Monad (when, unless, void, forM, forM_)
4240import Control.Monad.State.Class (MonadState(..), modify)
4341import Control.Monad.Error.Class (MonadError(..))
4442import Control.Monad.Writer.Class (MonadWriter(..))
@@ -79,7 +77,7 @@ addDataConstructor ::
7977 m ()
8078addDataConstructor moduleName dtype name args dctor tys = do
8179 env <- getEnv
82− mapM_ checkTypeSynonyms tys
80+ traverse_ checkTypeSynonyms tys
8381 let retTy = foldl TypeApp (TypeConstructor (Qualified (Just moduleName) name)) (map TypeVar args)
8482 let dctorTy = foldr function retTy tys
8583 let polyType = mkForAll args dctorTy
@@ -198,7 +196,7 @@ typeCheckAll :: forall m.
198196 [DeclarationRef] ->
199197 [Declaration] ->
200198 m [Declaration]
201−typeCheckAll moduleName _ ds = mapM go ds <* mapM_ checkOrphanFixities ds
199+typeCheckAll moduleName _ ds = traverse go ds <* traverse_ checkOrphanFixities ds
202200 where
203201 go :: Declaration -> m Declaration
204202 go (DataDeclaration dtype name args dctors) = do
@@ -255,11 +253,11 @@ typeCheckAll moduleName _ ds = mapM go ds <* mapM_ checkOrphanFixities ds
255253 for_ (map (\(ident, _, _) -> ident) vals) $ \name ->
256254 valueIsNotDefined moduleName name
257255 tys <- typesOf moduleName $ map (\(ident, _, ty) -> (ident, ty)) vals
258− vals' <- for [ (name, val, nameKind, ty)
259− | (name, nameKind, _) <- vals
260− , (name', (val, ty)) <- tys
261− , name == name'
262− ] $ \(name, val, nameKind, ty) -> do
256+ vals' <- forM [ (name, val, nameKind, ty)
257+ | (name, nameKind, _) <- vals
258+ , (name', (val, ty)) <- tys
259+ , name == name'
260+ ] $ \(name, val, nameKind, ty) -> do
263261 addValue moduleName name ty nameKind
264262 return (name, nameKind, val)
265263 return $ BindingGroupDeclaration vals'
@@ -282,8 +280,8 @@ typeCheckAll moduleName _ ds = mapM go ds <* mapM_ checkOrphanFixities ds
282280 addTypeClass moduleName pn args implies tys
283281 return d
284282 go (d@(TypeInstanceDeclaration dictName deps className tys body)) = rethrow (addHint (ErrorInInstance className tys)) $ do
285− mapM_ (checkTypeClassInstance moduleName) tys
286− for_ deps $ mapM_ (checkTypeClassInstance moduleName) . snd
283+ traverse_ (checkTypeClassInstance moduleName) tys
284+ forM_ deps $ traverse_ (checkTypeClassInstance moduleName) . snd
287285 checkOrphanInstance dictName className tys
288286 _ <- traverseTypeInstanceBody checkInstanceMembers body
289287 let dict = TypeClassDictionaryInScope (Qualified (Just moduleName) dictName) [] className tys (Just deps)
src/Language/PureScript/TypeChecker/Entailment.hs+5−9
@@ -13,7 +13,6 @@
1313--
1414-----------------------------------------------------------------------------
1515
16−{-# LANGUAGE CPP #-}
1716{-# LANGUAGE ScopedTypeVariables #-}
1817{-# LANGUAGE FlexibleContexts #-}
1918
@@ -21,17 +20,14 @@ module Language.PureScript.TypeChecker.Entailment (
2120 entails
2221) where
2322
23+import Prelude ()
24+import Prelude.Compat
25+
2426import Data.Function (on)
25−import Data.List
27+import Data.List (minimumBy, sortBy, groupBy)
2628import Data.Maybe (maybeToList, mapMaybe)
27−#if __GLASGOW_HASKELL__ < 710
28−import Data.Foldable (foldMap)
29−#endif
3029import qualified Data.Map as M
3130
32−#if __GLASGOW_HASKELL__ < 710
33−import Control.Applicative
34−#endif
3531import Control.Arrow (Arrow(..))
3632import Control.Monad.State
3733import Control.Monad.Error.Class (MonadError(..))
@@ -118,7 +114,7 @@ entails moduleName context = solve
118114 solveSubgoals :: [(String, Type)] -> Maybe [Constraint] -> m (Maybe [DictionaryValue])
119115 solveSubgoals _ Nothing = return Nothing
120116 solveSubgoals subst (Just subgoals) = do
121− dict <- mapM (uncurry (go (work + 1)) . second (map (replaceAllTypeVars subst))) subgoals
117+ dict <- traverse (uncurry (go (work + 1)) . second (map (replaceAllTypeVars subst))) subgoals
122118 return $ Just dict
123119
124120 -- Make a dictionary from subgoal dictionaries by applying the correct function
src/Language/PureScript/TypeChecker/Kinds.hs+5−5
@@ -18,7 +18,7 @@
1818{-# LANGUAGE FlexibleContexts #-}
1919{-# LANGUAGE TupleSections #-}
2020{-# LANGUAGE ScopedTypeVariables #-}
21−{-# LANGUAGE CPP #-}
21+{-# LANGUAGE RankNTypes #-}
2222
2323module Language.PureScript.TypeChecker.Kinds (
2424 kindOf,
@@ -27,12 +27,12 @@ module Language.PureScript.TypeChecker.Kinds (
2727 kindsOfAll
2828) where
2929
30+import Prelude ()
31+import Prelude.Compat
32+
3033import qualified Data.Map as M
3134
3235import Control.Arrow (second)
33−#if __GLASGOW_HASKELL__ < 710
34−import Control.Applicative
35−#endif
3636import Control.Monad
3737import Control.Monad.Error.Class (MonadError(..))
3838import Control.Monad.Writer.Class (MonadWriter(..))
@@ -179,7 +179,7 @@ kindsOfAll moduleName syns tys = fmap tidyUp . liftUnify $ do
179179-- | Solve the set of kind constraints associated with the data constructors for a type constructor
180180solveTypes :: (Functor m, Applicative m, MonadError MultipleErrors m, MonadState CheckState m) => Bool -> [Type] -> [Kind] -> Kind -> m Kind
181181solveTypes isData ts kargs tyCon = do
182− ks <- mapM (fmap fst . infer) ts
182+ ks <- traverse (fmap fst . infer) ts
183183 when isData $ do
184184 unifyKinds tyCon (foldr FunKind Star kargs)
185185 forM_ ks $ \k -> unifyKinds k Star
src/Language/PureScript/TypeChecker/Monad.hs+11−7
@@ -19,17 +19,16 @@
1919{-# LANGUAGE MultiParamTypeClasses #-}
2020{-# LANGUAGE FlexibleContexts #-}
2121{-# LANGUAGE GADTs #-}
22−{-# LANGUAGE CPP #-}
2322
2423module Language.PureScript.TypeChecker.Monad where
2524
25+import Prelude ()
26+import Prelude.Compat
27+
2628import Data.Maybe
29+import Data.Foldable (for_)
2730import qualified Data.Map as M
2831
29−#if __GLASGOW_HASKELL__ < 710
30−import Data.Monoid
31−import Control.Applicative
32−#endif
3332import Control.Arrow (second)
3433import Control.Monad.State
3534import Control.Monad.Error.Class (MonadError(..))
@@ -90,8 +89,13 @@ bindTypes newNames action = do
9089 return a
9190
9291-- | Temporarily bind a collection of names to types
93−withScopedTypeVars :: (Functor m, MonadState CheckState m) => ModuleName -> [(String, Kind)] -> m a -> m a
94−withScopedTypeVars mn ks = bindTypes (M.fromList (map (\(name, k) -> (Qualified (Just mn) (ProperName name), (k, ScopedTypeVar))) ks))
92+withScopedTypeVars :: (Functor m, Applicative m, MonadState CheckState m, MonadWriter MultipleErrors m) => ModuleName -> [(String, Kind)] -> m a -> m a
93+withScopedTypeVars mn ks ma = do
94+ orig <- get
95+ forM_ ks $ \(name, _) ->
96+ when (Qualified (Just mn) (ProperName name) `M.member` types (checkEnv orig)) $
97+ tell . errorMessage $ ShadowedTypeVar name
98+ bindTypes (M.fromList (map (\(name, k) -> (Qualified (Just mn) (ProperName name), (k, ScopedTypeVar))) ks)) ma
9599
96100-- | Temporarily make a collection of type class dictionaries available
97101withTypeClassDictionaries :: (MonadState CheckState m) => [TypeClassDictionaryInScope] -> m a -> m a
src/Language/PureScript/TypeChecker/Skolems.hs+3−4
@@ -13,7 +13,6 @@
1313--
1414-----------------------------------------------------------------------------
1515
16−{-# LANGUAGE CPP #-}
1716{-# LANGUAGE FlexibleContexts #-}
1817
1918module Language.PureScript.TypeChecker.Skolems (
@@ -25,12 +24,12 @@ module Language.PureScript.TypeChecker.Skolems (
2524 skolemEscapeCheck
2625) where
2726
27+import Prelude ()
28+import Prelude.Compat
29+
2830import Data.List (nub, (\\))
2931import Data.Monoid
3032
31−#if __GLASGOW_HASKELL__ < 710
32−import Control.Applicative
33−#endif
3433import Control.Monad.Error.Class (MonadError(..))
3534import Control.Monad.State.Class (MonadState(..), gets, modify)
3635
src/Language/PureScript/TypeChecker/Synonyms.hs+3−4
@@ -17,18 +17,17 @@
1717{-# LANGUAGE MultiParamTypeClasses #-}
1818{-# LANGUAGE PatternGuards #-}
1919{-# LANGUAGE GADTs #-}
20−{-# LANGUAGE CPP #-}
2120
2221module Language.PureScript.TypeChecker.Synonyms (
2322 replaceAllTypeSynonyms
2423) where
2524
25+import Prelude ()
26+import Prelude.Compat
27+
2628import Data.Maybe (fromMaybe)
2729import qualified Data.Map as M
2830
29−#if __GLASGOW_HASKELL__ < 710
30−import Control.Applicative
31−#endif
3231import Control.Monad.Error.Class (MonadError(..))
3332import Control.Monad.State
3433
src/Language/PureScript/TypeChecker/Types.hs+14−15
@@ -17,7 +17,6 @@
1717{-# LANGUAGE ScopedTypeVariables #-}
1818{-# LANGUAGE MultiParamTypeClasses #-}
1919{-# LANGUAGE OverloadedStrings #-}
20−{-# LANGUAGE CPP #-}
2120
2221module Language.PureScript.TypeChecker.Types (
2322 typesOf
@@ -39,14 +38,14 @@ module Language.PureScript.TypeChecker.Types (
3938 Check a function of a given type returns a value of another type when applied to its arguments
4039-}
4140
41+import Prelude ()
42+import Prelude.Compat
43+
4244import Data.Either (lefts, rights)
43−import Data.List
45+import Data.List (transpose, nub, (\\), partition, delete)
4446import Data.Maybe (fromMaybe)
4547import qualified Data.Map as M
4648
47−#if __GLASGOW_HASKELL__ < 710
48−import Control.Applicative
49−#endif
5049import Control.Monad
5150import Control.Monad.State.Class (MonadState(..), gets)
5251import Control.Monad.Error.Class (MonadError(..))
@@ -236,20 +235,20 @@ infer' v@(StringLiteral _) = return $ TypedValue True v tyString
236235infer' v@(CharLiteral _) = return $ TypedValue True v tyChar
237236infer' v@(BooleanLiteral _) = return $ TypedValue True v tyBoolean
238237infer' (ArrayLiteral vals) = do
239− ts <- mapM infer vals
238+ ts <- traverse infer vals
240239 els <- freshType
241240 forM_ ts $ \(TypedValue _ _ t) -> unifyTypes els t
242241 return $ TypedValue True (ArrayLiteral ts) (TypeApp tyArray els)
243242infer' (ObjectLiteral ps) = do
244243 ensureNoDuplicateProperties ps
245− ts <- mapM (infer . snd) ps
244+ ts <- traverse (infer . snd) ps
246245 let fields = zipWith (\name (TypedValue _ _ t) -> (name, t)) (map fst ps) ts
247246 ty = TypeApp tyObject $ rowFromList (fields, REmpty)
248247 return $ TypedValue True (ObjectLiteral (zip (map fst ps) ts)) ty
249248infer' (ObjectUpdate o ps) = do
250249 ensureNoDuplicateProperties ps
251250 row <- freshType
252− newVals <- zipWith (\(name, _) t -> (name, t)) ps <$> mapM (infer . snd) ps
251+ newVals <- zipWith (\(name, _) t -> (name, t)) ps <$> traverse (infer . snd) ps
253252 let newTys = map (\(name, TypedValue _ _ ty) -> (name, ty)) newVals
254253 oldTys <- zip (map fst ps) <$> replicateM (length ps) freshType
255254 let oldTy = TypeApp tyObject $ rowFromList (oldTys, row)
@@ -396,7 +395,7 @@ inferBinder val (ObjectBinder props) = do
396395 return $ m1 `M.union` m2
397396inferBinder val (ArrayBinder binders) = do
398397 el <- freshType
399− m1 <- M.unions <$> mapM (inferBinder el) binders
398+ m1 <- M.unions <$> traverse (inferBinder el) binders
400399 unifyTypes val (TypeApp tyArray el)
401400 return m1
402401inferBinder val (NamedBinder name binder) = do
@@ -719,12 +718,12 @@ checkFunctionApplication' _ fnTy arg _ = throwError . errorMessage $ CannotApply
719718
720719-- | Compute the meet of two types, i.e. the most general type which both types subsume.
721720-- TODO: is this really needed?
722−meet ::
723− (Functor m, Applicative m, MonadState CheckState m, MonadError MultipleErrors m) =>
724− Expr ->
725− Expr ->
726− Type ->
727− Type ->
721+meet ::
722+ (Functor m, Applicative m, MonadState CheckState m, MonadError MultipleErrors m) =>
723+ Expr ->
724+ Expr ->
725+ Type ->
726+ Type ->
728727 m (Expr, Expr, Type)
729728meet e1 e2 (ForAll ident t1 _) t2 = do
730729 t1' <- replaceVarWithUnknown ident t1
src/Language/PureScript/Types.hs+3−4
@@ -16,10 +16,12 @@
1616{-# LANGUAGE DeriveDataTypeable #-}
1717{-# LANGUAGE GeneralizedNewtypeDeriving #-}
1818{-# LANGUAGE TemplateHaskell #-}
19−{-# LANGUAGE CPP #-}
2019
2120module Language.PureScript.Types where
2221
22+import Prelude ()
23+import Prelude.Compat
24+
2325import Data.Data
2426import Data.List (nub)
2527import Data.Maybe (fromMaybe)
@@ -27,9 +29,6 @@ import qualified Data.Aeson as A
2729import qualified Data.Aeson.TH as A
2830
2931import Control.Arrow (second)
30−#if __GLASGOW_HASKELL__ < 710
31−import Control.Applicative
32−#endif
3332import Control.Monad ((<=<))
3433
3534import Language.PureScript.Names
tests/Main.hs+3−7
@@ -16,7 +16,6 @@
1616{-# LANGUAGE TupleSections #-}
1717{-# LANGUAGE GeneralizedNewtypeDeriving #-}
1818{-# LANGUAGE FlexibleInstances #-}
19−{-# LANGUAGE CPP #-}
2019
2120-- Failing tests can specify the kind of error that should be thrown with a
2221-- @shouldFailWith declaration. For example:
@@ -35,6 +34,9 @@
3534
3635module Main (main) where
3736
37+import Prelude ()
38+import Prelude.Compat
39+
3840import qualified Language.PureScript as P
3941import qualified Language.PureScript.CodeGen.JS as J
4042import qualified Language.PureScript.CoreFn as CF
@@ -42,18 +44,12 @@ import qualified Language.PureScript.CoreFn as CF
4244import Data.Char (isSpace)
4345import Data.Maybe (mapMaybe, fromMaybe)
4446import Data.List (isSuffixOf, sort, stripPrefix)
45−#if __GLASGOW_HASKELL__ < 710
46−import Data.Traversable (traverse)
47−#endif
4847import Data.Time.Clock (UTCTime())
4948
5049import qualified Data.Map as M
5150
5251import Control.Monad
5352import Control.Monad.IO.Class (liftIO)
54−#if __GLASGOW_HASKELL__ < 710
55−import Control.Applicative
56−#endif
5753import Control.Arrow ((>>>))
5854
5955import Control.Monad.Reader
tests/common/TestsSetup.hs+3−8
@@ -10,18 +10,13 @@
1010-- |
1111--
1212-----------------------------------------------------------------------------
13−
14−{-# LANGUAGE CPP #-}
15−
1613module TestsSetup where
1714
18−import Data.Maybe (fromMaybe)
15+import Prelude ()
16+import Prelude.Compat
1917
20−#if __GLASGOW_HASKELL__ < 710
21−import Control.Applicative
22−#endif
18+import Data.Maybe (fromMaybe)
2319import Control.Monad
24−
2520import Control.Monad.Trans.Maybe
2621
2722import System.Process