apiary-purescript 1.2.1 → 1.2.2
raw patch · 3 files changed
+16/−41 lines, 3 filesdep −template-haskelldep ~purescriptPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies removed: template-haskell
Dependency ranges changed: purescript
API changes (from Hackage documentation)
- Paths_apiary_purescript: getBinDir :: IO FilePath
- Paths_apiary_purescript: getDataDir :: IO FilePath
- Paths_apiary_purescript: getDataFileName :: FilePath -> IO FilePath
- Paths_apiary_purescript: getLibDir :: IO FilePath
- Paths_apiary_purescript: getLibexecDir :: IO FilePath
- Paths_apiary_purescript: getSysconfDir :: IO FilePath
- Paths_apiary_purescript: version :: Version
- Web.Apiary.PureScript: preludePath :: PureScriptConfig -> FilePath
+ Web.Apiary.PureScript: pureScriptPrefix :: PureScriptConfig -> [String]
- Web.Apiary.PureScript: PureScriptConfig :: [Pattern] -> FilePath -> FilePath -> Bool -> [FilePath] -> Options Compile -> PureScriptConfig
+ Web.Apiary.PureScript: PureScriptConfig :: [Pattern] -> FilePath -> Bool -> [FilePath] -> [String] -> Options Compile -> PureScriptConfig
Files
- apiary-purescript.cabal +2/−3
- src/Web/Apiary/PureScript.hs +1/−1
- src/Web/Apiary/PureScript/Internal.hs +13/−37
apiary-purescript.cabal view
@@ -1,5 +1,5 @@ name: apiary-purescript-version: 1.2.1+version: 1.2.2 synopsis: purescript compiler for apiary web framework. description: example: <https://github.com/philopon/apiary/blob/master/examples/pureScript.hs>@@ -20,9 +20,8 @@ exposed-modules: Web.Apiary.PureScript other-modules: Web.Apiary.PureScript.Internal build-depends: base >=4.6 && <4.8- , template-haskell , apiary >=1.1 && <1.3- , purescript ==0.6.2.*+ , purescript ==0.6.3.* , filepath >=1.3 && <1.4 , utf8-string >=0.3 && <0.4
src/Web/Apiary/PureScript.hs view
@@ -14,7 +14,7 @@ import Data.Apiary.Compat(Proxy(..)) initPureScript :: MonadIO m => I.PureScriptConfig -> Initializer' m I.PureScript-initPureScript = initializer' . I.makePureScript+initPureScript = initializer' . liftIO . I.makePureScript pureScript :: (Has I.PureScript exts, MonadIO m) => FilePath -> ActionT exts prms m () pureScript m = getExt (Proxy :: Proxy I.PureScript) >>= flip I.pureScript m
src/Web/Apiary/PureScript/Internal.hs view
@@ -1,6 +1,5 @@ {-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TupleSections #-} {-# LANGUAGE LambdaCase #-} {-# LANGUAGE DataKinds #-}@@ -8,11 +7,9 @@ module Web.Apiary.PureScript.Internal where -import System.FilePath(takeDirectory, (</>)) import qualified System.FilePath.Glob as G import qualified System.IO.UTF8 as U -import qualified Language.Haskell.TH as TH import qualified Language.PureScript as P import Control.Monad.Apiary.Action(ActionT, contentType, string, bytes)@@ -28,30 +25,24 @@ import qualified Data.HashMap.Strict as H import qualified Text.Parsec.Error as P -import qualified Paths_apiary_purescript as Path- data PureScriptException = ParseError P.ParseError | CompileError String deriving (Show, Typeable) instance Exception PureScriptException -purescriptDatadir :: FilePath-purescriptDatadir = takeDirectory $(TH.stringE =<< TH.runIO Path.getDataDir) </> "purescript-" ++ VERSION_purescript- defaultPatterns :: [G.Pattern] defaultPatterns = map G.compile [ "src/**/*.purs" , "bower_components/purescript-*/src/**/*.purs"- , "bower_components/purescript-*/src/**/*.purs.hs" ] data PureScriptConfig = PureScriptConfig { libraryPatterns :: [G.Pattern] , libraryBaseDir :: FilePath- , preludePath :: FilePath , development :: Bool , initialCompiles :: [FilePath]+ , pureScriptPrefix :: [String] , pureScriptOptions :: P.Options P.Compile } @@ -59,11 +50,11 @@ def = PureScriptConfig defaultPatterns "."- defaultPreludePath False []+ ["Generated by apiary-purescript. purescript version: " ++ "0.6.3"] -- TODO P.defaultCompileOptions- { P.optionsMain = Just "Main" }+ { P.optionsMain = Just "Main" } data PureScript = PureScript { pscConfig :: PureScriptConfig@@ -71,36 +62,21 @@ } instance Extension PureScript -makePureScript :: MonadIO m => PureScriptConfig -> m PureScript+makePureScript :: PureScriptConfig -> IO PureScript makePureScript conf = do- ir <- liftIO $ mapM (\p -> (p,) <$> compile conf p) (initialCompiles conf)- p <- liftIO $ PureScript conf <$> newIORef (H.fromList ir)+ ir <- mapM (\p -> (p,) <$> compile conf p) (initialCompiles conf)+ p <- PureScript conf <$> newIORef (H.fromList ir) return p -defaultPreludePath :: FilePath-defaultPreludePath = purescriptDatadir </> "prelude/prelude.purs"--readPscInput :: FilePath -> IO [P.Module]-readPscInput p = do- txt <- U.readFile p- case P.runIndentParser p P.parseModules txt of- Left e -> throwIO $ ParseError e- Right r -> return r--pscModules :: PureScriptConfig -> IO [P.Module]-pscModules conf = do- mods <- liftIO $ do- concat . fst <$> G.globDir (libraryPatterns conf) (libraryBaseDir conf)- let prel = preludePath conf- concat `fmap` mapM readPscInput (prel : mods)- compile :: PureScriptConfig -> FilePath -> IO String compile opt p = do- mods <- pscModules opt- mn <- readPscInput p- case P.compile (pureScriptOptions opt) (mn ++ mods) [] of- Left l -> throwIO (CompileError l)- Right (js, _, _) -> return js+ mods <- G.globDir (libraryPatterns opt) (libraryBaseDir opt)+ >>= mapM (\f -> (f,) <$> U.readFile f) . (p:) . concat . fst+ case P.parseModulesFromFiles id $ ("prelude", P.prelude) : mods of+ Left l -> throwIO (ParseError l)+ Right ms -> case P.compile (pureScriptOptions opt) (map snd ms) (pureScriptPrefix opt) of+ Left l -> throwIO (CompileError l)+ Right (js,_,_) -> return js pureScript :: MonadIO m => PureScript -> FilePath -> ActionT exts prms m () pureScript env p = do